1# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
2%YAML 1.2
3---
4$id: http://devicetree.org/schemas/bus/intel,ixp4xx-expansion-bus-controller.yaml#
5$schema: http://devicetree.org/meta-schemas/core.yaml#
6
7title: Intel IXP4xx Expansion Bus Controller
8
9description: |
10  The IXP4xx expansion bus controller handles access to devices on the
11  memory-mapped expansion bus on the Intel IXP4xx family of system on chips,
12  including IXP42x, IXP43x, IXP45x and IXP46x.
13
14maintainers:
15  - Linus Walleij <linus.walleij@linaro.org>
16
17properties:
18  $nodename:
19    pattern: '^bus@[0-9a-f]+$'
20
21  compatible:
22    items:
23      - enum:
24          - intel,ixp42x-expansion-bus-controller
25          - intel,ixp43x-expansion-bus-controller
26          - intel,ixp45x-expansion-bus-controller
27          - intel,ixp46x-expansion-bus-controller
28      - const: syscon
29
30  reg:
31    description: Control registers for the expansion bus, these are not
32      inside the memory range handled by the expansion bus.
33    maxItems: 1
34
35  native-endian:
36    $ref: /schemas/types.yaml#/definitions/flag
37    description: The IXP4xx has a peculiar MMIO access scheme, as it changes
38      the access pattern for words (swizzling) on the bus depending on whether
39      the SoC is running in big-endian or little-endian mode. Thus the
40      registers must always be accessed using native endianness.
41
42  "#address-cells":
43    description: |
44      The first cell is the chip select number.
45      The second cell is the address offset within the bank.
46    const: 2
47
48  "#size-cells":
49    const: 1
50
51  ranges: true
52  dma-ranges: true
53
54patternProperties:
55  "^.*@[0-7],[0-9a-f]+$":
56    description: Devices attached to chip selects are represented as
57      subnodes.
58    type: object
59
60    properties:
61      intel,ixp4xx-eb-t1:
62        description: Address timing, extend address phase with n cycles.
63        $ref: /schemas/types.yaml#/definitions/uint32
64        maximum: 3
65
66      intel,ixp4xx-eb-t2:
67        description: Setup chip select timing, extend setup phase with n cycles.
68        $ref: /schemas/types.yaml#/definitions/uint32
69        maximum: 3
70
71      intel,ixp4xx-eb-t3:
72        description: Strobe timing, extend strobe phase with n cycles.
73        $ref: /schemas/types.yaml#/definitions/uint32
74        maximum: 15
75
76      intel,ixp4xx-eb-t4:
77        description: Hold timing, extend hold phase with n cycles.
78        $ref: /schemas/types.yaml#/definitions/uint32
79        maximum: 3
80
81      intel,ixp4xx-eb-t5:
82        description: Recovery timing, extend recovery phase with n cycles.
83        $ref: /schemas/types.yaml#/definitions/uint32
84        maximum: 15
85
86      intel,ixp4xx-eb-cycle-type:
87        description: The type of cycles to use on the expansion bus for this
88          chip select. 0 = Intel cycles, 1 = Motorola cycles, 2 = HPI cycles.
89        $ref: /schemas/types.yaml#/definitions/uint32
90        enum: [0, 1, 2]
91
92      intel,ixp4xx-eb-byte-access-on-halfword:
93        description: Allow byte read access on half word devices.
94        $ref: /schemas/types.yaml#/definitions/uint32
95        enum: [0, 1]
96
97      intel,ixp4xx-eb-hpi-hrdy-pol-high:
98        description: Set HPI HRDY polarity to active high when using HPI.
99        $ref: /schemas/types.yaml#/definitions/uint32
100        enum: [0, 1]
101
102      intel,ixp4xx-eb-mux-address-and-data:
103        description: Multiplex address and data on the data bus.
104        $ref: /schemas/types.yaml#/definitions/uint32
105        enum: [0, 1]
106
107      intel,ixp4xx-eb-ahb-split-transfers:
108        description: Enable AHB split transfers.
109        $ref: /schemas/types.yaml#/definitions/uint32
110        enum: [0, 1]
111
112      intel,ixp4xx-eb-write-enable:
113        description: Enable write cycles.
114        $ref: /schemas/types.yaml#/definitions/uint32
115        enum: [0, 1]
116
117      intel,ixp4xx-eb-byte-access:
118        description: Expansion bus uses only 8 bits. The default is to use
119          16 bits.
120        $ref: /schemas/types.yaml#/definitions/uint32
121        enum: [0, 1]
122
123required:
124  - compatible
125  - reg
126  - native-endian
127  - "#address-cells"
128  - "#size-cells"
129  - ranges
130  - dma-ranges
131
132additionalProperties: false
133
134examples:
135  - |
136    #include <dt-bindings/interrupt-controller/irq.h>
137    bus@50000000 {
138        compatible = "intel,ixp42x-expansion-bus-controller", "syscon";
139        reg = <0xc4000000 0x28>;
140        native-endian;
141        #address-cells = <2>;
142        #size-cells = <1>;
143        ranges = <0 0x0 0x50000000 0x01000000>,
144                 <1 0x0 0x51000000 0x01000000>;
145        dma-ranges = <0 0x0 0x50000000 0x01000000>,
146                     <1 0x0 0x51000000 0x01000000>;
147        flash@0,0 {
148            compatible = "intel,ixp4xx-flash", "cfi-flash";
149            bank-width = <2>;
150            reg = <0 0x00000000 0x1000000>;
151            intel,ixp4xx-eb-t3 = <3>;
152            intel,ixp4xx-eb-cycle-type = <0>;
153            intel,ixp4xx-eb-byte-access-on-halfword = <1>;
154            intel,ixp4xx-eb-write-enable = <1>;
155            intel,ixp4xx-eb-byte-access = <0>;
156        };
157        serial@1,0 {
158            compatible = "exar,xr16l2551", "ns8250";
159            reg = <1 0x00000000 0x10>;
160            interrupt-parent = <&gpio0>;
161            interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
162            clock-frequency = <1843200>;
163            intel,ixp4xx-eb-t3 = <3>;
164            intel,ixp4xx-eb-cycle-type = <1>;
165            intel,ixp4xx-eb-write-enable = <1>;
166            intel,ixp4xx-eb-byte-access = <1>;
167        };
168    };
169