1*13ef76d8SLuca Weiss# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
2*13ef76d8SLuca Weiss%YAML 1.2
3*13ef76d8SLuca Weiss---
4*13ef76d8SLuca Weiss$id: http://devicetree.org/schemas/interrupt-controller/qcom,pdc.yaml#
5*13ef76d8SLuca Weiss$schema: http://devicetree.org/meta-schemas/core.yaml#
6*13ef76d8SLuca Weiss
7*13ef76d8SLuca Weisstitle: PDC interrupt controller
8*13ef76d8SLuca Weiss
9*13ef76d8SLuca Weissmaintainers:
10*13ef76d8SLuca Weiss  - Bjorn Andersson <bjorn.andersson@linaro.org>
11*13ef76d8SLuca Weiss
12*13ef76d8SLuca Weissdescription: |
13*13ef76d8SLuca Weiss  Qualcomm Technologies Inc. SoCs based on the RPM Hardened architecture have a
14*13ef76d8SLuca Weiss  Power Domain Controller (PDC) that is on always-on domain. In addition to
15*13ef76d8SLuca Weiss  providing power control for the power domains, the hardware also has an
16*13ef76d8SLuca Weiss  interrupt controller that can be used to help detect edge low interrupts as
17*13ef76d8SLuca Weiss  well detect interrupts when the GIC is non-operational.
18*13ef76d8SLuca Weiss
19*13ef76d8SLuca Weiss  GIC is parent interrupt controller at the highest level. Platform interrupt
20*13ef76d8SLuca Weiss  controller PDC is next in hierarchy, followed by others. Drivers requiring
21*13ef76d8SLuca Weiss  wakeup capabilities of their device interrupts routed through the PDC, must
22*13ef76d8SLuca Weiss  specify PDC as their interrupt controller and request the PDC port associated
23*13ef76d8SLuca Weiss  with the GIC interrupt. See example below.
24*13ef76d8SLuca Weiss
25*13ef76d8SLuca Weissproperties:
26*13ef76d8SLuca Weiss  compatible:
27*13ef76d8SLuca Weiss    items:
28*13ef76d8SLuca Weiss      - enum:
29*13ef76d8SLuca Weiss          - qcom,sc7180-pdc
30*13ef76d8SLuca Weiss          - qcom,sc7280-pdc
31*13ef76d8SLuca Weiss          - qcom,sdm845-pdc
32*13ef76d8SLuca Weiss          - qcom,sm6350-pdc
33*13ef76d8SLuca Weiss          - qcom,sm8150-pdc
34*13ef76d8SLuca Weiss          - qcom,sm8250-pdc
35*13ef76d8SLuca Weiss          - qcom,sm8350-pdc
36*13ef76d8SLuca Weiss      - const: qcom,pdc
37*13ef76d8SLuca Weiss
38*13ef76d8SLuca Weiss  reg:
39*13ef76d8SLuca Weiss    minItems: 1
40*13ef76d8SLuca Weiss    items:
41*13ef76d8SLuca Weiss      - description: PDC base register region
42*13ef76d8SLuca Weiss      - description: Edge or Level config register for SPI interrupts
43*13ef76d8SLuca Weiss
44*13ef76d8SLuca Weiss  '#interrupt-cells':
45*13ef76d8SLuca Weiss    const: 2
46*13ef76d8SLuca Weiss
47*13ef76d8SLuca Weiss  interrupt-controller: true
48*13ef76d8SLuca Weiss
49*13ef76d8SLuca Weiss  qcom,pdc-ranges:
50*13ef76d8SLuca Weiss    $ref: /schemas/types.yaml#/definitions/uint32-matrix
51*13ef76d8SLuca Weiss    minItems: 1
52*13ef76d8SLuca Weiss    maxItems: 32 # no hard limit
53*13ef76d8SLuca Weiss    items:
54*13ef76d8SLuca Weiss      items:
55*13ef76d8SLuca Weiss        - description: starting PDC port
56*13ef76d8SLuca Weiss        - description: GIC hwirq number for the PDC port
57*13ef76d8SLuca Weiss        - description: number of interrupts in sequence
58*13ef76d8SLuca Weiss    description: |
59*13ef76d8SLuca Weiss      Specifies the PDC pin offset and the number of PDC ports.
60*13ef76d8SLuca Weiss      The tuples indicates the valid mapping of valid PDC ports
61*13ef76d8SLuca Weiss      and their hwirq mapping.
62*13ef76d8SLuca Weiss
63*13ef76d8SLuca Weissrequired:
64*13ef76d8SLuca Weiss  - compatible
65*13ef76d8SLuca Weiss  - reg
66*13ef76d8SLuca Weiss  - '#interrupt-cells'
67*13ef76d8SLuca Weiss  - interrupt-controller
68*13ef76d8SLuca Weiss  - qcom,pdc-ranges
69*13ef76d8SLuca Weiss
70*13ef76d8SLuca WeissadditionalProperties: false
71*13ef76d8SLuca Weiss
72*13ef76d8SLuca Weissexamples:
73*13ef76d8SLuca Weiss  - |
74*13ef76d8SLuca Weiss    #include <dt-bindings/interrupt-controller/irq.h>
75*13ef76d8SLuca Weiss
76*13ef76d8SLuca Weiss    pdc: interrupt-controller@b220000 {
77*13ef76d8SLuca Weiss        compatible = "qcom,sdm845-pdc", "qcom,pdc";
78*13ef76d8SLuca Weiss        reg = <0xb220000 0x30000>;
79*13ef76d8SLuca Weiss        qcom,pdc-ranges = <0 512 94>, <94 641 15>, <115 662 7>;
80*13ef76d8SLuca Weiss        #interrupt-cells = <2>;
81*13ef76d8SLuca Weiss        interrupt-parent = <&intc>;
82*13ef76d8SLuca Weiss        interrupt-controller;
83*13ef76d8SLuca Weiss    };
84*13ef76d8SLuca Weiss
85*13ef76d8SLuca Weiss    wake-device {
86*13ef76d8SLuca Weiss        interrupts-extended = <&pdc 2 IRQ_TYPE_LEVEL_HIGH>;
87*13ef76d8SLuca Weiss    };
88