Tom Rini | 53633a8 | 2024-02-29 12:33:36 -0500 | [diff] [blame] | 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 | }; |