• Lina Iyer's avatar
    PM / Domains: Support IRQ safe PM domains · d716f479
    Lina Iyer authored
    Generic Power Domains currently support turning on/off only in process
    context. This prevents the usage of PM domains for domains that could be
    powered on/off in a context where IRQs are disabled. Many such domains
    exist today and do not get powered off, when the IRQ safe devices in
    that domain are powered off, because of this limitation.
    
    However, not all domains can operate in IRQ safe contexts. Genpd
    therefore, has to support both cases where the domain may or may not
    operate in IRQ safe contexts. Configuring genpd to use an appropriate
    lock for that domain, would allow domains that have IRQ safe devices to
    runtime suspend and resume, in atomic context.
    
    To achieve domain specific locking, set the domain's ->flag to
    GENPD_FLAG_IRQ_SAFE while defining the domain. This indicates that genpd
    should use a spinlock instead of a mutex for locking the domain. Locking
    is abstracted through genpd_lock() and genpd_unlock() functions that use
    the flag to determine the appropriate lock to be used for that domain.
    
    Domains that have lower latency to suspend and resume and can operate
    with IRQs disabled may now be able to save power, when the component
    devices and sub-domains are idle at runtime.
    
    The restriction this imposes on the domain hierarchy is that non-IRQ
    safe domains may not have IRQ-safe subdomains, but IRQ safe domains may
    have IRQ safe and non-IRQ safe subdomains and devices.
    Signed-off-by: default avatarLina Iyer <lina.iyer@linaro.org>
    Acked-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
    Reviewed-by: default avatarKevin Hilman <khilman@baylibre.com>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    d716f479
pm_domain.h 8.17 KB