• Ulf Hansson's avatar
    PM / Domains: Allow genpd to power on during system PM phases · 39dd0f23
    Ulf Hansson authored
    If a PM domain is powered off when the first device starts its system PM
    prepare phase, genpd prevents any further attempts to power on the PM
    domain during the following system PM phases. Not until the system PM
    complete phase is finalized for all devices in the PM domain, genpd again
    allows it to be powered on.
    
    This behaviour needs to be changed, as a subsystem/driver for a device in
    the same PM domain may still need to be able to serve requests in some of
    the system PM phases. Accordingly, it may need to runtime resume its
    device and thus also request the corresponding PM domain to be powered on.
    
    To deal with these scenarios, let's make the device operational in the
    system PM prepare phase by runtime resuming it, no matter if the PM domain
    is powered on or off. Changing this also enables us to remove genpd's
    suspend_power_off flag, as it's being used to track this condition.
    Additionally, we must allow the PM domain to be powered on via runtime PM
    during the system PM phases.
    
    This change also requires a fix in the AMD ACP (Audio CoProcessor) drm
    driver. It registers a genpd to model the ACP as a PM domain, but
    unfortunately it's also abuses genpd's "internal" suspend_power_off flag
    to deal with a corner case at system PM resume.
    
    More precisely, the so called SMU block powers on the ACP at system PM
    resume, unconditionally if it's being used or not. This may lead to that
    genpd's internal status of the power state, may not correctly reflect the
    power state of the HW after a system PM resume.
    
    Because of changing the behaviour of genpd, by runtime resuming devices in
    the prepare phase, the AMD ACP drm driver no longer have to deal with this
    corner case. So let's just drop the related code in this driver.
    Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Reviewed-by: default avatarKevin Hilman <khilman@baylibre.com>
    Acked-by: default avatarMaruthi Bayyavarapu <maruthi.bayyavarapu@amd.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    39dd0f23
amdgpu_acp.c 12.1 KB