mirror of https://github.com/torvalds/linux.git
pmdomain: Merge branch fixes into next
Merge the pmdomain fixes for v6.17-rc[n] into the next branch, to allow them to get tested together with the new changes that are targeted for v6.18. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
commit
5c479a670a
|
|
@ -187,6 +187,7 @@ static const struct genpd_lock_ops genpd_raw_spin_ops = {
|
||||||
#define genpd_is_opp_table_fw(genpd) (genpd->flags & GENPD_FLAG_OPP_TABLE_FW)
|
#define genpd_is_opp_table_fw(genpd) (genpd->flags & GENPD_FLAG_OPP_TABLE_FW)
|
||||||
#define genpd_is_dev_name_fw(genpd) (genpd->flags & GENPD_FLAG_DEV_NAME_FW)
|
#define genpd_is_dev_name_fw(genpd) (genpd->flags & GENPD_FLAG_DEV_NAME_FW)
|
||||||
#define genpd_is_no_sync_state(genpd) (genpd->flags & GENPD_FLAG_NO_SYNC_STATE)
|
#define genpd_is_no_sync_state(genpd) (genpd->flags & GENPD_FLAG_NO_SYNC_STATE)
|
||||||
|
#define genpd_is_no_stay_on(genpd) (genpd->flags & GENPD_FLAG_NO_STAY_ON)
|
||||||
|
|
||||||
static inline bool irq_safe_dev_in_sleep_domain(struct device *dev,
|
static inline bool irq_safe_dev_in_sleep_domain(struct device *dev,
|
||||||
const struct generic_pm_domain *genpd)
|
const struct generic_pm_domain *genpd)
|
||||||
|
|
@ -1357,7 +1358,6 @@ static int genpd_runtime_resume(struct device *dev)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_PM_GENERIC_DOMAINS_OF
|
|
||||||
static bool pd_ignore_unused;
|
static bool pd_ignore_unused;
|
||||||
static int __init pd_ignore_unused_setup(char *__unused)
|
static int __init pd_ignore_unused_setup(char *__unused)
|
||||||
{
|
{
|
||||||
|
|
@ -1382,9 +1382,6 @@ static int __init genpd_power_off_unused(void)
|
||||||
mutex_lock(&gpd_list_lock);
|
mutex_lock(&gpd_list_lock);
|
||||||
|
|
||||||
list_for_each_entry(genpd, &gpd_list, gpd_list_node) {
|
list_for_each_entry(genpd, &gpd_list, gpd_list_node) {
|
||||||
genpd_lock(genpd);
|
|
||||||
genpd->stay_on = false;
|
|
||||||
genpd_unlock(genpd);
|
|
||||||
genpd_queue_power_off_work(genpd);
|
genpd_queue_power_off_work(genpd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1393,7 +1390,6 @@ static int __init genpd_power_off_unused(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
late_initcall_sync(genpd_power_off_unused);
|
late_initcall_sync(genpd_power_off_unused);
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_PM_SLEEP
|
#ifdef CONFIG_PM_SLEEP
|
||||||
|
|
||||||
|
|
@ -2367,6 +2363,18 @@ static void genpd_lock_init(struct generic_pm_domain *genpd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_PM_GENERIC_DOMAINS_OF
|
||||||
|
static void genpd_set_stay_on(struct generic_pm_domain *genpd, bool is_off)
|
||||||
|
{
|
||||||
|
genpd->stay_on = !genpd_is_no_stay_on(genpd) && !is_off;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static void genpd_set_stay_on(struct generic_pm_domain *genpd, bool is_off)
|
||||||
|
{
|
||||||
|
genpd->stay_on = false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* pm_genpd_init - Initialize a generic I/O PM domain object.
|
* pm_genpd_init - Initialize a generic I/O PM domain object.
|
||||||
* @genpd: PM domain object to initialize.
|
* @genpd: PM domain object to initialize.
|
||||||
|
|
@ -2392,7 +2400,7 @@ int pm_genpd_init(struct generic_pm_domain *genpd,
|
||||||
INIT_WORK(&genpd->power_off_work, genpd_power_off_work_fn);
|
INIT_WORK(&genpd->power_off_work, genpd_power_off_work_fn);
|
||||||
atomic_set(&genpd->sd_count, 0);
|
atomic_set(&genpd->sd_count, 0);
|
||||||
genpd->status = is_off ? GENPD_STATE_OFF : GENPD_STATE_ON;
|
genpd->status = is_off ? GENPD_STATE_OFF : GENPD_STATE_ON;
|
||||||
genpd->stay_on = !is_off;
|
genpd_set_stay_on(genpd, is_off);
|
||||||
genpd->sync_state = GENPD_SYNC_STATE_OFF;
|
genpd->sync_state = GENPD_SYNC_STATE_OFF;
|
||||||
genpd->device_count = 0;
|
genpd->device_count = 0;
|
||||||
genpd->provider = NULL;
|
genpd->provider = NULL;
|
||||||
|
|
|
||||||
|
|
@ -251,6 +251,7 @@ static int __init rcar_gen4_sysc_pd_setup(struct rcar_gen4_sysc_pd *pd)
|
||||||
genpd->detach_dev = cpg_mssr_detach_dev;
|
genpd->detach_dev = cpg_mssr_detach_dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
genpd->flags |= GENPD_FLAG_NO_STAY_ON;
|
||||||
genpd->power_off = rcar_gen4_sysc_pd_power_off;
|
genpd->power_off = rcar_gen4_sysc_pd_power_off;
|
||||||
genpd->power_on = rcar_gen4_sysc_pd_power_on;
|
genpd->power_on = rcar_gen4_sysc_pd_power_on;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -241,6 +241,7 @@ static int __init rcar_sysc_pd_setup(struct rcar_sysc_pd *pd)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
genpd->flags |= GENPD_FLAG_NO_STAY_ON;
|
||||||
genpd->power_off = rcar_sysc_pd_power_off;
|
genpd->power_off = rcar_sysc_pd_power_off;
|
||||||
genpd->power_on = rcar_sysc_pd_power_on;
|
genpd->power_on = rcar_sysc_pd_power_on;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,8 @@ static void rmobile_init_pm_domain(struct rmobile_pm_domain *rmobile_pd)
|
||||||
struct generic_pm_domain *genpd = &rmobile_pd->genpd;
|
struct generic_pm_domain *genpd = &rmobile_pd->genpd;
|
||||||
struct dev_power_governor *gov = rmobile_pd->gov;
|
struct dev_power_governor *gov = rmobile_pd->gov;
|
||||||
|
|
||||||
genpd->flags |= GENPD_FLAG_PM_CLK | GENPD_FLAG_ACTIVE_WAKEUP;
|
genpd->flags |= GENPD_FLAG_PM_CLK | GENPD_FLAG_ACTIVE_WAKEUP |
|
||||||
|
GENPD_FLAG_NO_STAY_ON;
|
||||||
genpd->attach_dev = cpg_mstp_attach_dev;
|
genpd->attach_dev = cpg_mstp_attach_dev;
|
||||||
genpd->detach_dev = cpg_mstp_detach_dev;
|
genpd->detach_dev = cpg_mstp_detach_dev;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -865,7 +865,7 @@ static int rockchip_pm_add_one_domain(struct rockchip_pmu *pmu,
|
||||||
pd->genpd.power_on = rockchip_pd_power_on;
|
pd->genpd.power_on = rockchip_pd_power_on;
|
||||||
pd->genpd.attach_dev = rockchip_pd_attach_dev;
|
pd->genpd.attach_dev = rockchip_pd_attach_dev;
|
||||||
pd->genpd.detach_dev = rockchip_pd_detach_dev;
|
pd->genpd.detach_dev = rockchip_pd_detach_dev;
|
||||||
pd->genpd.flags = GENPD_FLAG_PM_CLK;
|
pd->genpd.flags = GENPD_FLAG_PM_CLK | GENPD_FLAG_NO_STAY_ON;
|
||||||
if (pd_info->active_wakeup)
|
if (pd_info->active_wakeup)
|
||||||
pd->genpd.flags |= GENPD_FLAG_ACTIVE_WAKEUP;
|
pd->genpd.flags |= GENPD_FLAG_ACTIVE_WAKEUP;
|
||||||
pm_genpd_init(&pd->genpd, NULL,
|
pm_genpd_init(&pd->genpd, NULL,
|
||||||
|
|
|
||||||
|
|
@ -115,6 +115,12 @@ struct dev_pm_domain_list {
|
||||||
* genpd provider specific way, likely through a
|
* genpd provider specific way, likely through a
|
||||||
* parent device node. This flag makes genpd to
|
* parent device node. This flag makes genpd to
|
||||||
* skip its internal support for this.
|
* skip its internal support for this.
|
||||||
|
*
|
||||||
|
* GENPD_FLAG_NO_STAY_ON: For genpd OF providers a powered-on PM domain at
|
||||||
|
* initialization is prevented from being
|
||||||
|
* powered-off until the ->sync_state() callback is
|
||||||
|
* invoked. This flag informs genpd to allow a
|
||||||
|
* power-off without waiting for ->sync_state().
|
||||||
*/
|
*/
|
||||||
#define GENPD_FLAG_PM_CLK (1U << 0)
|
#define GENPD_FLAG_PM_CLK (1U << 0)
|
||||||
#define GENPD_FLAG_IRQ_SAFE (1U << 1)
|
#define GENPD_FLAG_IRQ_SAFE (1U << 1)
|
||||||
|
|
@ -126,6 +132,7 @@ struct dev_pm_domain_list {
|
||||||
#define GENPD_FLAG_OPP_TABLE_FW (1U << 7)
|
#define GENPD_FLAG_OPP_TABLE_FW (1U << 7)
|
||||||
#define GENPD_FLAG_DEV_NAME_FW (1U << 8)
|
#define GENPD_FLAG_DEV_NAME_FW (1U << 8)
|
||||||
#define GENPD_FLAG_NO_SYNC_STATE (1U << 9)
|
#define GENPD_FLAG_NO_SYNC_STATE (1U << 9)
|
||||||
|
#define GENPD_FLAG_NO_STAY_ON (1U << 10)
|
||||||
|
|
||||||
enum gpd_status {
|
enum gpd_status {
|
||||||
GENPD_STATE_ON = 0, /* PM domain is on */
|
GENPD_STATE_ON = 0, /* PM domain is on */
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue