• Sam Edwards's avatar
    arm64: dts: rockchip: Fix rk3588 USB power-domain clocks · 44de8996
    Sam Edwards authored
    The QoS blocks saved/restored when toggling the PD_USB power domain are
    clocked by ACLK_USB. Attempting to access these memory regions without
    that clock running will result in an indefinite CPU stall.
    
    The PD_USB node wasn't specifying this clock dependency, resulting in
    hangs when trying to toggle the power domain (either on or off), unless
    we get "lucky" and have ACLK_USB running for another reason at the time.
    This "luck" can result from the bootloader leaving USB powered/clocked,
    and if no built-in driver wants USB, Linux will disable the unused
    PD+CLK on boot when {pd,clk}_ignore_unused aren't given. This can also
    be unlucky because the two cleanup tasks run in parallel and race: if
    the CLK is disabled first, the PD deactivation stalls the boot. In any
    case, the PD cannot then be reenabled (if e.g. the driver loads later)
    once the clock has been stopped.
    
    Fix this by specifying a dependency on ACLK_USB, instead of only
    ACLK_USB_ROOT. The child-parent relationship means the former implies
    the latter anyway.
    
    Fixes: c9211fa2 ("arm64: dts: rockchip: Add base DT for rk3588 SoC")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarSam Edwards <CFSworks@gmail.com>
    Link: https://lore.kernel.org/r/20231216021019.1543811-1-CFSworks@gmail.com
    [changed to only include the missing clock, not dropping the root-clocks]
    Signed-off-by: default avatarHeiko Stuebner <heiko@sntech.de>
    44de8996
rk3588s.dtsi 66.4 KB