[PATCH v2 1/2] dt-bindings: interrupt-controller: qcom: add msm8660-mpm
From: Herman van Hazendonk
Date: Sun May 31 2026 - 00:12:23 EST
Add the binding for the Modem Power Manager (MPM) interrupt
controller on the MSM8x60 family (MSM8260/MSM8660/APQ8060). The MPM
is a small wake-capable interrupt aggregator that lets the SoC stay
in low-power states while a small set of GIC SPIs continues to be
monitored and can wake the system on an edge.
The binding describes its register region (in the RPM syscon), the
GIC SPI it raises on a wake event, the GIC mailbox it shares with
the RPM, and the per-pin wake-source mapping table.
Signed-off-by: Herman van Hazendonk <github.com@xxxxxxxxxx>
---
.../qcom,msm8660-mpm.yaml | 122 ++++++++++++++++++
1 file changed, 122 insertions(+)
create mode 100644 Documentation/devicetree/bindings/interrupt-controller/qcom,msm8660-mpm.yaml
diff --git a/Documentation/devicetree/bindings/interrupt-controller/qcom,msm8660-mpm.yaml b/Documentation/devicetree/bindings/interrupt-controller/qcom,msm8660-mpm.yaml
new file mode 100644
index 000000000000..1288e83d75d6
--- /dev/null
+++ b/Documentation/devicetree/bindings/interrupt-controller/qcom,msm8660-mpm.yaml
@@ -0,0 +1,122 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/interrupt-controller/qcom,msm8660-mpm.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Qualcomm MSM8x60 MPM wakeup interrupt controller
+
+maintainers:
+ - Herman van Hazendonk <github.com@xxxxxxxxxx>
+
+description: |
+ The MSM Power Manager (MPM) on the MSM8x60 family (MSM8260/MSM8660/
+ APQ8060) is an always-on hardware block that keeps a set of wake
+ interrupts alive while the application processor is powered down.
+
+ The vMPM (virtual MPM) registers live INSIDE the RPM control block:
+ the request window (ENABLE, DETECT_CTL, POLARITY, CLEAR) starts at
+ RPM_BASE + 0x9d8 and the status window starts 0x420 above the
+ request window. The reg property points at this vMPM sub-region;
+ the qcom,rpm-msm8660 driver maps the surrounding RPM control area
+ for its own use, so the two mappings overlap but neither claims
+ exclusive ownership of the other's range.
+
+ Notification of new wake-source configuration is delivered via the
+ qcom-apcs-ipc mailbox (writing GCC + 0x008 bit 1).
+
+ This binding is MSM8x60-specific. Newer Qualcomm SoCs (sm6375, etc.)
+ use the qcom,mpm binding which assumes a dedicated MPM SRAM region
+ and an IPCC mailbox - neither holds on MSM8x60. The driver lives at
+ drivers/irqchip/irq-msm8660-mpm.c.
+
+allOf:
+ - $ref: /schemas/interrupt-controller.yaml#
+
+properties:
+ compatible:
+ const: qcom,msm8660-mpm
+
+ reg:
+ maxItems: 1
+ description: |
+ vMPM register window inside the RPM control block. Must cover
+ the request registers at offset 0 of the window and the status
+ registers at offset 0x420 of the window. A length of 0x440 is
+ sufficient for the four-word request banks and the status bank.
+
+ interrupts:
+ maxItems: 1
+ description:
+ IPC IRQ raised by MPM when one of the enabled wake sources fires.
+ On MSM8x60 this is wired to GIC SPI 2.
+
+ mboxes:
+ maxItems: 1
+ description:
+ Mailbox channel used to notify MPM that the vMPM request
+ registers have been updated. On MSM8x60 this is the
+ qcom-apcs-ipc mailbox channel 1 (writes GCC + 0x008 bit 1).
+
+ interrupt-controller: true
+
+ '#interrupt-cells':
+ const: 2
+ description:
+ First cell is the MPM pin number / parent GIC SPI; second cell
+ is the trigger type.
+
+ qcom,mpm-pin-count:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: Total number of MPM pins exposed.
+
+ qcom,mpm-pin-map:
+ $ref: /schemas/types.yaml#/definitions/uint32-matrix
+ items:
+ items:
+ - description: MPM pin number
+ - description: GIC SPI number this pin maps to
+ description: |
+ List of (MPM-pin, GIC-SPI) tuples for wake sources that have a
+ corresponding GIC IRQ. Consumers route their interrupts through
+ the MPM hierarchical irqdomain to take advantage of these
+ mappings.
+
+ Raw wake pins like SDC3/4 DATx (pins 21-24) are NOT listed
+ here - they have no GIC SPI mapping and are accessed through
+ the msm8660_mpm_set_pin_wake() / msm8660_mpm_enable_pin() C API
+ by consumer drivers.
+
+required:
+ - compatible
+ - reg
+ - interrupts
+ - mboxes
+ - interrupt-controller
+ - '#interrupt-cells'
+ - qcom,mpm-pin-count
+
+additionalProperties: false
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+
+ soc {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ msm8660_mpm: interrupt-controller@1049d8 {
+ compatible = "qcom,msm8660-mpm";
+ reg = <0x001049d8 0x440>;
+ interrupts = <GIC_SPI 2 IRQ_TYPE_EDGE_RISING>;
+ mboxes = <&gcc_ipc 1>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ interrupt-parent = <&intc>;
+ qcom,mpm-pin-count = <64>;
+ qcom,mpm-pin-map = <25 100>,
+ <26 50>,
+ <27 79>;
+ };
+ };
--
2.43.0