summaryrefslogtreecommitdiffstats
path: root/Documentation/devicetree/bindings/pci/aspeed,ast2600-pcie.yaml
blob: d9478249418a9eec1ec9d58c969fed7d2474512b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/pci/aspeed,ast2600-pcie.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ASPEED PCIe Root Complex Controller

maintainers:
  - Jacky Chou <jacky_chou@aspeedtech.com>

description:
  The ASPEED PCIe Root Complex controller provides PCI Express Root Complex
  functionality for ASPEED SoCs, such as the AST2600 and AST2700.
  This controller enables connectivity to PCIe endpoint devices, supporting
  memory and I/O windows, MSI and INTx interrupts, and integration with
  the SoC's clock, reset, and pinctrl subsystems. On AST2600, the PCIe Root
  Port device number is always 8.

properties:
  compatible:
    enum:
      - aspeed,ast2600-pcie
      - aspeed,ast2700-pcie

  reg:
    maxItems: 1

  ranges:
    minItems: 2
    maxItems: 2

  interrupts:
    maxItems: 1
    description: INTx and MSI interrupt

  resets:
    items:
      - description: PCIe controller reset

  reset-names:
    items:
      - const: h2x

  aspeed,ahbc:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      Phandle to the ASPEED AHB Controller (AHBC) syscon node.
      This reference is used by the PCIe controller to access
      system-level configuration registers related to the AHB bus.
      To enable AHB access for the PCIe controller.

  aspeed,pciecfg:
    $ref: /schemas/types.yaml#/definitions/phandle
    description:
      Phandle to the ASPEED PCIe configuration syscon node.
      This reference allows the PCIe controller to access
      SoC-specific PCIe configuration registers. There are the others
      functions such PCIe RC and PCIe EP will use this common register
      to configure the SoC interfaces.

  interrupt-controller: true

patternProperties:
  "^pcie@[0-9a-f]+,0$":
    type: object
    $ref: /schemas/pci/pci-pci-bridge.yaml#

    properties:
      reg:
        maxItems: 1

      resets:
        items:
          - description: PERST# signal

      reset-names:
        items:
          - const: perst

      clocks:
        maxItems: 1

      phys:
        maxItems: 1

    required:
      - resets
      - reset-names
      - clocks
      - phys
      - ranges

    unevaluatedProperties: false

allOf:
  - $ref: /schemas/pci/pci-host-bridge.yaml#
  - $ref: /schemas/interrupt-controller/msi-controller.yaml#
  - if:
      properties:
        compatible:
          contains:
            const: aspeed,ast2600-pcie
    then:
      required:
        - aspeed,ahbc
    else:
      properties:
        aspeed,ahbc: false
  - if:
      properties:
        compatible:
          contains:
            const: aspeed,ast2700-pcie
    then:
      required:
        - aspeed,pciecfg
    else:
      properties:
        aspeed,pciecfg: false

required:
  - reg
  - interrupts
  - bus-range
  - ranges
  - resets
  - reset-names
  - msi-controller
  - interrupt-controller
  - interrupt-map-mask
  - interrupt-map

unevaluatedProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/arm-gic.h>
    #include <dt-bindings/clock/ast2600-clock.h>

    pcie0: pcie@1e770000 {
      compatible = "aspeed,ast2600-pcie";
      device_type = "pci";
      reg = <0x1e770000 0x100>;
      #address-cells = <3>;
      #size-cells = <2>;
      interrupts = <GIC_SPI 168 IRQ_TYPE_LEVEL_HIGH>;
      bus-range = <0x00 0xff>;

      ranges = <0x01000000 0x0 0x00018000 0x00018000 0x0 0x00008000
                0x02000000 0x0 0x60000000 0x60000000 0x0 0x20000000>;

      resets = <&syscon ASPEED_RESET_H2X>;
      reset-names = "h2x";

      #interrupt-cells = <1>;
      msi-controller;

      aspeed,ahbc = <&ahbc>;

      interrupt-controller;
      interrupt-map-mask = <0 0 0 7>;
      interrupt-map = <0 0 0 1 &pcie0 0>,
                      <0 0 0 2 &pcie0 1>,
                      <0 0 0 3 &pcie0 2>,
                      <0 0 0 4 &pcie0 3>;

      pcie@8,0 {
        compatible = "pciclass,0604";
        reg = <0x00004000 0 0 0 0>;
        #address-cells = <3>;
        #size-cells = <2>;
        device_type = "pci";
        resets = <&syscon ASPEED_RESET_PCIE_RC_O>;
        reset-names = "perst";
        clocks = <&syscon ASPEED_CLK_GATE_BCLK>;
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pcierc1_default>;
        phys = <&pcie_phy1>;
        ranges;
      };
    };