← Documents Documentation/devicetree/bindings/powerpc/fsl/interlaken-lac.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings

Freescale Interlaken Look-Aside Controller

LAC 전역 register와 최대 24개 software portal의 memory·LIODN binding입니다.

Source pathDocumentation/devicetree/bindings/powerpc/fsl/interlaken-lac.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약과 해설

interlaken-lac.txt:1-309

보호·비보호 CCSR 영역의 연결, portal cache/WIMG 조건, revision별 compatible, DMA용 LIODN과 24개 portal 배치를 함께 설명합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

원문 전체 펼치기
1 ===============================================================================
2 Freescale Interlaken Look-Aside Controller Device Bindings
3 Copyright 2012 Freescale Semiconductor Inc.
4
5 CONTENTS
6 - Interlaken Look-Aside Controller (LAC) Node
7 - Example LAC Node
8 - Interlaken Look-Aside Controller (LAC) Software Portal Node
9 - Interlaken Look-Aside Controller (LAC) Software Portal Child Nodes
10 - Example LAC SWP Node with Child Nodes
11
12 ==============================================================================
13 Interlaken Look-Aside Controller (LAC) Node
14
15 DESCRIPTION
16
17 The Interlaken is a narrow, high speed channelized chip-to-chip interface. To
18 facilitate interoperability between a data path device and a look-aside
19 co-processor, the Interlaken Look-Aside protocol is defined for short
20 transaction-related transfers. Although based on the Interlaken protocol,
21 Interlaken Look-Aside is not directly compatible with Interlaken and can be
22 considered a different operation mode.
23
24 The Interlaken LA controller connects internal platform to Interlaken serial
25 interface. It accepts LA command through software portals, which are system
26 memory mapped 4KB spaces. The LA commands are then translated into the
27 Interlaken control words and data words, which are sent on TX side to TCAM
28 through SerDes lanes.
29
30 There are two 4KiB spaces defined within the LAC global register memory map.
31 There is a full register set at 0x0000-0x0FFF (also known as the "hypervisor"
32 version), and a subset at 0x1000-0x1FFF. The former is a superset of the
33 latter, and includes certain registers that should not be accessible to
34 partitioned software. Separate nodes are used for each region, with a phandle
35 linking the hypervisor node to the normal operating node.
36
37 PROPERTIES
38
39 - compatible
40 Usage: required
41 Value type: <string>
42 Definition: Must include "fsl,interlaken-lac". This represents only
43 those LAC CCSR registers not protected in partitioned
44 software. The version of the device is determined by the LAC
45 IP Block Revision Register (IPBRR0) at offset 0x0BF8.
46
47 Table of correspondences between IPBRR0 values and example
48 chips:
49 Value Device
50 ----------- -------
51 0x02000100 T4240
52
53 The Hypervisor node has a different compatible. It must include
54 "fsl,interlaken-lac-hv". This node represents the protected
55 LAC register space and is required except inside a partition
56 where access to the hypervisor node is to be denied.
57
58 - fsl,non-hv-node
59 Usage: required in "fsl,interlaken-lac-hv"
60 Value type: <phandle>
61 Definition: Points to the non-protected LAC CCSR mapped register space
62 node.
63
64 - reg
65 Usage: required
66 Value type: <prop-encoded-array>
67 Definition: A standard property. The first resource represents the
68 Interlaken LAC configuration registers.
69
70 - interrupts:
71 Usage: required in non-hv node only
72 Value type: <prop-encoded-array>
73 Definition: Interrupt mapping for Interlaken LAC error IRQ.
74
75 EXAMPLE
76 lac: lac@229000 {
77 compatible = "fsl,interlaken-lac"
78 reg = <0x229000 0x1000>;
79 interrupts = <16 2 1 18>;
80 };
81
82 lac-hv@228000 {
83 compatible = "fsl,interlaken-lac-hv"
84 reg = <0x228000 0x1000>;
85 fsl,non-hv-node = <&lac>;
86 };
87
88 ===============================================================================
89 Interlaken Look-Aside Controller (LAC) Software Portal Container Node
90
91 DESCRIPTION
92 The Interlaken Look-Aside Controller (LAC) utilizes Software Portals to accept
93 Interlaken Look-Aside (ILA) commands. The Interlaken LAC software portal
94 memory map occupies 128KB of memory space. The software portal memory space is
95 intended to be cache-enabled. WIMG for each software space is required to be
96 0010 if stashing is enabled; otherwise, WIMG can be 0000 or 0010.
97
98 PROPERTIES
99
100 - #address-cells
101 Usage: required
102 Value type: <u32>
103 Definition: A standard property. Must have a value of 1.
104
105 - #size-cells
106 Usage: required
107 Value type: <u32>
108 Definition: A standard property. Must have a value of 1.
109
110 - compatible
111 Usage: required
112 Value type: <string>
113 Definition: Must include "fsl,interlaken-lac-portals"
114
115 - ranges
116 Usage: required
117 Value type: <prop-encoded-array>
118 Definition: A standard property. Specifies the address and length
119 of the LAC portal memory space.
120
121 ===============================================================================
122 Interlaken Look-Aside Controller (LAC) Software Portals Child Nodes
123
124 DESCRIPTION
125 There are up to 24 available software portals with each software portal
126 requiring 4KB of consecutive memory within the software portal memory mapped
127 space.
128
129 PROPERTIES
130
131 - compatible
132 Usage: required
133 Value type: <string>
134 Definition: Must include "fsl,interlaken-lac-portal-vX.Y" where X is
135 the Major version (IP_MJ) found in the LAC IP Block Revision
136 Register (IPBRR0), at offset 0x0BF8, and Y is the Minor version
137 (IP_MN).
138
139 Table of correspondences between version values and example chips:
140 Value Device
141 ------ -------
142 1.0 T4240
143
144 - reg
145 Usage: required
146 Value type: <prop-encoded-array>
147 Definition: A standard property. The first resource represents the
148 Interlaken LAC software portal registers.
149
150 - fsl,liodn
151 Value type: <u32>
152 Definition: The logical I/O device number (LIODN) for this device. The
153 LIODN is a number expressed by this device and used to perform
154 look-ups in the IOMMU (PAMU) address table when performing
155 DMAs. This property is automatically added by u-boot.
156
157 ===============================================================================
158 EXAMPLE
159
160 lac-portals {
161 #address-cells = <0x1>;
162 #size-cells = <0x1>;
163 compatible = "fsl,interlaken-lac-portals";
164 ranges = <0x0 0xf 0xf4400000 0x20000>;
165
166 lportal0: lac-portal@0 {
167 compatible = "fsl,interlaken-lac-portal-v1.0";
168 fsl,liodn = <0x204>;
169 reg = <0x0 0x1000>;
170 };
171
172 lportal1: lac-portal@1000 {
173 compatible = "fsl,interlaken-lac-portal-v1.0";
174 fsl,liodn = <0x205>;
175 reg = <0x1000 0x1000>;
176 };
177
178 lportal2: lac-portal@2000 {
179 compatible = "fsl,interlaken-lac-portal-v1.0";
180 fsl,liodn = <0x206>;
181 reg = <0x2000 0x1000>;
182 };
183
184 lportal3: lac-portal@3000 {
185 compatible = "fsl,interlaken-lac-portal-v1.0";
186 fsl,liodn = <0x207>;
187 reg = <0x3000 0x1000>;
188 };
189
190 lportal4: lac-portal@4000 {
191 compatible = "fsl,interlaken-lac-portal-v1.0";
192 fsl,liodn = <0x208>;
193 reg = <0x4000 0x1000>;
194 };
195
196 lportal5: lac-portal@5000 {
197 compatible = "fsl,interlaken-lac-portal-v1.0";
198 fsl,liodn = <0x209>;
199 reg = <0x5000 0x1000>;
200 };
201
202 lportal6: lac-portal@6000 {
203 compatible = "fsl,interlaken-lac-portal-v1.0";
204 fsl,liodn = <0x20A>;
205 reg = <0x6000 0x1000>;
206 };
207
208 lportal7: lac-portal@7000 {
209 compatible = "fsl,interlaken-lac-portal-v1.0";
210 fsl,liodn = <0x20B>;
211 reg = <0x7000 0x1000>;
212 };
213
214 lportal8: lac-portal@8000 {
215 compatible = "fsl,interlaken-lac-portal-v1.0";
216 fsl,liodn = <0x20C>;
217 reg = <0x8000 0x1000>;
218 };
219
220 lportal9: lac-portal@9000 {
221 compatible = "fsl,interlaken-lac-portal-v1.0";
222 fsl,liodn = <0x20D>;
223 reg = <0x9000 0x1000>;
224 };
225
226 lportal10: lac-portal@a000 {
227 compatible = "fsl,interlaken-lac-portal-v1.0";
228 fsl,liodn = <0x20E>;
229 reg = <0xA000 0x1000>;
230 };
231
232 lportal11: lac-portal@b000 {
233 compatible = "fsl,interlaken-lac-portal-v1.0";
234 fsl,liodn = <0x20F>;
235 reg = <0xB000 0x1000>;
236 };
237
238 lportal12: lac-portal@c000 {
239 compatible = "fsl,interlaken-lac-portal-v1.0";
240 fsl,liodn = <0x210>;
241 reg = <0xC000 0x1000>;
242 };
243
244 lportal13: lac-portal@d000 {
245 compatible = "fsl,interlaken-lac-portal-v1.0";
246 fsl,liodn = <0x211>;
247 reg = <0xD000 0x1000>;
248 };
249
250 lportal14: lac-portal@e000 {
251 compatible = "fsl,interlaken-lac-portal-v1.0";
252 fsl,liodn = <0x212>;
253 reg = <0xE000 0x1000>;
254 };
255
256 lportal15: lac-portal@f000 {
257 compatible = "fsl,interlaken-lac-portal-v1.0";
258 fsl,liodn = <0x213>;
259 reg = <0xF000 0x1000>;
260 };
261
262 lportal16: lac-portal@10000 {
263 compatible = "fsl,interlaken-lac-portal-v1.0";
264 fsl,liodn = <0x214>;
265 reg = <0x10000 0x1000>;
266 };
267
268 lportal17: lac-portal@11000 {
269 compatible = "fsl,interlaken-lac-portal-v1.0";
270 fsl,liodn = <0x215>;
271 reg = <0x11000 0x1000>;
272 };
273
274 lportal8: lac-portal@1200 {
275 compatible = "fsl,interlaken-lac-portal-v1.0";
276 fsl,liodn = <0x216>;
277 reg = <0x12000 0x1000>;
278 };
279
280 lportal19: lac-portal@13000 {
281 compatible = "fsl,interlaken-lac-portal-v1.0";
282 fsl,liodn = <0x217>;
283 reg = <0x13000 0x1000>;
284 };
285
286 lportal20: lac-portal@14000 {
287 compatible = "fsl,interlaken-lac-portal-v1.0";
288 fsl,liodn = <0x218>;
289 reg = <0x14000 0x1000>;
290 };
291
292 lportal21: lac-portal@15000 {
293 compatible = "fsl,interlaken-lac-portal-v1.0";
294 fsl,liodn = <0x219>;
295 reg = <0x15000 0x1000>;
296 };
297
298 lportal22: lac-portal@16000 {
299 compatible = "fsl,interlaken-lac-portal-v1.0";
300 fsl,liodn = <0x21A>;
301 reg = <0x16000 0x1000>;
302 };
303
304 lportal23: lac-portal@17000 {
305 compatible = "fsl,interlaken-lac-portal-v1.0";
306 fsl,liodn = <0x21B>;
307 reg = <0x17000 0x1000>;
308 };
309 };
310

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

문서 구성

1-11

이 문서는 Freescale Interlaken Look-Aside Controller(LAC)의 device binding을 정의합니다. Copyright는 2012 Freescale Semiconductor Inc.에 있습니다.

  • Interlaken Look-Aside Controller(LAC) node
  • LAC node 예제
  • LAC software portal node
  • LAC software portal child node
  • child node를 포함한 LAC SWP node 예제

LAC 전역 node

12-87

Interlaken은 폭이 좁고 속도가 빠른 channelized chip-to-chip interface입니다. Data-path device와 look-aside co-processor 사이의 상호 운용을 위해 짧은 transaction 관련 전송용 Interlaken Look-Aside protocol이 정의되었습니다. 이 protocol은 Interlaken에 기반하지만 직접 호환되지는 않으며, 별도의 동작 mode로 볼 수 있습니다.

Interlaken LA controller는 내부 platform을 Interlaken serial interface에 연결합니다. System memory에 mapping된 4KB software portal을 통해 LA command를 받아 Interlaken control word와 data word로 변환하고, TX 쪽에서 SerDes lane을 거쳐 TCAM으로 보냅니다.

LAC global register memory map에는 두 개의 4KiB 공간이 있습니다. 0x0000-0x0FFF에는 전체 register set, 즉 hypervisor version이 있고 0x1000-0x1FFF에는 그 subset이 있습니다. 앞 영역은 뒤 영역을 모두 포함하면서 partitioned software가 접근해서는 안 되는 register도 포함합니다. 두 영역은 별도 node로 표현하고, hypervisor node가 phandle로 일반 동작 node를 가리킵니다.

일반 node의 필수 string `compatible`에는 `fsl,interlaken-lac`가 들어가야 합니다. 이 node는 partitioned software에서 보호되지 않는 LAC CCSR register만 나타냅니다. Device version은 offset 0x0BF8의 LAC IP Block Revision Register `IPBRR0`로 판별합니다.

IPBRR0 값예시 chip
0x02000100T4240

Hypervisor node의 필수 `compatible`에는 `fsl,interlaken-lac-hv`가 들어가야 합니다. 이 node는 보호된 LAC register 공간을 나타내며, hypervisor node 접근을 거부하는 partition 내부를 제외하면 필요합니다.

`fsl,non-hv-node`는 `fsl,interlaken-lac-hv` node에 필요한 phandle이며 보호되지 않은 LAC CCSR mapped register-space node를 가리킵니다. 필수 `reg`의 첫 resource는 Interlaken LAC configuration register를 나타냅니다. `interrupts`는 non-hv node에만 필요하며 Interlaken LAC error IRQ mapping을 기술합니다.

lac: lac@229000 {
        compatible = "fsl,interlaken-lac"
        reg = <0x229000 0x1000>;
        interrupts = <16 2 1 18>;
};

lac-hv@228000 {
        compatible = "fsl,interlaken-lac-hv"
        reg = <0x228000 0x1000>;
        fsl,non-hv-node = <&lac>;
};

원문 예제의 두 `compatible` assignment는 세미콜론 없이 적혀 있습니다. 원문 보존을 위해 코드에는 그대로 유지했습니다.

Software portal container node

88-121

LAC는 Software Portal을 사용해 Interlaken Look-Aside(ILA) command를 받습니다. Software portal memory map은 128KB를 차지하며 cache-enabled로 사용하는 것을 전제로 합니다.

Stashing을 활성화한 경우 각 software 공간의 WIMG는 0010이어야 합니다. Stashing을 사용하지 않으면 WIMG는 0000 또는 0010일 수 있습니다.

필수 u32 `#address-cells`와 `#size-cells`는 모두 1이어야 합니다. 필수 string `compatible`에는 `fsl,interlaken-lac-portals`가 들어가야 합니다. 필수 encoded array `ranges`는 LAC portal memory 공간의 address와 length를 지정합니다.

Software portal child node

122-157

사용할 수 있는 software portal은 최대 24개이며, 각 portal에는 software portal memory-mapped 공간 안의 연속된 4KB가 필요합니다.

필수 string `compatible`에는 `fsl,interlaken-lac-portal-vX.Y`가 들어가야 합니다. X는 offset 0x0BF8의 LAC IP Block Revision Register `IPBRR0`에서 읽은 major version `IP_MJ`, Y는 minor version `IP_MN`입니다.

Version 값예시 chip
1.0T4240

필수 encoded array `reg`의 첫 resource는 Interlaken LAC software portal register를 나타냅니다.

u32 `fsl,liodn`은 이 device의 logical I/O device number(LIODN)입니다. Device가 DMA를 수행할 때 IOMMU(PAMU) address table lookup에 사용하는 번호이며, u-boot가 이 property를 자동으로 추가합니다.

Software portal 예제: portal 0-9

158-225

예제는 `lac-portals` container의 cell 크기와 128KB `ranges`를 선언하고, 4KB 간격의 portal 0번부터 9번까지 각기 다른 LIODN을 배정합니다.

lac-portals {
        #address-cells = <0x1>;
        #size-cells = <0x1>;
        compatible = "fsl,interlaken-lac-portals";
        ranges = <0x0 0xf 0xf4400000 0x20000>;

        lportal0: lac-portal@0 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x204>;
                reg = <0x0 0x1000>;
        };

        lportal1: lac-portal@1000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x205>;
                reg = <0x1000 0x1000>;
        };

        lportal2: lac-portal@2000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x206>;
                reg = <0x2000 0x1000>;
        };

        lportal3: lac-portal@3000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x207>;
                reg = <0x3000 0x1000>;
        };

        lportal4: lac-portal@4000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x208>;
                reg = <0x4000 0x1000>;
        };

        lportal5: lac-portal@5000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x209>;
                reg = <0x5000 0x1000>;
        };

        lportal6: lac-portal@6000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x20A>;
                reg = <0x6000 0x1000>;
        };

        lportal7: lac-portal@7000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x20B>;
                reg = <0x7000 0x1000>;
        };

        lportal8: lac-portal@8000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x20C>;
                reg = <0x8000 0x1000>;
        };

        lportal9: lac-portal@9000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x20D>;
                reg = <0x9000 0x1000>;
        };

Software portal 예제: portal 10-17

226-273

Portal 10번부터 17번까지도 동일한 `fsl,interlaken-lac-portal-v1.0` compatible을 사용하며 register offset과 LIODN이 차례로 증가합니다.

lportal10: lac-portal@a000 {
        compatible = "fsl,interlaken-lac-portal-v1.0";
        fsl,liodn = <0x20E>;
        reg = <0xA000 0x1000>;
};

lportal11: lac-portal@b000 {
        compatible = "fsl,interlaken-lac-portal-v1.0";
        fsl,liodn = <0x20F>;
        reg = <0xB000 0x1000>;
};

lportal12: lac-portal@c000 {
        compatible = "fsl,interlaken-lac-portal-v1.0";
        fsl,liodn = <0x210>;
        reg = <0xC000 0x1000>;
};

lportal13: lac-portal@d000 {
        compatible = "fsl,interlaken-lac-portal-v1.0";
        fsl,liodn = <0x211>;
        reg = <0xD000 0x1000>;
};

lportal14: lac-portal@e000 {
        compatible = "fsl,interlaken-lac-portal-v1.0";
        fsl,liodn = <0x212>;
        reg = <0xE000 0x1000>;
};

lportal15: lac-portal@f000 {
        compatible = "fsl,interlaken-lac-portal-v1.0";
        fsl,liodn = <0x213>;
        reg = <0xF000 0x1000>;
};

lportal16: lac-portal@10000 {
        compatible = "fsl,interlaken-lac-portal-v1.0";
        fsl,liodn = <0x214>;
        reg = <0x10000 0x1000>;
};

lportal17: lac-portal@11000 {
        compatible = "fsl,interlaken-lac-portal-v1.0";
        fsl,liodn = <0x215>;
        reg = <0x11000 0x1000>;
};

Software portal 예제: 나머지 portal

274-309

마지막 부분은 0x12000부터 0x17000까지의 portal register window와 LIODN 0x216-0x21B를 선언하고 container를 닫습니다.

        lportal8: lac-portal@1200 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x216>;
                reg = <0x12000 0x1000>;
        };

        lportal19: lac-portal@13000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x217>;
                reg = <0x13000 0x1000>;
        };

        lportal20: lac-portal@14000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x218>;
                reg = <0x14000 0x1000>;
        };

        lportal21: lac-portal@15000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x219>;
                reg = <0x15000 0x1000>;
        };

        lportal22: lac-portal@16000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x21A>;
                reg = <0x16000 0x1000>;
        };

        lportal23: lac-portal@17000 {
                compatible = "fsl,interlaken-lac-portal-v1.0";
                fsl,liodn = <0x21B>;
                reg = <0x17000 0x1000>;
        };
};

원문 274행은 label을 `lportal8`, unit address를 `lac-portal@1200`으로 적지만 `reg`는 0x12000을 사용합니다. 주변 순서상 오탈자로 보이지만 원문 전문과 코드는 수정하지 않았습니다.