.. | .. |
---|
86 | 86 | xlnx,use-parity = <0>; |
---|
87 | 87 | }; |
---|
88 | 88 | |
---|
89 | | - Some IP cores actually implement 2 or more logical devices. In |
---|
90 | | - this case, the device should still describe the whole IP core with |
---|
91 | | - a single node and add a child node for each logical device. The |
---|
92 | | - ranges property can be used to translate from parent IP-core to the |
---|
93 | | - registers of each device. In addition, the parent node should be |
---|
94 | | - compatible with the bus type 'xlnx,compound', and should contain |
---|
95 | | - #address-cells and #size-cells, as with any other bus. (Note: this |
---|
96 | | - makes the assumption that both logical devices have the same bus |
---|
97 | | - binding. If this is not true, then separate nodes should be used |
---|
98 | | - for each logical device). The 'cell-index' property can be used to |
---|
99 | | - enumerate logical devices within an IP core. For example, the |
---|
100 | | - following is the system.mhs entry for the dual ps2 controller found |
---|
101 | | - on the ml403 reference design. |
---|
102 | | - |
---|
103 | | - BEGIN opb_ps2_dual_ref |
---|
104 | | - PARAMETER INSTANCE = opb_ps2_dual_ref_0 |
---|
105 | | - PARAMETER HW_VER = 1.00.a |
---|
106 | | - PARAMETER C_BASEADDR = 0xA9000000 |
---|
107 | | - PARAMETER C_HIGHADDR = 0xA9001FFF |
---|
108 | | - BUS_INTERFACE SOPB = opb_v20_0 |
---|
109 | | - PORT Sys_Intr1 = ps2_1_intr |
---|
110 | | - PORT Sys_Intr2 = ps2_2_intr |
---|
111 | | - PORT Clkin1 = ps2_clk_rx_1 |
---|
112 | | - PORT Clkin2 = ps2_clk_rx_2 |
---|
113 | | - PORT Clkpd1 = ps2_clk_tx_1 |
---|
114 | | - PORT Clkpd2 = ps2_clk_tx_2 |
---|
115 | | - PORT Rx1 = ps2_d_rx_1 |
---|
116 | | - PORT Rx2 = ps2_d_rx_2 |
---|
117 | | - PORT Txpd1 = ps2_d_tx_1 |
---|
118 | | - PORT Txpd2 = ps2_d_tx_2 |
---|
119 | | - END |
---|
120 | | - |
---|
121 | | - It would result in the following device tree nodes: |
---|
122 | | - |
---|
123 | | - opb_ps2_dual_ref_0: opb-ps2-dual-ref@a9000000 { |
---|
124 | | - #address-cells = <1>; |
---|
125 | | - #size-cells = <1>; |
---|
126 | | - compatible = "xlnx,compound"; |
---|
127 | | - ranges = <0 a9000000 2000>; |
---|
128 | | - // If this device had extra parameters, then they would |
---|
129 | | - // go here. |
---|
130 | | - ps2@0 { |
---|
131 | | - compatible = "xlnx,opb-ps2-dual-ref-1.00.a"; |
---|
132 | | - reg = <0 40>; |
---|
133 | | - interrupt-parent = <&opb_intc_0>; |
---|
134 | | - interrupts = <3 0>; |
---|
135 | | - cell-index = <0>; |
---|
136 | | - }; |
---|
137 | | - ps2@1000 { |
---|
138 | | - compatible = "xlnx,opb-ps2-dual-ref-1.00.a"; |
---|
139 | | - reg = <1000 40>; |
---|
140 | | - interrupt-parent = <&opb_intc_0>; |
---|
141 | | - interrupts = <3 0>; |
---|
142 | | - cell-index = <0>; |
---|
143 | | - }; |
---|
144 | | - }; |
---|
145 | | - |
---|
146 | | - Also, the system.mhs file defines bus attachments from the processor |
---|
147 | | - to the devices. The device tree structure should reflect the bus |
---|
148 | | - attachments. Again an example; this system.mhs fragment: |
---|
149 | | - |
---|
150 | | - BEGIN ppc405_virtex4 |
---|
151 | | - PARAMETER INSTANCE = ppc405_0 |
---|
152 | | - PARAMETER HW_VER = 1.01.a |
---|
153 | | - BUS_INTERFACE DPLB = plb_v34_0 |
---|
154 | | - BUS_INTERFACE IPLB = plb_v34_0 |
---|
155 | | - END |
---|
156 | | - |
---|
157 | | - BEGIN opb_intc |
---|
158 | | - PARAMETER INSTANCE = opb_intc_0 |
---|
159 | | - PARAMETER HW_VER = 1.00.c |
---|
160 | | - PARAMETER C_BASEADDR = 0xD1000FC0 |
---|
161 | | - PARAMETER C_HIGHADDR = 0xD1000FDF |
---|
162 | | - BUS_INTERFACE SOPB = opb_v20_0 |
---|
163 | | - END |
---|
164 | | - |
---|
165 | | - BEGIN opb_uart16550 |
---|
166 | | - PARAMETER INSTANCE = opb_uart16550_0 |
---|
167 | | - PARAMETER HW_VER = 1.00.d |
---|
168 | | - PARAMETER C_BASEADDR = 0xa0000000 |
---|
169 | | - PARAMETER C_HIGHADDR = 0xa0001FFF |
---|
170 | | - BUS_INTERFACE SOPB = opb_v20_0 |
---|
171 | | - END |
---|
172 | | - |
---|
173 | | - BEGIN plb_v34 |
---|
174 | | - PARAMETER INSTANCE = plb_v34_0 |
---|
175 | | - PARAMETER HW_VER = 1.02.a |
---|
176 | | - END |
---|
177 | | - |
---|
178 | | - BEGIN plb_bram_if_cntlr |
---|
179 | | - PARAMETER INSTANCE = plb_bram_if_cntlr_0 |
---|
180 | | - PARAMETER HW_VER = 1.00.b |
---|
181 | | - PARAMETER C_BASEADDR = 0xFFFF0000 |
---|
182 | | - PARAMETER C_HIGHADDR = 0xFFFFFFFF |
---|
183 | | - BUS_INTERFACE SPLB = plb_v34_0 |
---|
184 | | - END |
---|
185 | | - |
---|
186 | | - BEGIN plb2opb_bridge |
---|
187 | | - PARAMETER INSTANCE = plb2opb_bridge_0 |
---|
188 | | - PARAMETER HW_VER = 1.01.a |
---|
189 | | - PARAMETER C_RNG0_BASEADDR = 0x20000000 |
---|
190 | | - PARAMETER C_RNG0_HIGHADDR = 0x3FFFFFFF |
---|
191 | | - PARAMETER C_RNG1_BASEADDR = 0x60000000 |
---|
192 | | - PARAMETER C_RNG1_HIGHADDR = 0x7FFFFFFF |
---|
193 | | - PARAMETER C_RNG2_BASEADDR = 0x80000000 |
---|
194 | | - PARAMETER C_RNG2_HIGHADDR = 0xBFFFFFFF |
---|
195 | | - PARAMETER C_RNG3_BASEADDR = 0xC0000000 |
---|
196 | | - PARAMETER C_RNG3_HIGHADDR = 0xDFFFFFFF |
---|
197 | | - BUS_INTERFACE SPLB = plb_v34_0 |
---|
198 | | - BUS_INTERFACE MOPB = opb_v20_0 |
---|
199 | | - END |
---|
200 | | - |
---|
201 | | - Gives this device tree (some properties removed for clarity): |
---|
202 | | - |
---|
203 | | - plb@0 { |
---|
204 | | - #address-cells = <1>; |
---|
205 | | - #size-cells = <1>; |
---|
206 | | - compatible = "xlnx,plb-v34-1.02.a"; |
---|
207 | | - device_type = "ibm,plb"; |
---|
208 | | - ranges; // 1:1 translation |
---|
209 | | - |
---|
210 | | - plb_bram_if_cntrl_0: bram@ffff0000 { |
---|
211 | | - reg = <ffff0000 10000>; |
---|
212 | | - } |
---|
213 | | - |
---|
214 | | - opb@20000000 { |
---|
215 | | - #address-cells = <1>; |
---|
216 | | - #size-cells = <1>; |
---|
217 | | - ranges = <20000000 20000000 20000000 |
---|
218 | | - 60000000 60000000 20000000 |
---|
219 | | - 80000000 80000000 40000000 |
---|
220 | | - c0000000 c0000000 20000000>; |
---|
221 | | - |
---|
222 | | - opb_uart16550_0: serial@a0000000 { |
---|
223 | | - reg = <a00000000 2000>; |
---|
224 | | - }; |
---|
225 | | - |
---|
226 | | - opb_intc_0: interrupt-controller@d1000fc0 { |
---|
227 | | - reg = <d1000fc0 20>; |
---|
228 | | - }; |
---|
229 | | - }; |
---|
230 | | - }; |
---|
231 | | - |
---|
232 | 89 | That covers the general approach to binding xilinx IP cores into the |
---|
233 | 90 | device tree. The following are bindings for specific devices: |
---|
234 | 91 | |
---|