]> Git Repo - linux.git/commitdiff
Merge branches 'pm-cpuidle' and 'pm-em'
authorRafael J. Wysocki <[email protected]>
Tue, 15 Dec 2020 14:25:37 +0000 (15:25 +0100)
committerRafael J. Wysocki <[email protected]>
Tue, 15 Dec 2020 14:25:37 +0000 (15:25 +0100)
* pm-cpuidle:
  cpuidle: Select polling interval based on a c-state with a longer target residency
  cpuidle: psci: Enable suspend-to-idle for PSCI OSI mode
  PM: domains: Enable dev_pm_genpd_suspend|resume() for suspend-to-idle
  PM: domains: Rename pm_genpd_syscore_poweroff|poweron()

* pm-em:
  PM / EM: Micro optimization in em_cpu_energy
  PM: EM: Update Energy Model with new flag indicating power scale
  PM: EM: update the comments related to power scale
  PM: EM: Clarify abstract scale usage for power values in Energy Model

1  2  3 
drivers/base/power/domain.c

index 92b750b865d5f6fe10f21d6a0699bf304122d932,4a55f3c949aee5640be94cca1423771188269199,743268996336db7dedc1f1bba6393ded3e6fd26b..52d292617401864994106bc5d3743cf9595e2100
@@@@ -1363,41 -1363,60 -1363,41 +1363,60 @@@@ static void genpd_complete(struct devic
        genpd_unlock(genpd);
   }
   
- -/**
- - * genpd_syscore_switch - Switch power during system core suspend or resume.
- - * @dev: Device that normally is marked as "always on" to switch power for.
- - *
- - * This routine may only be called during the system core (syscore) suspend or
- - * resume phase for devices whose "always on" flags are set.
- - */
- -static void genpd_syscore_switch(struct device *dev, bool suspend)
+ +static void genpd_switch_state(struct device *dev, bool suspend)
   {
        struct generic_pm_domain *genpd;
+ +     bool use_lock;
   
        genpd = dev_to_genpd_safe(dev);
        if (!genpd)
                return;
   
+ +     use_lock = genpd_is_irq_safe(genpd);
+ +
+ +     if (use_lock)
+ +             genpd_lock(genpd);
+ +
        if (suspend) {
                genpd->suspended_count++;
- -             genpd_sync_power_off(genpd, false, 0);
+ +             genpd_sync_power_off(genpd, use_lock, 0);
        } else {
- -             genpd_sync_power_on(genpd, false, 0);
+ +             genpd_sync_power_on(genpd, use_lock, 0);
                genpd->suspended_count--;
        }
+ +
+ +     if (use_lock)
+ +             genpd_unlock(genpd);
   }
   
- -void pm_genpd_syscore_poweroff(struct device *dev)
+ +/**
+ + * dev_pm_genpd_suspend - Synchronously try to suspend the genpd for @dev
+ + * @dev: The device that is attached to the genpd, that can be suspended.
+ + *
+ + * This routine should typically be called for a device that needs to be
+ + * suspended during the syscore suspend phase. It may also be called during
+ + * suspend-to-idle to suspend a corresponding CPU device that is attached to a
+ + * genpd.
+ + */
+ +void dev_pm_genpd_suspend(struct device *dev)
   {
- -     genpd_syscore_switch(dev, true);
+ +     genpd_switch_state(dev, true);
   }
- -EXPORT_SYMBOL_GPL(pm_genpd_syscore_poweroff);
+ +EXPORT_SYMBOL_GPL(dev_pm_genpd_suspend);
   
- -void pm_genpd_syscore_poweron(struct device *dev)
+ +/**
+ + * dev_pm_genpd_resume - Synchronously try to resume the genpd for @dev
+ + * @dev: The device that is attached to the genpd, which needs to be resumed.
+ + *
+ + * This routine should typically be called for a device that needs to be resumed
+ + * during the syscore resume phase. It may also be called during suspend-to-idle
+ + * to resume a corresponding CPU device that is attached to a genpd.
+ + */
+ +void dev_pm_genpd_resume(struct device *dev)
   {
- -     genpd_syscore_switch(dev, false);
+ +     genpd_switch_state(dev, false);
   }
- -EXPORT_SYMBOL_GPL(pm_genpd_syscore_poweron);
+ +EXPORT_SYMBOL_GPL(dev_pm_genpd_resume);
   
   #else /* !CONFIG_PM_SLEEP */
   
@@@@ -2249,7 -2268,7 -2249,7 +2268,7 @@@@ int of_genpd_add_provider_onecell(struc
                         * Save table for faster processing while setting
                         * performance state.
                         */
 --                     genpd->opp_table = dev_pm_opp_get_opp_table_indexed(&genpd->dev, i);
 ++                     genpd->opp_table = dev_pm_opp_get_opp_table(&genpd->dev);
                        WARN_ON(IS_ERR(genpd->opp_table));
                }
   
This page took 0.110636 seconds and 4 git commands to generate.