summaryrefslogtreecommitdiffstats
path: root/dts/src/arm/intel-ixp4xx.dtsi
blob: a50427ad05e748c5c4ba675c00aadec3331f9880 (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
// SPDX-License-Identifier: ISC
/*
 * Device Tree file for Intel XScale Network Processors
 * in the IXP 4xx series.
 */
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/gpio/gpio.h>

/ {
	soc {
		#address-cells = <1>;
		#size-cells = <1>;
		ranges;
		compatible = "simple-bus";
		interrupt-parent = <&intcon>;

		/*
		 * The IXP4xx expansion bus is a set of 16 or 32MB
		 * windows in the 256MB space from 0x50000000 to
		 * 0x5fffffff.
		 */
		bus@50000000 {
			compatible = "simple-bus";
			#address-cells = <1>;
			#size-cells = <1>;
			ranges = <0x00000000 0x50000000 0x10000000>;
			dma-ranges = <0x00000000 0x50000000 0x10000000>;
		};

		qmgr: queue-manager@60000000 {
			compatible = "intel,ixp4xx-ahb-queue-manager";
			reg = <0x60000000 0x4000>;
			interrupts = <3 IRQ_TYPE_LEVEL_HIGH>, <4 IRQ_TYPE_LEVEL_HIGH>;
		};

		pci@c0000000 {
			/* compatible filled in by per-soc device tree */
			reg = <0xc0000000 0x1000>;
			interrupts = <8 IRQ_TYPE_LEVEL_HIGH>,
				     <9 IRQ_TYPE_LEVEL_HIGH>,
				     <10 IRQ_TYPE_LEVEL_HIGH>;
			#address-cells = <3>;
			#size-cells = <2>;
			device_type = "pci";
			bus-range = <0x00 0xff>;
			status = "disabled";

			ranges =
			/*
			 * 64MB 32bit non-prefetchable memory 0x48000000-0x4bffffff
			 * done in 4 chunks of 16MB each.
			 */
			<0x02000000 0 0x48000000 0x48000000 0 0x04000000>,
			/* 64KB I/O space at 0x4c000000 */
			<0x01000000 0 0x00000000 0x4c000000 0 0x00010000>;

			/*
			 * This needs to map to the start of physical memory so
			 * PCI devices can see all (hopefully) memory. This is done
			 * using 4 1:1 16MB windows, so the RAM should not be more than
			 * 64 MB for this to work. If your memory is anywhere else
			 * than at 0x0 you need to alter this.
			 */
			dma-ranges =
			<0x02000000 0 0x00000000 0x00000000 0 0x04000000>;

			#interrupt-cells = <1>;
			interrupt-map-mask = <0xf800 0 0 7>;
			/* Each unique DTS using PCI must specify the swizzling */
		};

		uart0: serial@c8000000 {
			compatible = "intel,xscale-uart";
			reg = <0xc8000000 0x1000>;
			/*
			 * The reg-offset and reg-shift is a side effect
			 * of running the platform in big endian mode.
			 */
			reg-offset = <3>;
			reg-shift = <2>;
			interrupts = <15 IRQ_TYPE_LEVEL_HIGH>;
			clock-frequency = <14745600>;
			no-loopback-test;
		};

		gpio0: gpio@c8004000 {
			compatible = "intel,ixp4xx-gpio";
			reg = <0xc8004000 0x1000>;
			gpio-controller;
			#gpio-cells = <2>;
			interrupt-controller;
			#interrupt-cells = <2>;
		};

		intcon: interrupt-controller@c8003000 {
			/*
			 * Note: no compatible string. The subvariant of the
			 * chip needs to define what version it is. The
			 * location of the interrupt controller is fixed in
			 * memory across all variants.
			 */
			reg = <0xc8003000 0x100>;
			interrupt-controller;
			#interrupt-cells = <2>;
		};

		timer@c8005000 {
			compatible = "intel,ixp4xx-timer";
			reg = <0xc8005000 0x100>;
			interrupts = <5 IRQ_TYPE_LEVEL_HIGH>;
		};

		npe: npe@c8006000 {
			compatible = "intel,ixp4xx-network-processing-engine";
			reg = <0xc8006000 0x1000>, <0xc8007000 0x1000>, <0xc8008000 0x1000>;

			/* NPE-C contains a crypto accelerator */
			crypto {
				compatible = "intel,ixp4xx-crypto";
				intel,npe-handle = <&npe 2>;
				queue-rx = <&qmgr 30>;
				queue-txready = <&qmgr 29>;
			};
		};

		/* This is known as EthB */
		ethernet@c8009000 {
			compatible = "intel,ixp4xx-ethernet";
			reg = <0xc8009000 0x1000>;
			status = "disabled";
			/* Dummy values that depend on firmware */
			queue-rx = <&qmgr 3>;
			queue-txready = <&qmgr 20>;
			intel,npe-handle = <&npe 1>;
		};

		/* This is known as EthC */
		ethernet@c800a000 {
			compatible = "intel,ixp4xx-ethernet";
			reg = <0xc800a000 0x1000>;
			status = "disabled";
			/* Dummy values that depend on firmware */
			queue-rx = <&qmgr 0>;
			queue-txready = <&qmgr 0>;
			intel,npe-handle = <&npe 2>;
		};

		/* This is known as EthA */
		ethernet@c800c000 {
			compatible = "intel,ixp4xx-ethernet";
			reg = <0xc800c000 0x1000>;
			status = "disabled";
			intel,npe = <0>;
			/* Dummy values that depend on firmware */
			queue-rx = <&qmgr 0>;
			queue-txready = <&qmgr 0>;
		};
	};
};