[PATCH 0/5] x1e80100: Enable PDC wake GPIOs and deepest idle state
From: Maulik Shah
Date: Thu Mar 12 2026 - 12:07:22 EST
There are two modes PDC irqchip can work in
- pass through mode
- secondary controller mode
All PDC irqchip supports pass through mode in which both Direct SPIs and
GPIO IRQs (as SPIs) are sent to GIC without latching at PDC, PDC only does
inversion when needed for falling edge to rising edge or level low to level
high, as the GIC do not support falling edge/level low interrupts.
Newer PDCs (v3.0 onwards) also support additional secondary controller mode
where PDC latches GPIO IRQs and sends to GIC as level type IRQ. Direct SPIs
still works same as pass through mode without latching at PDC even in
secondary controller mode.
All the SoCs defaulted to pass through mode with the exception of some x1e.
x1e PDC may be set to secondary controller mode for builds on CRD boards
whereas it may be set to pass through mode for IoT-EVK boards.
There is no way to read which current mode it is set to and make PDC work
in respective mode as the read access is not opened up for non secure
world. There is though write access opened up via SCM write API to set the
mode.
As the linux only ever makes use of pass through mode, set the IRQ mask
meant specifically for secondary controller mode to mask all the IRQs to be
forwarded to GIC irrespective of the mode PDC is set to. Writing the mask
is do not care when the PDC works in pass through mode, which is always
the case except for some of x1e platforms.
Configure PDC mode to pass through mode for all x1e based boards via SCM
write.
For successful write:
- Nothing more to be done
For unsuccessful write:
- Inform TLMM to monitor GPIO IRQs (same as MPM)
- Prevent SoC low power mode (CxPC) as PDC is not monitoring GPIO
IRQs which may be needed to wake the SoC from low power mode.
As the deepest idle state as the PDC can now wake up SoC from GPIOs and
revert 602cb14e310a ("pinctrl: qcom: x1e80100: Bypass PDC wakeup parent
for now").
Note:
For testing this series on x1e80100 CRD, interconnect nodes from SCM
device are removed as PDC requires SCM APIs early in the boot up and
interconnect nodes delays the probe of SCM device which results in early
boot NULL pointer derefernce. Looking at documentation interconnect are
added to get additional performance boost and are optional to add. Removing
them for now allows this series to go through until proper fix from SCM
device is found.
The series has been tested on x1e80100 CRD with both old and new firmware
and also on kaanapali.
Signed-off-by: Maulik Shah <maulik.shah@xxxxxxxxxxxxxxxx>
---
Maulik Shah (5):
arm64: dts: qcom: x1e80100: Remove interconnect from SCM device
dt-bindings: interrupt-controller: qcom,pdc: Document reg and QMP
irqchip/qcom-pdc: Configure PDC to pass through mode
arm64: dts: qcom: x1e80100: Add deepest idle state
Revert "pinctrl: qcom: x1e80100: Bypass PDC wakeup parent for now"
.../bindings/interrupt-controller/qcom,pdc.yaml | 5 +
arch/arm64/boot/dts/qcom/hamoa.dtsi | 19 +++-
drivers/irqchip/Kconfig | 1 +
drivers/irqchip/qcom-pdc.c | 119 +++++++++++++++++++--
drivers/pinctrl/qcom/pinctrl-x1e80100.c | 4 +-
5 files changed, 131 insertions(+), 17 deletions(-)
---
base-commit: f90aadf1c67c8b4969d1e5e6d4fd7227adb6e4d7
change-id: 20260312-hamoa_pdc-8c44e70b1517
Best regards,
--
Maulik Shah <maulik.shah@xxxxxxxxxxxxxxxx>