1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/pci/fsl,layerscape-pcie.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Freescale Layerscape PCIe Root Complex(RC) controller
8
9maintainers:
10  - Frank Li <Frank.Li@nxp.com>
11
12description:
13  This PCIe RC controller is based on the Synopsys DesignWare PCIe IP
14
15  This controller derives its clocks from the Reset Configuration Word (RCW)
16  which is used to describe the PLL settings at the time of chip-reset.
17
18  Also as per the available Reference Manuals, there is no specific 'version'
19  register available in the Freescale PCIe controller register set,
20  which can allow determining the underlying DesignWare PCIe controller version
21  information.
22
23properties:
24  compatible:
25    oneOf:
26      - enum:
27          - fsl,ls1012a-pcie
28          - fsl,ls1021a-pcie
29          - fsl,ls1028a-pcie
30          - fsl,ls1043a-pcie
31          - fsl,ls1046a-pcie
32          - fsl,ls1088a-pcie
33          - fsl,ls2080a-pcie
34          - fsl,ls2085a-pcie
35          - fsl,ls2088a-pcie
36      - items:
37          - const: fsl,lx2160ar2-pcie
38          - const: fsl,ls2088a-pcie
39  reg:
40    maxItems: 2
41
42  reg-names:
43    items:
44      - const: regs
45      - const: config
46
47  fsl,pcie-scfg:
48    $ref: /schemas/types.yaml#/definitions/phandle-array
49    description: A phandle to the SCFG device node. The second entry is the
50      physical PCIe controller index starting from '0'. This is used to get
51      SCFG PEXN registers.
52    items:
53      items:
54        - description: A phandle to the SCFG device node
55        - description: PCIe controller index starting from '0'
56    maxItems: 1
57
58  big-endian:
59    $ref: /schemas/types.yaml#/definitions/flag
60    description: If the PEX_LUT and PF register block is in big-endian, specify
61      this property.
62
63  dma-coherent: true
64
65  msi-parent: true
66
67  iommu-map: true
68
69  interrupts:
70    minItems: 1
71    maxItems: 2
72
73  interrupt-names:
74    minItems: 1
75    maxItems: 2
76
77  num-viewport:
78    $ref: /schemas/types.yaml#/definitions/uint32
79    deprecated: true
80    description:
81      Number of outbound view ports configured in hardware. It's the same as
82      the number of outbound AT windows.
83    maximum: 256
84
85required:
86  - compatible
87  - reg
88  - reg-names
89  - "#address-cells"
90  - "#size-cells"
91  - device_type
92  - bus-range
93  - ranges
94  - interrupts
95  - interrupt-names
96  - "#interrupt-cells"
97  - interrupt-map-mask
98  - interrupt-map
99
100allOf:
101  - $ref: /schemas/pci/pci-bus.yaml#
102
103  - if:
104      properties:
105        compatible:
106          enum:
107            - fsl,ls1028a-pcie
108            - fsl,ls1046a-pcie
109            - fsl,ls1043a-pcie
110            - fsl,ls1012a-pcie
111    then:
112      properties:
113        interrupts:
114          maxItems: 2
115        interrupt-names:
116          items:
117            - const: pme
118            - const: aer
119
120  - if:
121      properties:
122        compatible:
123          enum:
124            - fsl,ls2080a-pcie
125            - fsl,ls2085a-pcie
126            - fsl,ls2088a-pcie
127    then:
128      properties:
129        interrupts:
130          maxItems: 1
131        interrupt-names:
132          items:
133            - const: intr
134
135  - if:
136      properties:
137        compatible:
138          enum:
139            - fsl,ls1088a-pcie
140    then:
141      properties:
142        interrupts:
143          maxItems: 1
144        interrupt-names:
145          items:
146            - const: aer
147
148unevaluatedProperties: false
149
150examples:
151  - |
152    #include <dt-bindings/interrupt-controller/arm-gic.h>
153
154    soc {
155      #address-cells = <2>;
156      #size-cells = <2>;
157
158      pcie@3400000 {
159        compatible = "fsl,ls1088a-pcie";
160        reg = <0x00 0x03400000 0x0 0x00100000>, /* controller registers */
161            <0x20 0x00000000 0x0 0x00002000>; /* configuration space */
162        reg-names = "regs", "config";
163        interrupts = <0 108 IRQ_TYPE_LEVEL_HIGH>; /* aer interrupt */
164        interrupt-names = "aer";
165        #address-cells = <3>;
166        #size-cells = <2>;
167        dma-coherent;
168        device_type = "pci";
169        bus-range = <0x0 0xff>;
170        ranges = <0x81000000 0x0 0x00000000 0x20 0x00010000 0x0 0x00010000   /* downstream I/O */
171                 0x82000000 0x0 0x40000000 0x20 0x40000000 0x0 0x40000000>; /* non-prefetchable memory */
172        msi-parent = <&its>;
173        #interrupt-cells = <1>;
174        interrupt-map-mask = <0 0 0 7>;
175        interrupt-map = <0000 0 0 1 &gic 0 0 0 109 IRQ_TYPE_LEVEL_HIGH>,
176                        <0000 0 0 2 &gic 0 0 0 110 IRQ_TYPE_LEVEL_HIGH>,
177                        <0000 0 0 3 &gic 0 0 0 111 IRQ_TYPE_LEVEL_HIGH>,
178                        <0000 0 0 4 &gic 0 0 0 112 IRQ_TYPE_LEVEL_HIGH>;
179        iommu-map = <0 &smmu 0 1>; /* Fixed-up by bootloader */
180      };
181    };
182...
183