Linux Power Management development
 help / color / mirror / Atom feed
From: Marek Szyprowski <m.szyprowski@samsung.com>
To: "Maulik Shah (mkshah)" <maulik.shah@oss.qualcomm.com>,
	Ulf Hansson <ulf.hansson@oss.qualcomm.com>
Cc: Konrad Dybcio <konradybcio@kernel.org>,
	Andy Gross <agross@kernel.org>,
	Bjorn Andersson <andersson@kernel.org>,
	Rob Herring <robh+dt@kernel.org>,
	Conor Dooley <conor+dt@kernel.org>,
	Krzysztof Kozlowski <krzk+dt@kernel.org>,
	Konrad Dybcio <konrad.dybcio@somainline.org>,
	linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org,
	linux-kernel@vger.kernel.org,
	Ulf Hansson <ulf.hansson@linaro.org>,
	"linux-pm@vger.kernel.org" <linux-pm@vger.kernel.org>
Subject: Re: [PATCH 3/3] arm64: dts: qcom: qcm2290: Hook up MPM
Date: Thu, 16 Jul 2026 10:36:48 +0200	[thread overview]
Message-ID: <869727ae-e4b9-419a-98e2-798c1aec5223@samsung.com> (raw)
In-Reply-To: <ff6f8e27-5489-4d63-afeb-a38881d717d0@oss.qualcomm.com>

On 15.07.2026 14:37, Maulik Shah (mkshah) wrote:
> On 7/15/2026 11:44 AM, Marek Szyprowski wrote:
>> On 14.07.2026 15:29, Maulik Shah (mkshah) wrote:
>>> On 7/14/2026 6:34 PM, Ulf Hansson wrote:
>>>> On Thu, Jul 9, 2026 at 1:41 PM Marek Szyprowski
>>>> <m.szyprowski@samsung.com> wrote:
>>> [...]
>>>
>>>> Without detailed HW expertise (still learning about the UnoQ), it
>>>> looks to me that the HW may have been modelled upside down.
>>>>
>>>> The power-domain-cpu-cluster should probably *not* be the consumer of
>>>> the mpm, but rather the opposite. This is how qcom,rpmh-rsc works, for
>>>> example.
>>> Agree, There is a series [1] sent out to fix modeling similar to how rpmh-rsc works.
>>>
>>> [1] https://lore.kernel.org/lkml/20260713-b4-shikra_lpm_addition-v1-0-3d858df2cbbf@oss.qualcomm.com/
>> Indeed that series fixes the modelling issue, but it doesn't change much
>> from the spinlock vs. raw_spinlock perspective. There is still the
>> 'invalid wait context' issue there, because mbox API cannot be properly
>> called from cpu_pm_notifier (which use raw_notifier internally):
> Okay, i see why series [1] did not help for agatti due to fallback on CPU PM notification.
>
> On PREEMPT_RT kernel, GENPD is marked as always RPM always on,
> So MPM driver never get the .power_off callback it registered for and hence MPM irqchip won't invoke mbox_() APIs.
>
> from drivers/cpuidle/cpuidle-psci-domain.c,
>
>         /*
>          * On a PREEMPT_RT based configuration the domain idle states are
>          * supported, but only during system-wide suspend.
>          */
>             if (IS_ENABLED(CONFIG_PREEMPT_RT))
>                         pd->flags |= GENPD_FLAG_RPM_ALWAYS_ON;
>
> The series [1] fallbacks to CPU_PM based notification if "power-domains" property is not added.
> having a power-domains property would have avoided the BUG for agatti on RT kernel.
>
> Agatti device tree change in the series [2] only removed power-domain-cells# but did not add power-domains = <&cluster_pd>;
> with the reason that qrb2210-rb1.dts had deleted "cluster_pd" however qrb2210-arduino-imola.dts still have it.
>
> so below change on top of [1] series would avoid the BUG from mpm_cpu_pm_callback().

This change moves the 'invalid wait context' warning from boot time to system suspend/resume path (although the system suspend/resume is and was broken on UnoQ at least with current next with and without the patchset from this thread):

root@target:~# time rtcwake -s5 -mmem
rtcwake: assuming RTC uses UTC ...
rtcwake: wakeup from "mem" using /dev/rtc0 at Thu Jan  1 00:03:11 1970
[  146.369961] PM: suspend entry (deep)
[  146.400523] Filesystems sync: 0.021 seconds
[  146.441862] Freezing user space processes
[  146.457851] Freezing user space processes completed (elapsed 0.011 seconds)
[  146.465487] OOM killer disabled.
[  146.468880] Freezing remaining freezable tasks
[  146.478491] Freezing remaining freezable tasks completed (elapsed 0.004 seconds)
[  146.486154] printk: Suspending console(s) (use no_console_suspend to debug)
[  146.782051] dwc3-qcom-legacy 4ef8800.usb: port-1 HS-PHY not in L2
[  146.859869] Disabling non-boot CPUs ...
[  146.912706] IRQ95: set affinity failed(-22).
[  146.912818] IRQ96: set affinity failed(-22).
[  146.913155] IRQ150: set affinity failed(-22).
[  146.918079] psci: CPU3 killed (polled 0 ms)
[  146.948827] IRQ95: set affinity failed(-22).
[  146.948896] IRQ96: set affinity failed(-22).
[  146.949230] IRQ150: set affinity failed(-22).
[  146.949685] psci: CPU2 killed (polled 0 ms)
[  146.982811] IRQ95: set affinity failed(-22).
[  146.982878] IRQ96: set affinity failed(-22).
[  146.983213] IRQ150: set affinity failed(-22).
[  146.984074] psci: CPU1 killed (polled 4 ms)
[  146.990260]  
[  146.990295] =============================
[  146.990299] [ BUG: Invalid wait context ]
[  146.990308] 7.2.0-rc3-next-20260714+ #16842 Not tainted
[  146.990318] -----------------------------
[  146.990321] rtcwake/673 is trying to lock:
[  146.990332] ffff0000008ac408 (&chan->lock){....}-{3:3}, at: mbox_send_message+0x3c/0x15c
[  146.990391] other info that might help us debug this:
[  146.990395] context-{5:5}
[  146.990399] locks held by rtcwake/673: 6, last CPU#0:
[  146.990404]  #0: ffff0000099a2438 (sb_writers#5){.+.+}-{0:0}, at: vfs_write+0x2dc/0x370
[  146.990432]  #1: ffff000016009280 (&of->mutex#2){+.+.}-{4:4}, at: kernfs_fop_write_iter+0xf0/0x1c0
[  146.990462]  #2: ffff000000995f28 (kn->active#97){.+.+}-{0:0}, at: kernfs_fop_write_iter+0x100/0x1c0
[  146.990481]  #3: ffffd083befc03f0 (system_transition_mutex){+.+.}-{4:4}, at: pm_suspend+0x200/0x370
[  146.990507]  #4: ffff00000036af50 (&genpd->raw_slock){....}-{2:2}, at: genpd_lock_raw_spin+0x1c/0x30
[  146.990534]  #5: ffff00000036a750 (&genpd->raw_slock/1){....}-{2:2}, at: genpd_lock_nested_raw_spin+0x1c/0x30
[  146.990557] stack backtrace:
[  146.990568] CPU: 0 UID: 0 PID: 673 Comm: rtcwake Not tainted 7.2.0-rc3-next-20260714+ #16842 PREEMPT  
[  146.990576] Hardware name: Arduino UnoQ (DT)
[  146.990582] Call trace:
[  146.990587]  show_stack+0x18/0x24 (C)
[  146.990600]  dump_stack_lvl+0x8c/0xcc
[  146.990615]  dump_stack+0x18/0x24
[  146.990622]  __lock_acquire+0x928/0x1f90
[  146.990635]  lock_acquire+0x2b8/0x3ec
[  146.990642]  _raw_spin_lock_irqsave+0x60/0x88
[  146.990656]  mbox_send_message+0x3c/0x15c
[  146.990664]  handle_rpm_notification+0x58/0x114
[  146.990678]  mpm_pd_power_cb+0x20/0x3c
[  146.990686]  notifier_call_chain+0xa0/0x234
[  146.990701]  raw_notifier_call_chain_robust+0x48/0xa8
[  146.990708]  _genpd_power_off+0x38/0x154
[  146.990714]  genpd_sync_power_off.part.0+0xa4/0x240
[  146.990723]  genpd_sync_power_off.part.0+0x224/0x240
[  146.990729]  genpd_switch_state+0x130/0x138
[  146.990739]  dev_pm_genpd_suspend+0x14/0x20
[  146.990747]  psci_idle_syscore_switch+0x118/0x120
[  146.990759]  psci_idle_syscore_suspend+0x14/0x24
[  146.990765]  syscore_suspend+0x74/0x1b8
[  146.990778]  suspend_devices_and_enter+0x1f4/0x7fc
[  146.990786]  pm_suspend+0x274/0x370
[  146.990792]  state_store+0x80/0x104
[  146.990798]  kobj_attr_store+0x18/0x2c
[  146.990809]  sysfs_kf_write+0x50/0x7c
[  146.990816]  kernfs_fop_write_iter+0x130/0x1c0
[  146.990822]  vfs_write+0x240/0x370
[  146.990828]  ksys_write+0x70/0x108
[  146.990835]  __arm64_sys_write+0x1c/0x28
[  146.990841]  invoke_syscall+0x54/0x10c
[  146.990849]  el0_svc_common.constprop.0+0x40/0xe0
[  146.990856]  do_el0_svc+0x1c/0x28
[  146.990861]  el0_svc+0x54/0x3a0
[  146.990867]  el0t_64_sync_handler+0xa0/0xe4
[  146.990872]  el0t_64_sync+0x198/0x19c
[  146.991113] Enabling non-boot CPUs ...
[  146.992161] Detected VIPT I-cache on CPU1
[  146.992262] GICv3: CPU1: found redistributor 1 region 0:0x000000000f320000
[  146.992407] CPU1: Booted secondary processor 0x0000000001 [0x51af8014]
[  146.995104] CPU1 is up
[  146.996182] Detected VIPT I-cache on CPU2
[  146.996282] GICv3: CPU2: found redistributor 2 region 0:0x000000000f340000
[  146.996425] CPU2: Booted secondary processor 0x0000000002 [0x51af8014]
[  146.998746] CPU2 is up
[  146.999673] Detected VIPT I-cache on CPU3
[  146.999760] GICv3: CPU3: found redistributor 3 region 0:0x000000000f360000
[  146.999893] CPU3: Booted secondary processor 0x0000000003 [0x51af8014]
[  147.002366] CPU3 is up
[  147.949024] OOM killer enabled.
[  147.952218] Restarting tasks: Starting
[  147.960927] Restarting tasks: Done
[  147.964583] random: crng reseeded on system resumption
[  147.976461] PM: suspend exit
rtcwake: write error

real    0m1.679s
user    0m0.000s
sys     0m0.688s


>
> --- a/arch/arm64/boot/dts/qcom/agatti.dtsi
> +++ b/arch/arm64/boot/dts/qcom/agatti.dtsi
> @@ -281,6 +281,7 @@ mpm: interrupt-controller {
>                         interrupt-controller;
>                         #interrupt-cells = <2>;
>                         interrupt-parent = <&intc>;
> +                       power-domains = <&cluster_pd>;
>                         qcom,mpm-pin-count = <96>;
>                         qcom,mpm-pin-map = <2 275>,  /* TSENS0 uplow */
>                                            <5 296>,  /* Soundwire master_irq */
> diff --git a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts
> index bf6fb12ad990..7dc2cade0a7f 100644
> --- a/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts
> +++ b/arch/arm64/boot/dts/qcom/qrb2210-rb1.dts
> @@ -246,6 +246,10 @@ &cpu_pd3 {
>
>  /delete-node/ &cluster_pd;
>
> +&mpm {
> +       /delete-property/ power-domains;
> +};
> +
>
> [2] https://lore.kernel.org/linux-arm-msm/20260713-b4-shikra_lpm_addition-v1-0-3d858df2cbbf@oss.qualcomm.com/T/#m5bbdb535424c38209cc08e6afeae5e3aac9f6cc0
>
> Thanks,
> Maulik
>
>> =============================
>> [ BUG: Invalid wait context ]
>> 7.2.0-rc3-next-20260714+ #16842 Not tainted
>> -----------------------------
>> swapper/3/0 is trying to lock:
>> ffff0000008ac408 (&chan->lock){....}-{3:3}, at: mbox_send_message+0x3c/0x15c
>> other info that might help us debug this:
>> context-{5:5}
>> locks held by swapper/3/0: 1, last CPU#3:
>>  #0: ffffd99263a61228 (cpu_pm_notifier.lock){....}-{2:2}, at: cpu_pm_enter+0x28/0x78
>> stack backtrace:
>> CPU: 3 UID: 0 PID: 0 Comm: swapper/3 Not tainted 7.2.0-rc3-next-20260714+ #16842 PREEMPT
>> Hardware name: Arduino UnoQ (DT)
>> Call trace:
>>  show_stack+0x18/0x24 (C)
>>  dump_stack_lvl+0x8c/0xcc
>>  dump_stack+0x18/0x24
>>  __lock_acquire+0x928/0x1f90
>>  lock_acquire+0x2b8/0x3ec
>>  _raw_spin_lock_irqsave+0x60/0x88
>>  mbox_send_message+0x3c/0x15c
>>  handle_rpm_notification+0x58/0x114
>>  mpm_cpu_pm_callback+0x9c/0xdc
>>  notifier_call_chain+0xa0/0x234
>>  raw_notifier_call_chain_robust+0x48/0xa8
>>  cpu_pm_enter+0x40/0x78
>>  __psci_enter_domain_idle_state.isra.0+0x48/0x470
>>  psci_enter_domain_idle_state+0x18/0x24
>>  cpuidle_enter_state+0xbc/0x428
>>  cpuidle_enter+0x38/0x50
>>  do_idle+0x158/0x324
>>  cpu_startup_entry+0x38/0x3c
>>  secondary_start_kernel+0x138/0x158
>>  __secondary_switched+0xc0/0xc4
>>
>> Best regards
>
Best regards
-- 
Marek Szyprowski, PhD
Samsung R&D Institute Poland


  reply	other threads:[~2026-07-16  8:36 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20231215-topic-mpm_dt-v1-0-c6636fc75ce3@linaro.org>
     [not found] ` <CGME20260709114143eucas1p18463122323bdeae8e63b1d13cd626b55@eucas1p1.samsung.com>
     [not found]   ` <20231215-topic-mpm_dt-v1-3-c6636fc75ce3@linaro.org>
2026-07-09 11:41     ` [PATCH 3/3] arm64: dts: qcom: qcm2290: Hook up MPM Marek Szyprowski
2026-07-14 13:04       ` Ulf Hansson
2026-07-14 13:29         ` Maulik Shah (mkshah)
2026-07-15  6:14           ` Marek Szyprowski
2026-07-15 12:37             ` Maulik Shah (mkshah)
2026-07-16  8:36               ` Marek Szyprowski [this message]
2026-07-15  9:28         ` Konrad Dybcio
2026-07-14 13:27       ` Maulik Shah (mkshah)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=869727ae-e4b9-419a-98e2-798c1aec5223@samsung.com \
    --to=m.szyprowski@samsung.com \
    --cc=agross@kernel.org \
    --cc=andersson@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=konrad.dybcio@somainline.org \
    --cc=konradybcio@kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=maulik.shah@oss.qualcomm.com \
    --cc=robh+dt@kernel.org \
    --cc=ulf.hansson@linaro.org \
    --cc=ulf.hansson@oss.qualcomm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox