← Documents Documentation/devicetree/bindings/usb/am33xx-usb.txt GitHub 원문 ↗

Linux 6.18.37 · Devicetree Bindings / USB

AM33xx MUSB

AM33xx MUSB glue, control module, PHY, 두 controller와 CPPI41 DMA binding 및 AM335x EVM 전체 예제를 설명합니다.

Source pathDocumentation/devicetree/bindings/usb/am33xx-usb.txt
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

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

1. 요약·해설

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

요약과 해설

am33xx-usb.txt:1-200

AM33xx MUSB glue, control module, PHY, 두 controller와 CPPI41 DMA binding 및 AM335x EVM 전체 예제를 설명합니다. 접을 수 있는 영어 원문 전체와 한국어 전문 번역을 함께 제공하며, compatible, register, interrupt, clock, PHY, DMA, source path와 원문 줄 좌표를 원형대로 보존합니다.

2. 영어 원문 전체

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

원문 전체 펼치기
1 AM33xx MUSB
2 ~~~~~~~~~~~~~~~
3 - compatible: ti,am33xx-usb
4 - reg: offset and length of the usbss register sets
5 - ti,hwmods : must be "usb_otg_hs"
6
7 The glue layer contains multiple child nodes. It is required to have
8 at least a control module node, USB node and a PHY node. The second USB
9 node and its PHY node are optional. The DMA node is also optional.
10
11 Reset module
12 ~~~~~~~~~~~~
13 - compatible: ti,am335x-usb-ctrl-module
14 - reg: offset and length of the "USB control registers" in the "Control
15 Module" block. A second offset and length for the USB wake up control
16 in the same memory block.
17 - reg-names: "phy_ctrl" for the "USB control registers" and "wakeup" for
18 the USB wake up control register.
19
20 USB PHY
21 ~~~~~~~
22 compatible: ti,am335x-usb-phy
23 reg: offset and length of the "USB PHY" register space
24 ti,ctrl_mod: reference to the "reset module" node
25 reg-names: phy
26 The PHY should have a "phy" alias numbered properly in the alias
27 node.
28
29 USB
30 ~~~
31 - compatible: ti,musb-am33xx
32 - reg: offset and length of "USB Controller Registers", and offset and
33 length of "USB Core" register space.
34 - reg-names: control for the ""USB Controller Registers" and "mc" for
35 "USB Core" register space
36 - interrupts: USB interrupt number
37 - interrupt-names: mc
38 - dr_mode: Should be one of "host", "peripheral" or "otg".
39 - mentor,multipoint: Should be "1" indicating the musb controller supports
40 multipoint. This is a MUSB configuration-specific setting.
41 - mentor,num-eps: Specifies the number of endpoints. This is also a
42 MUSB configuration-specific setting. Should be set to "16"
43 - mentor,ram-bits: Specifies the ram address size. Should be set to "12"
44 - mentor,power: Should be "500". This signifies the controller can supply up to
45 500mA when operating in host mode.
46 - phys: reference to the USB phy
47 - dmas: specifies the dma channels
48 - dma-names: specifies the names of the channels. Use "rxN" for receive
49 and "txN" for transmit endpoints. N specifies the endpoint number.
50
51 The controller should have an "usb" alias numbered properly in the alias
52 node.
53
54 DMA
55 ~~~
56 - compatible: ti,am3359-cppi41
57 - reg: offset and length of the following register spaces: USBSS, USB
58 CPPI DMA Controller, USB CPPI DMA Scheduler, USB Queue Manager
59 - reg-names: glue, controller, scheduler, queuemgr
60 - #dma-cells: should be set to 2. The first number represents the
61 endpoint number (0 … 14 for endpoints 1 … 15 on instance 0 and 15 … 29
62 for endpoints 1 … 15 on instance 1). The second number is 0 for RX and
63 1 for TX transfers.
64 - dma-channels: should be set to 30 representing the 15 endpoints for
65 each USB instance.
66 - #dma-channels: deprecated
67
68 Example:
69 ~~~~~~~~
70 The following example contains all the nodes as used on am335x-evm:
71
72 aliases {
73 usb0 = &usb0;
74 usb1 = &usb1;
75 phy0 = &usb0_phy;
76 phy1 = &usb1_phy;
77 };
78
79 usb: usb@47400000 {
80 compatible = "ti,am33xx-usb";
81 reg = <0x47400000 0x1000>;
82 ranges;
83 #address-cells = <1>;
84 #size-cells = <1>;
85 ti,hwmods = "usb_otg_hs";
86
87 ctrl_mod: control@44e10000 {
88 compatible = "ti,am335x-usb-ctrl-module";
89 reg = <0x44e10620 0x10
90 0x44e10648 0x4>;
91 reg-names = "phy_ctrl", "wakeup";
92 };
93
94 usb0_phy: usb-phy@47401300 {
95 compatible = "ti,am335x-usb-phy";
96 reg = <0x47401300 0x100>;
97 reg-names = "phy";
98 ti,ctrl_mod = <&ctrl_mod>;
99 #phy-cells = <0>;
100 };
101
102 usb0: usb@47401000 {
103 compatible = "ti,musb-am33xx";
104 reg = <0x47401400 0x400
105 0x47401000 0x200>;
106 reg-names = "mc", "control";
107
108 interrupts = <18>;
109 interrupt-names = "mc";
110 dr_mode = "otg"
111 mentor,multipoint = <1>;
112 mentor,num-eps = <16>;
113 mentor,ram-bits = <12>;
114 mentor,power = <500>;
115 phys = <&usb0_phy>;
116
117 dmas = <&cppi41dma 0 0 &cppi41dma 1 0
118 &cppi41dma 2 0 &cppi41dma 3 0
119 &cppi41dma 4 0 &cppi41dma 5 0
120 &cppi41dma 6 0 &cppi41dma 7 0
121 &cppi41dma 8 0 &cppi41dma 9 0
122 &cppi41dma 10 0 &cppi41dma 11 0
123 &cppi41dma 12 0 &cppi41dma 13 0
124 &cppi41dma 14 0 &cppi41dma 0 1
125 &cppi41dma 1 1 &cppi41dma 2 1
126 &cppi41dma 3 1 &cppi41dma 4 1
127 &cppi41dma 5 1 &cppi41dma 6 1
128 &cppi41dma 7 1 &cppi41dma 8 1
129 &cppi41dma 9 1 &cppi41dma 10 1
130 &cppi41dma 11 1 &cppi41dma 12 1
131 &cppi41dma 13 1 &cppi41dma 14 1>;
132 dma-names =
133 "rx1", "rx2", "rx3", "rx4", "rx5", "rx6", "rx7",
134 "rx8", "rx9", "rx10", "rx11", "rx12", "rx13",
135 "rx14", "rx15",
136 "tx1", "tx2", "tx3", "tx4", "tx5", "tx6", "tx7",
137 "tx8", "tx9", "tx10", "tx11", "tx12", "tx13",
138 "tx14", "tx15";
139 };
140
141 usb1_phy: usb-phy@47401b00 {
142 compatible = "ti,am335x-usb-phy";
143 reg = <0x47401b00 0x100>;
144 reg-names = "phy";
145 ti,ctrl_mod = <&ctrl_mod>;
146 #phy-cells = <0>;
147 };
148
149 usb1: usb@47401800 {
150 compatible = "ti,musb-am33xx";
151 reg = <0x47401c00 0x400
152 0x47401800 0x200>;
153 reg-names = "mc", "control";
154 interrupts = <19>;
155 interrupt-names = "mc";
156 dr_mode = "host"
157 mentor,multipoint = <1>;
158 mentor,num-eps = <16>;
159 mentor,ram-bits = <12>;
160 mentor,power = <500>;
161 phys = <&usb1_phy>;
162
163 dmas = <&cppi41dma 15 0 &cppi41dma 16 0
164 &cppi41dma 17 0 &cppi41dma 18 0
165 &cppi41dma 19 0 &cppi41dma 20 0
166 &cppi41dma 21 0 &cppi41dma 22 0
167 &cppi41dma 23 0 &cppi41dma 24 0
168 &cppi41dma 25 0 &cppi41dma 26 0
169 &cppi41dma 27 0 &cppi41dma 28 0
170 &cppi41dma 29 0 &cppi41dma 15 1
171 &cppi41dma 16 1 &cppi41dma 17 1
172 &cppi41dma 18 1 &cppi41dma 19 1
173 &cppi41dma 20 1 &cppi41dma 21 1
174 &cppi41dma 22 1 &cppi41dma 23 1
175 &cppi41dma 24 1 &cppi41dma 25 1
176 &cppi41dma 26 1 &cppi41dma 27 1
177 &cppi41dma 28 1 &cppi41dma 29 1>;
178 dma-names =
179 "rx1", "rx2", "rx3", "rx4", "rx5", "rx6", "rx7",
180 "rx8", "rx9", "rx10", "rx11", "rx12", "rx13",
181 "rx14", "rx15",
182 "tx1", "tx2", "tx3", "tx4", "tx5", "tx6", "tx7",
183 "tx8", "tx9", "tx10", "tx11", "tx12", "tx13",
184 "tx14", "tx15";
185 };
186
187 cppi41dma: dma-controller@7402000 {
188 compatible = "ti,am3359-cppi41";
189 reg = <0x47400000 0x1000
190 0x47402000 0x1000
191 0x47403000 0x1000
192 0x47404000 0x4000>;
193 reg-names = "glue", "controller", "scheduler", "queuemgr";
194 interrupts = <17>;
195 interrupt-names = "glue";
196 #dma-cells = <2>;
197 dma-channels = <30>;
198 dma-requests = <256>;
199 };
200 };
201

3. 한국어 전문 번역

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

AM33xx MUSB glue layer

1-10

AM33xx MUSB glue layer의 `compatible`은 `ti,am33xx-usb`이고 `reg`는 USB subsystem register set의 offset과 길이를 나타냅니다. `ti,hwmods` 값은 반드시 `usb_otg_hs`여야 합니다.

Glue layer에는 여러 child node가 들어갑니다. 최소한 control module node, USB node, PHY node가 각각 하나씩 필요합니다. 두 번째 USB node와 그 PHY node, DMA node는 선택 사항입니다.

Reset module

11-19

Reset module의 `compatible`은 `ti,am335x-usb-ctrl-module`입니다. `reg`의 첫 offset/length 쌍은 Control Module block 안의 USB control register를, 두 번째 쌍은 같은 memory block의 USB wake-up control을 나타냅니다. 대응하는 `reg-names`는 각각 `phy_ctrl`, `wakeup`입니다.

USB PHY

20-28

USB PHY의 `compatible`은 `ti,am335x-usb-phy`이고 `reg`는 USB PHY register 공간의 offset과 길이입니다. `ti,ctrl_mod`는 reset module node를 참조하고 `reg-names`는 `phy`입니다. Alias node에는 각 PHY를 올바른 번호의 `phy` alias로 등록해야 합니다.

MUSB controller 속성

29-53

USB controller의 `compatible`은 `ti,musb-am33xx`입니다. `reg`는 USB Controller Registers와 USB Core 공간의 offset/length를 제공하고, `reg-names`는 각각 `control`과 `mc`입니다. `interrupts`는 USB interrupt 번호이며 `interrupt-names`는 `mc`입니다.

`dr_mode`는 `host`, `peripheral`, `otg` 중 하나입니다. `mentor,multipoint = <1>`은 multipoint 지원을 뜻하고 endpoint 수 `mentor,num-eps`는 16, RAM address 크기 `mentor,ram-bits`는 12여야 합니다. `mentor,power = <500>`은 host mode에서 최대 500 mA를 공급할 수 있음을 뜻합니다.

`phys`는 USB PHY를 참조합니다. `dmas`는 DMA channel을 지정하고 `dma-names`는 수신 endpoint에 `rxN`, 송신 endpoint에 `txN`을 사용합니다. N은 endpoint 번호입니다. Alias node에는 controller를 올바른 번호의 `usb` alias로 등록해야 합니다.

CPPI 4.1 DMA

54-67

선택적인 DMA node의 `compatible`은 `ti,am3359-cppi41`입니다. `reg`는 USBSS, USB CPPI DMA Controller, USB CPPI DMA Scheduler, USB Queue Manager 영역을 순서대로 지정하고 `reg-names`는 `glue`, `controller`, `scheduler`, `queuemgr`입니다.

`#dma-cells`는 2입니다. 첫 cell은 endpoint 번호로 instance 0의 endpoint 1~15에는 0~14, instance 1에는 15~29를 사용합니다. 두 번째 cell은 RX가 0, TX가 1입니다. `dma-channels`는 두 USB instance의 endpoint 15개씩을 합친 30이며 `#dma-channels`는 폐기 예정입니다.

AM335x EVM 예제의 alias

68-78

다음 예제는 AM335x EVM에서 사용하는 모든 node를 보여 줍니다. `usb0`, `usb1` alias는 두 controller를, `phy0`, `phy1` alias는 대응하는 두 PHY를 가리킵니다.

aliases {
        usb0 = &usb0;
        usb1 = &usb1;
        phy0 = &usb0_phy;
        phy1 = &usb1_phy;
};

USB subsystem, control module과 첫 PHY

79-100

`usb@47400000` wrapper는 `ti,am33xx-usb`, 0x1000-byte USBSS 영역, 빈 `ranges`, 한 개의 address/size cell, `usb_otg_hs` hwmod를 사용합니다.

`control@44e10000`은 PHY control과 wake-up register 영역을 `phy_ctrl`, `wakeup` 순서로 지정합니다. 첫 PHY `usb-phy@47401300`은 0x100-byte 영역을 사용하고 `ctrl_mod`를 참조하며 PHY specifier cell 수는 0입니다.

usb: usb@47400000 {
        compatible = "ti,am33xx-usb";
        reg = <0x47400000 0x1000>;
        ranges;
        #address-cells = <1>;
        #size-cells = <1>;
        ti,hwmods = "usb_otg_hs";

        ctrl_mod: control@44e10000 {
                compatible = "ti,am335x-usb-ctrl-module";
                reg = <0x44e10620 0x10
                        0x44e10648 0x4>;
                reg-names = "phy_ctrl", "wakeup";
        };

        usb0_phy: usb-phy@47401300 {
                compatible = "ti,am335x-usb-phy";
                reg = <0x47401300 0x100>;
                reg-names = "phy";
                ti,ctrl_mod = <&ctrl_mod>;
                #phy-cells = <0>;
        };

첫 MUSB instance와 DMA channel

101-140

첫 controller `usb@47401000`은 `ti,musb-am33xx`, core/control register 두 영역, interrupt 18, `otg` mode를 사용합니다. Multipoint는 1, endpoint 수는 16, RAM address bit 수는 12, host 공급 전류 한도는 500 mA이고 첫 PHY를 참조합니다.

`dmas`는 CPPI41 channel 0~14의 RX 방향 0과 TX 방향 1을 모두 열거합니다. `dma-names`는 이에 맞춰 `rx1`~`rx15`, `tx1`~`tx15` 순서입니다.

usb0: usb@47401000 {
        compatible = "ti,musb-am33xx";
        reg = <0x47401400 0x400
                0x47401000 0x200>;
        reg-names = "mc", "control";

        interrupts = <18>;
        interrupt-names = "mc";
        dr_mode = "otg"
        mentor,multipoint = <1>;
        mentor,num-eps = <16>;
        mentor,ram-bits = <12>;
        mentor,power = <500>;
        phys = <&usb0_phy>;

        dmas = <&cppi41dma  0 0 &cppi41dma  1 0
                &cppi41dma  2 0 &cppi41dma  3 0
                &cppi41dma  4 0 &cppi41dma  5 0
                &cppi41dma  6 0 &cppi41dma  7 0
                &cppi41dma  8 0 &cppi41dma  9 0
                &cppi41dma 10 0 &cppi41dma 11 0
                &cppi41dma 12 0 &cppi41dma 13 0
                &cppi41dma 14 0 &cppi41dma  0 1
                &cppi41dma  1 1 &cppi41dma  2 1
                &cppi41dma  3 1 &cppi41dma  4 1
                &cppi41dma  5 1 &cppi41dma  6 1
                &cppi41dma  7 1 &cppi41dma  8 1
                &cppi41dma  9 1 &cppi41dma 10 1
                &cppi41dma 11 1 &cppi41dma 12 1
                &cppi41dma 13 1 &cppi41dma 14 1>;
        dma-names =
                "rx1", "rx2", "rx3", "rx4", "rx5", "rx6", "rx7",
                "rx8", "rx9", "rx10", "rx11", "rx12", "rx13",
                "rx14", "rx15",
                "tx1", "tx2", "tx3", "tx4", "tx5", "tx6", "tx7",
                "tx8", "tx9", "tx10", "tx11", "tx12", "tx13",
                "tx14", "tx15";
};

두 번째 PHY

141-147

두 번째 PHY `usb-phy@47401b00`은 `ti,am335x-usb-phy`, 0x100-byte register 영역, `phy` 이름을 사용합니다. 같은 control module을 참조하며 `#phy-cells = <0>`입니다.

usb1_phy: usb-phy@47401b00 {
        compatible = "ti,am335x-usb-phy";
        reg = <0x47401b00 0x100>;
        reg-names = "phy";
        ti,ctrl_mod = <&ctrl_mod>;
        #phy-cells = <0>;
};

두 번째 MUSB instance와 DMA channel

148-185

두 번째 controller `usb@47401800`은 interrupt 19와 `host` mode를 사용하고 나머지 MUSB configuration 값은 첫 instance와 같습니다. 두 번째 PHY를 참조합니다.

`dmas`는 instance 1에 해당하는 CPPI41 channel 15~29의 RX와 TX를 모두 열거하고, 이름은 다시 `rx1`~`rx15`, `tx1`~`tx15` 순서로 붙입니다.

usb1: usb@47401800 {
        compatible = "ti,musb-am33xx";
        reg = <0x47401c00 0x400
                0x47401800 0x200>;
        reg-names = "mc", "control";
        interrupts = <19>;
        interrupt-names = "mc";
        dr_mode = "host"
        mentor,multipoint = <1>;
        mentor,num-eps = <16>;
        mentor,ram-bits = <12>;
        mentor,power = <500>;
        phys = <&usb1_phy>;

        dmas = <&cppi41dma 15 0 &cppi41dma 16 0
                &cppi41dma 17 0 &cppi41dma 18 0
                &cppi41dma 19 0 &cppi41dma 20 0
                &cppi41dma 21 0 &cppi41dma 22 0
                &cppi41dma 23 0 &cppi41dma 24 0
                &cppi41dma 25 0 &cppi41dma 26 0
                &cppi41dma 27 0 &cppi41dma 28 0
                &cppi41dma 29 0 &cppi41dma 15 1
                &cppi41dma 16 1 &cppi41dma 17 1
                &cppi41dma 18 1 &cppi41dma 19 1
                &cppi41dma 20 1 &cppi41dma 21 1
                &cppi41dma 22 1 &cppi41dma 23 1
                &cppi41dma 24 1 &cppi41dma 25 1
                &cppi41dma 26 1 &cppi41dma 27 1
                &cppi41dma 28 1 &cppi41dma 29 1>;
        dma-names =
                "rx1", "rx2", "rx3", "rx4", "rx5", "rx6", "rx7",
                "rx8", "rx9", "rx10", "rx11", "rx12", "rx13",
                "rx14", "rx15",
                "tx1", "tx2", "tx3", "tx4", "tx5", "tx6", "tx7",
                "tx8", "tx9", "tx10", "tx11", "tx12", "tx13",
                "tx14", "tx15";
};

CPPI41 DMA controller

186-200

`dma-controller@7402000`은 `ti,am3359-cppi41` compatible을 사용합니다. 네 register 영역은 `glue`, `controller`, `scheduler`, `queuemgr` 순서이고 interrupt 17의 이름은 `glue`입니다. DMA specifier는 두 cell, channel 수는 30, request 수는 256입니다.

        cppi41dma: dma-controller@7402000 {
                compatible = "ti,am3359-cppi41";
                reg =  <0x47400000 0x1000
                        0x47402000 0x1000
                        0x47403000 0x1000
                        0x47404000 0x4000>;
                reg-names = "glue", "controller", "scheduler", "queuemgr";
                interrupts = <17>;
                interrupt-names = "glue";
                #dma-cells = <2>;
                dma-channels = <30>;
                dma-requests = <256>;
        };
};