요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
AM33xx MUSB
~~~~~~~~~~~~~~~
- compatible: ti,am33xx-usb
- reg: offset and length of the usbss register sets
- ti,hwmods : must be "usb_otg_hs"
The glue layer contains multiple child nodes. It is required to have
at least a control module node, USB node and a PHY node. The second USB
node and its PHY node are optional. The DMA node is also optional.
Reset module
~~~~~~~~~~~~
- compatible: ti,am335x-usb-ctrl-module
- reg: offset and length of the "USB control registers" in the "Control
Module" block. A second offset and length for the USB wake up control
in the same memory block.
- reg-names: "phy_ctrl" for the "USB control registers" and "wakeup" for
the USB wake up control register.
USB PHY
~~~~~~~
compatible: ti,am335x-usb-phy
reg: offset and length of the "USB PHY" register space
ti,ctrl_mod: reference to the "reset module" node
reg-names: phy
The PHY should have a "phy" alias numbered properly in the alias
node.
USB
~~~
- compatible: ti,musb-am33xx
- reg: offset and length of "USB Controller Registers", and offset and
length of "USB Core" register space.
- reg-names: control for the ""USB Controller Registers" and "mc" for
"USB Core" register space
- interrupts: USB interrupt number
- interrupt-names: mc
- dr_mode: Should be one of "host", "peripheral" or "otg".
- mentor,multipoint: Should be "1" indicating the musb controller supports
multipoint. This is a MUSB configuration-specific setting.
- mentor,num-eps: Specifies the number of endpoints. This is also a
MUSB configuration-specific setting. Should be set to "16"
- mentor,ram-bits: Specifies the ram address size. Should be set to "12"
- mentor,power: Should be "500". This signifies the controller can supply up to
500mA when operating in host mode.
- phys: reference to the USB phy
- dmas: specifies the dma channels
- dma-names: specifies the names of the channels. Use "rxN" for receive
and "txN" for transmit endpoints. N specifies the endpoint number.
The controller should have an "usb" alias numbered properly in the alias
node.
DMA
~~~
- compatible: ti,am3359-cppi41
- reg: offset and length of the following register spaces: USBSS, USB
CPPI DMA Controller, USB CPPI DMA Scheduler, USB Queue Manager
- reg-names: glue, controller, scheduler, queuemgr
- #dma-cells: should be set to 2. The first number represents the
endpoint number (0 … 14 for endpoints 1 … 15 on instance 0 and 15 … 29
for endpoints 1 … 15 on instance 1). The second number is 0 for RX and
1 for TX transfers.
- dma-channels: should be set to 30 representing the 15 endpoints for
each USB instance.
- #dma-channels: deprecated
Example:
~~~~~~~~
The following example contains all the nodes as used on am335x-evm:
aliases {
usb0 = &usb0;
usb1 = &usb1;
phy0 = &usb0_phy;
phy1 = &usb1_phy;
};
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>;
};
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";
};
usb1_phy: usb-phy@47401b00 {
compatible = "ti,am335x-usb-phy";
reg = <0x47401b00 0x100>;
reg-names = "phy";
ti,ctrl_mod = <&ctrl_mod>;
#phy-cells = <0>;
};
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";
};
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>;
};
};
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
AM33xx MUSB glue layer
1-10AM33xx 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-19Reset 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-28USB 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-53USB 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>;
};
};
요약과 해설
am33xx-usb.txt:1-200AM33xx MUSB glue, control module, PHY, 두 controller와 CPPI41 DMA binding 및 AM335x EVM 전체 예제를 설명합니다. 접을 수 있는 영어 원문 전체와 한국어 전문 번역을 함께 제공하며, compatible, register, interrupt, clock, PHY, DMA, source path와 원문 줄 좌표를 원형대로 보존합니다.