← Documents Documentation/devicetree/bindings/soc/ti/keystone-navigator-dma.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings / SoC

Keystone Navigator DMA Controller

Navigator DMA cloud, instance register와 client channel binding을 설명합니다.

Source pathDocumentation/devicetree/bindings/soc/ti/keystone-navigator-dma.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

요약과 해설

keystone-navigator-dma.txt:1-111

SoC control과 DMA subsystem의 역할 및 device tree 속성을 먼저 해설하고, 접을 수 있는 영어 원문 전체와 원문 줄 좌표를 보존한 한국어 전문 번역을 제공합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 Keystone Navigator DMA Controller
2
3 This document explains the device tree bindings for the packet dma
4 on keystone devices. The Keystone Navigator DMA driver sets up the dma
5 channels and flows for the QMSS(Queue Manager SubSystem) who triggers
6 the actual data movements across clients using destination queues. Every
7 client modules like NETCP(Network Coprocessor), SRIO(Serial Rapid IO),
8 CRYPTO Engines etc has its own instance of dma hardware. QMSS has also
9 an internal packet DMA module which is used as an infrastructure DMA
10 with zero copy.
11
12 Navigator DMA cloud layout:
13 ------------------
14 | Navigator DMAs |
15 ------------------
16 |
17 |-> DMA instance #0
18 |
19 |-> DMA instance #1
20 .
21 .
22 |
23 |-> DMA instance #n
24
25 Navigator DMA properties:
26 Required properties:
27 - compatible: Should be "ti,keystone-navigator-dma"
28 - clocks: phandle to dma instances clocks. The clock handles can be as
29 many as the dma instances. The order should be maintained as per
30 the dma instances.
31 - ti,navigator-cloud-address: Should contain base address for the multi-core
32 navigator cloud and number of addresses depends on SOC integration
33 configuration.. Navigator cloud global address needs to be programmed
34 into DMA and the DMA uses it as the physical addresses to reach queue
35 managers. Note that these addresses though points to queue managers,
36 they are relevant only from DMA perspective. The QMSS may not choose to
37 use them since it has a different address space view to reach all
38 its components.
39
40 DMA instance properties:
41 Required properties:
42 - reg: Should contain register location and length of the following dma
43 register regions. Register regions should be specified in the following
44 order.
45 - Global control register region (global).
46 - Tx DMA channel configuration register region (txchan).
47 - Rx DMA channel configuration register region (rxchan).
48 - Tx DMA channel Scheduler configuration register region (txsched).
49 - Rx DMA flow configuration register region (rxflow).
50
51 Optional properties:
52 - reg-names: Names for the register regions.
53 - ti,enable-all: Enable all DMA channels vs clients opening specific channels
54 what they need. This property is useful for the userspace fast path
55 case where the linux drivers enables the channels used by userland
56 stack.
57 - ti,loop-back: To loopback Tx streaming I/F to Rx streaming I/F. Used for
58 infrastructure transfers.
59 - ti,rx-retry-timeout: Number of dma cycles to wait before retry on buffer
60 starvation.
61
62 Example:
63
64 knav_dmas: knav_dmas@0 {
65 compatible = "ti,keystone-navigator-dma";
66 clocks = <&papllclk>, <&clkxge>;
67 #address-cells = <1>;
68 #size-cells = <1>;
69 ranges;
70 ti,navigator-cloud-address = <0x23a80000 0x23a90000
71 0x23aa0000 0x23ab0000>;
72
73 dma_gbe: dma_gbe@0 {
74 reg = <0x2004000 0x100>,
75 <0x2004400 0x120>,
76 <0x2004800 0x300>,
77 <0x2004c00 0x120>,
78 <0x2005000 0x400>;
79 reg-names = "global", "txchan", "rxchan",
80 "txsched", "rxflow";
81 };
82
83 dma_xgbe: dma_xgbe@0 {
84 reg = <0x2fa1000 0x100>,
85 <0x2fa1400 0x200>,
86 <0x2fa1800 0x200>,
87 <0x2fa1c00 0x200>,
88 <0x2fa2000 0x400>;
89 reg-names = "global", "txchan", "rxchan",
90 "txsched", "rxflow";
91 };
92 };
93
94 Navigator DMA client:
95 Required properties:
96 - ti,navigator-dmas: List of one or more DMA specifiers, each consisting of
97 - A phandle pointing to DMA instance node
98 - A DMA channel number as a phandle arg.
99 - ti,navigator-dma-names: Contains dma channel name for each DMA specifier in
100 the 'ti,navigator-dmas' property.
101
102 Example:
103
104 netcp: netcp@2090000 {
105 ..
106 ti,navigator-dmas = <&dma_gbe 22>,
107 <&dma_gbe 23>,
108 <&dma_gbe 8>;
109 ti,navigator-dma-names = "netrx0", "netrx1", "nettx";
110 ..
111 };
112

3. 한국어 전문 번역

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

Navigator packet DMA 역할

1-10

Keystone Navigator DMA driver는 QMSS(Queue Manager SubSystem)가 destination queue를 통해 client 간 실제 data movement를 일으킬 수 있도록 DMA channel과 flow를 설정합니다.

NETCP, SRIO, CRYPTO engine 같은 client module은 각자 DMA hardware instance를 가집니다. QMSS도 zero-copy infrastructure DMA로 사용하는 내부 packet DMA module을 갖습니다.

Navigator DMA cloud 구조

11-24

원문의 ASCII 그림은 하나의 Navigator DMA cloud 아래에 instance 0, instance 1, 그리고 마지막 instance n까지 여러 DMA instance가 병렬로 존재함을 나타냅니다.

Navigator DMA cloud layout
Navigator DMA cloudDMA instance #0
Navigator DMA cloudDMA instance #1
Navigator DMA cloudDMA instance #n

원문의 계층형 ASCII 그림을 동일한 분기 관계로 구조화했습니다.

Navigator DMA cloud 필수 속성

25-39

`compatible`은 `ti,keystone-navigator-dma`입니다. `clocks`에는 DMA instance별 clock phandle을 instance 순서대로 나열합니다.

`ti,navigator-cloud-address`는 multi-core Navigator cloud의 base address들을 담으며 개수는 SoC integration configuration에 따라 달라집니다. DMA는 이 global address를 queue manager에 접근할 physical address로 사용합니다.

이 주소는 queue manager를 가리키지만 DMA 관점에서만 유효합니다. QMSS는 모든 component에 접근하는 address-space view가 다르므로 같은 주소를 사용하지 않을 수 있습니다.

DMA instance register 영역

40-50

DMA instance의 필수 `reg`는 global control(`global`), Tx channel configuration(`txchan`), Rx channel configuration(`rxchan`), Tx scheduler configuration(`txsched`), Rx flow configuration(`rxflow`) register 영역의 위치와 길이를 이 순서대로 담습니다.

DMA instance 선택 속성

51-61

`reg-names`는 register 영역 이름입니다. `ti,enable-all`은 client가 필요한 channel만 여는 대신 모든 DMA channel을 켜며, Linux driver가 userland stack용 channel을 활성화하는 userspace fast path에 유용합니다.

`ti,loop-back`은 infrastructure transfer를 위해 Tx streaming interface를 Rx streaming interface로 loopback합니다. `ti,rx-retry-timeout`은 buffer starvation 뒤 재시도 전까지 기다릴 DMA cycle 수입니다.

두 DMA instance 예제

62-92

예제는 두 clock과 네 Navigator cloud address를 가진 상위 노드 아래에 GBE와 XGBE DMA instance를 배치하고, 각 instance의 다섯 register 영역을 `reg-names` 순서에 맞춰 정의합니다.

knav_dmas: knav_dmas@0 {
        compatible = "ti,keystone-navigator-dma";
        clocks = <&papllclk>, <&clkxge>;
        #address-cells = <1>;
        #size-cells = <1>;
        ranges;
        ti,navigator-cloud-address = <0x23a80000 0x23a90000
                                   0x23aa0000 0x23ab0000>;

        dma_gbe: dma_gbe@0 {
                reg = <0x2004000 0x100>,
                          <0x2004400 0x120>,
                          <0x2004800 0x300>,
                          <0x2004c00 0x120>,
                          <0x2005000 0x400>;
                reg-names = "global", "txchan", "rxchan",
                                "txsched", "rxflow";
        };

        dma_xgbe: dma_xgbe@0 {
                reg = <0x2fa1000 0x100>,
                        <0x2fa1400 0x200>,
                        <0x2fa1800 0x200>,
                        <0x2fa1c00 0x200>,
                        <0x2fa2000 0x400>;
                reg-names = "global", "txchan", "rxchan",
                                "txsched", "rxflow";
        };
};

Navigator DMA client 속성

93-101

client의 필수 `ti,navigator-dmas`는 하나 이상의 DMA specifier 목록이며, 각 specifier는 DMA instance node phandle과 phandle argument인 DMA channel number로 구성됩니다.

`ti,navigator-dma-names`는 `ti,navigator-dmas`의 각 specifier에 대응하는 DMA channel name을 담습니다.

NetCP client 예제

102-111

NetCP 예제는 `dma_gbe`의 channel 22, 23, 8을 각각 `netrx0`, `netrx1`, `nettx`라는 이름으로 연결합니다.

netcp: netcp@2090000 {
        ..
        ti,navigator-dmas = <&dma_gbe 22>,
                        <&dma_gbe 23>,
                        <&dma_gbe 8>;
        ti,navigator-dma-names = "netrx0", "netrx1", "nettx";
        ..
};