xref: /linux/Documentation/devicetree/bindings/pci/spacemit,k1-pcie-host.yaml (revision 84318277d6334c6981ab326d4acc87c6a6ddc9b8)
1*a812b09aSAlex Elder# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2*a812b09aSAlex Elder%YAML 1.2
3*a812b09aSAlex Elder---
4*a812b09aSAlex Elder$id: http://devicetree.org/schemas/pci/spacemit,k1-pcie-host.yaml#
5*a812b09aSAlex Elder$schema: http://devicetree.org/meta-schemas/core.yaml#
6*a812b09aSAlex Elder
7*a812b09aSAlex Eldertitle: SpacemiT K1 PCI Express Host Controller
8*a812b09aSAlex Elder
9*a812b09aSAlex Eldermaintainers:
10*a812b09aSAlex Elder  - Alex Elder <elder@riscstar.com>
11*a812b09aSAlex Elder
12*a812b09aSAlex Elderdescription: >
13*a812b09aSAlex Elder  The SpacemiT K1 SoC PCIe host controller is based on the Synopsys DesignWare
14*a812b09aSAlex Elder  PCIe IP.  The controller uses the DesignWare built-in MSI interrupt
15*a812b09aSAlex Elder  controller, and supports 256 MSIs.
16*a812b09aSAlex Elder
17*a812b09aSAlex ElderallOf:
18*a812b09aSAlex Elder  - $ref: /schemas/pci/snps,dw-pcie.yaml#
19*a812b09aSAlex Elder
20*a812b09aSAlex Elderproperties:
21*a812b09aSAlex Elder  compatible:
22*a812b09aSAlex Elder    const: spacemit,k1-pcie
23*a812b09aSAlex Elder
24*a812b09aSAlex Elder  reg:
25*a812b09aSAlex Elder    items:
26*a812b09aSAlex Elder      - description: DesignWare PCIe registers
27*a812b09aSAlex Elder      - description: ATU address space
28*a812b09aSAlex Elder      - description: PCIe configuration space
29*a812b09aSAlex Elder      - description: Link control registers
30*a812b09aSAlex Elder
31*a812b09aSAlex Elder  reg-names:
32*a812b09aSAlex Elder    items:
33*a812b09aSAlex Elder      - const: dbi
34*a812b09aSAlex Elder      - const: atu
35*a812b09aSAlex Elder      - const: config
36*a812b09aSAlex Elder      - const: link
37*a812b09aSAlex Elder
38*a812b09aSAlex Elder  clocks:
39*a812b09aSAlex Elder    items:
40*a812b09aSAlex Elder      - description: DWC PCIe Data Bus Interface (DBI) clock
41*a812b09aSAlex Elder      - description: DWC PCIe application AXI-bus master interface clock
42*a812b09aSAlex Elder      - description: DWC PCIe application AXI-bus slave interface clock
43*a812b09aSAlex Elder
44*a812b09aSAlex Elder  clock-names:
45*a812b09aSAlex Elder    items:
46*a812b09aSAlex Elder      - const: dbi
47*a812b09aSAlex Elder      - const: mstr
48*a812b09aSAlex Elder      - const: slv
49*a812b09aSAlex Elder
50*a812b09aSAlex Elder  resets:
51*a812b09aSAlex Elder    items:
52*a812b09aSAlex Elder      - description: DWC PCIe Data Bus Interface (DBI) reset
53*a812b09aSAlex Elder      - description: DWC PCIe application AXI-bus master interface reset
54*a812b09aSAlex Elder      - description: DWC PCIe application AXI-bus slave interface reset
55*a812b09aSAlex Elder
56*a812b09aSAlex Elder  reset-names:
57*a812b09aSAlex Elder    items:
58*a812b09aSAlex Elder      - const: dbi
59*a812b09aSAlex Elder      - const: mstr
60*a812b09aSAlex Elder      - const: slv
61*a812b09aSAlex Elder
62*a812b09aSAlex Elder  interrupts:
63*a812b09aSAlex Elder    items:
64*a812b09aSAlex Elder      - description: Interrupt used for MSIs
65*a812b09aSAlex Elder
66*a812b09aSAlex Elder  interrupt-names:
67*a812b09aSAlex Elder    const: msi
68*a812b09aSAlex Elder
69*a812b09aSAlex Elder  spacemit,apmu:
70*a812b09aSAlex Elder    $ref: /schemas/types.yaml#/definitions/phandle-array
71*a812b09aSAlex Elder    description:
72*a812b09aSAlex Elder      A phandle that refers to the APMU system controller, whose regmap is
73*a812b09aSAlex Elder      used in managing resets and link state, along with and offset of its
74*a812b09aSAlex Elder      reset control register.
75*a812b09aSAlex Elder    items:
76*a812b09aSAlex Elder      - items:
77*a812b09aSAlex Elder          - description: phandle to APMU system controller
78*a812b09aSAlex Elder          - description: register offset
79*a812b09aSAlex Elder
80*a812b09aSAlex ElderpatternProperties:
81*a812b09aSAlex Elder  '^pcie@':
82*a812b09aSAlex Elder    type: object
83*a812b09aSAlex Elder    $ref: /schemas/pci/pci-pci-bridge.yaml#
84*a812b09aSAlex Elder
85*a812b09aSAlex Elder    properties:
86*a812b09aSAlex Elder      phys:
87*a812b09aSAlex Elder        maxItems: 1
88*a812b09aSAlex Elder
89*a812b09aSAlex Elder      vpcie3v3-supply:
90*a812b09aSAlex Elder        description:
91*a812b09aSAlex Elder          A phandle for 3.3v regulator to use for PCIe
92*a812b09aSAlex Elder
93*a812b09aSAlex Elder    required:
94*a812b09aSAlex Elder      - phys
95*a812b09aSAlex Elder      - vpcie3v3-supply
96*a812b09aSAlex Elder
97*a812b09aSAlex Elder    unevaluatedProperties: false
98*a812b09aSAlex Elder
99*a812b09aSAlex Elderrequired:
100*a812b09aSAlex Elder  - clocks
101*a812b09aSAlex Elder  - clock-names
102*a812b09aSAlex Elder  - resets
103*a812b09aSAlex Elder  - reset-names
104*a812b09aSAlex Elder  - interrupts
105*a812b09aSAlex Elder  - interrupt-names
106*a812b09aSAlex Elder  - spacemit,apmu
107*a812b09aSAlex Elder
108*a812b09aSAlex ElderunevaluatedProperties: false
109*a812b09aSAlex Elder
110*a812b09aSAlex Elderexamples:
111*a812b09aSAlex Elder  - |
112*a812b09aSAlex Elder    #include <dt-bindings/clock/spacemit,k1-syscon.h>
113*a812b09aSAlex Elder    pcie@ca400000 {
114*a812b09aSAlex Elder        device_type = "pci";
115*a812b09aSAlex Elder        compatible = "spacemit,k1-pcie";
116*a812b09aSAlex Elder        reg = <0xca400000 0x00001000>,
117*a812b09aSAlex Elder              <0xca700000 0x0001ff24>,
118*a812b09aSAlex Elder              <0x9f000000 0x00002000>,
119*a812b09aSAlex Elder              <0xc0c20000 0x00001000>;
120*a812b09aSAlex Elder        reg-names = "dbi",
121*a812b09aSAlex Elder                    "atu",
122*a812b09aSAlex Elder                    "config",
123*a812b09aSAlex Elder                    "link";
124*a812b09aSAlex Elder        #address-cells = <3>;
125*a812b09aSAlex Elder        #size-cells = <2>;
126*a812b09aSAlex Elder        ranges = <0x01000000 0x0 0x00000000 0x9f002000 0x0 0x00100000>,
127*a812b09aSAlex Elder                 <0x02000000 0x0 0x90000000 0x90000000 0x0 0x0f000000>;
128*a812b09aSAlex Elder        interrupts = <142>;
129*a812b09aSAlex Elder        interrupt-names = "msi";
130*a812b09aSAlex Elder        clocks = <&syscon_apmu CLK_PCIE1_DBI>,
131*a812b09aSAlex Elder                 <&syscon_apmu CLK_PCIE1_MASTER>,
132*a812b09aSAlex Elder                 <&syscon_apmu CLK_PCIE1_SLAVE>;
133*a812b09aSAlex Elder        clock-names = "dbi",
134*a812b09aSAlex Elder                      "mstr",
135*a812b09aSAlex Elder                      "slv";
136*a812b09aSAlex Elder        resets = <&syscon_apmu RESET_PCIE1_DBI>,
137*a812b09aSAlex Elder                 <&syscon_apmu RESET_PCIE1_MASTER>,
138*a812b09aSAlex Elder                 <&syscon_apmu RESET_PCIE1_SLAVE>;
139*a812b09aSAlex Elder        reset-names = "dbi",
140*a812b09aSAlex Elder                      "mstr",
141*a812b09aSAlex Elder                      "slv";
142*a812b09aSAlex Elder        pinctrl-names = "default";
143*a812b09aSAlex Elder        pinctrl-0 = <&pcie1_3_cfg>;
144*a812b09aSAlex Elder        spacemit,apmu = <&syscon_apmu 0x3d4>;
145*a812b09aSAlex Elder
146*a812b09aSAlex Elder        pcie@0 {
147*a812b09aSAlex Elder          device_type = "pci";
148*a812b09aSAlex Elder          compatible = "pciclass,0604";
149*a812b09aSAlex Elder          reg = <0x0 0x0 0x0 0x0 0x0>;
150*a812b09aSAlex Elder          bus-range = <0x01 0xff>;
151*a812b09aSAlex Elder          #address-cells = <3>;
152*a812b09aSAlex Elder          #size-cells = <2>;
153*a812b09aSAlex Elder          ranges;
154*a812b09aSAlex Elder          phys = <&pcie1_phy>;
155*a812b09aSAlex Elder          vpcie3v3-supply = <&pcie_vcc_3v3>;
156*a812b09aSAlex Elder        };
157*a812b09aSAlex Elder    };
158