]> Gentwo Git Trees - linux/.git/commitdiff
Merge tag 'pmdomain-v6.19' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh...
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 4 Dec 2025 21:50:39 +0000 (13:50 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 4 Dec 2025 21:50:39 +0000 (13:50 -0800)
Pull pmdomain updates from Ulf Hansson:
 "pmdomain core:
   - Allow power-off for out-of-band wakeup-capable devices
   - Drop the redundant call to dev_pm_domain_detach() for the amba bus
   - Extend the genpd governor for CPUs to account for IPIs

  pmdomain providers:
   - bcm: Add support for BCM2712
   - mediatek: Add support for MFlexGraphics power domains
   - mediatek: Add support for MT8196 power domains
   - qcom: Add RPMh power domain support for Kaanapali
   - rockchip: Add support for RV1126B

  pmdomain consumers:
   - usb: dwc3: Enable out of band wakeup for i.MX95
   - usb: chipidea: Enable out of band wakeup for i.MX95"

* tag 'pmdomain-v6.19' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm: (26 commits)
  pmdomain: Extend the genpd governor for CPUs to account for IPIs
  smp: Introduce a helper function to check for pending IPIs
  pmdomain: mediatek: convert from clk round_rate() to determine_rate()
  amba: bus: Drop dev_pm_domain_detach() call
  pmdomain: bcm: bcm2835-power: Prepare to support BCM2712
  pmdomain: mediatek: mtk-mfg: select MAILBOX in Kconfig
  pmdomain: mediatek: Add support for MFlexGraphics
  pmdomain: mediatek: Fix build-errors
  cpuidle: psci: Replace deprecated strcpy in psci_idle_init_cpu
  pmdomain: rockchip: Add support for RV1126B
  pmdomain: mediatek: Add support for MT8196 HFRPSYS power domains
  pmdomain: mediatek: Add support for MT8196 SCPSYS power domains
  pmdomain: mediatek: Add support for secure HWCCF infra power on
  pmdomain: mediatek: Add support for Hardware Voter power domains
  pmdomain: qcom: rpmhpd: Add RPMh power domain support for Kaanapali
  usb: dwc3: imx8mp: Set out of band wakeup for i.MX95
  usb: chipidea: ci_hdrc_imx: Set out of band wakeup for i.MX95
  usb: chipidea: core: detach power domain for ci_hdrc platform device
  pmdomain: core: Allow power-off for out-of-band wakeup-capable devices
  PM: wakeup: Add out-of-band system wakeup support for devices
  ...

1  2 
drivers/base/power/main.c
drivers/pmdomain/core.c
drivers/pmdomain/governor.c
include/linux/pm.h

Simple merge
Simple merge
index 05e68680f34ba2c71db54f02d1e2ab1481d27ccd,a46470f2261a92e40f8bb800421c5e185c972fbd..96737abbb4969150fb7b1943bb0f6294c256146d
@@@ -408,43 -404,23 +408,49 @@@ static bool cpu_power_down_ok(struct de
                if ((idle_duration_ns >= (genpd->states[i].residency_ns +
                    genpd->states[i].power_off_latency_ns)) &&
                    (global_constraint >= (genpd->states[i].power_on_latency_ns +
-                   genpd->states[i].power_off_latency_ns))) {
-                       genpd->state_idx = i;
-                       genpd->gd->last_enter = now;
-                       genpd->gd->reflect_residency = true;
-                       return true;
-               }
+                   genpd->states[i].power_off_latency_ns)))
+                       break;
        } while (--i >= 0);
  
-       return false;
+       if (i < 0)
+               return false;
+       if (cpus_peek_for_pending_ipi(genpd->cpus))
+               return false;
+       genpd->state_idx = i;
+       genpd->gd->last_enter = now;
+       genpd->gd->reflect_residency = true;
+       return true;
  }
  
 +static bool cpu_system_power_down_ok(struct dev_pm_domain *pd)
 +{
 +      s64 constraint_ns = cpu_wakeup_latency_qos_limit() * NSEC_PER_USEC;
 +      struct generic_pm_domain *genpd = pd_to_genpd(pd);
 +      int state_idx = genpd->state_count - 1;
 +
 +      if (!(genpd->flags & GENPD_FLAG_CPU_DOMAIN)) {
 +              genpd->state_idx = state_idx;
 +              return true;
 +      }
 +
 +      /* Find the deepest state for the latency constraint. */
 +      while (state_idx >= 0) {
 +              s64 latency_ns = genpd->states[state_idx].power_off_latency_ns +
 +                               genpd->states[state_idx].power_on_latency_ns;
 +
 +              if (latency_ns <= constraint_ns) {
 +                      genpd->state_idx = state_idx;
 +                      return true;
 +              }
 +              state_idx--;
 +      }
 +
 +      return false;
 +}
 +
  struct dev_power_governor pm_domain_cpu_gov = {
        .suspend_ok = default_suspend_ok,
        .power_down_ok = cpu_power_down_ok,
Simple merge