Sam Protsenko | b084b0c | 2016-03-25 16:39:47 +0200 | [diff] [blame] | 1 | # |
| 2 | # USB Gadget support on a system involves |
| 3 | # (a) a peripheral controller, and |
| 4 | # (b) the gadget driver using it. |
| 5 | # |
| 6 | # NOTE: Gadget support ** DOES NOT ** depend on host-side CONFIG_USB !! |
| 7 | # |
| 8 | # - Host systems (like PCs) need CONFIG_USB (with "A" jacks). |
| 9 | # - Peripherals (like PDAs) need CONFIG_USB_GADGET (with "B" jacks). |
| 10 | # - Some systems have both kinds of controllers. |
| 11 | # |
| 12 | # With help from a special transceiver and a "Mini-AB" jack, systems with |
| 13 | # both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG). |
| 14 | # |
| 15 | |
| 16 | menuconfig USB_GADGET |
| 17 | bool "USB Gadget Support" |
Tom Rini | 5b9e616 | 2021-07-09 10:11:56 -0400 | [diff] [blame] | 18 | depends on DM |
| 19 | select DM_USB |
Miquel Raynal | 75d6347 | 2023-10-10 11:03:02 +0200 | [diff] [blame] | 20 | imply CMD_BIND |
Sam Protsenko | b084b0c | 2016-03-25 16:39:47 +0200 | [diff] [blame] | 21 | help |
| 22 | USB is a master/slave protocol, organized with one master |
| 23 | host (such as a PC) controlling up to 127 peripheral devices. |
| 24 | The USB hardware is asymmetric, which makes it easier to set up: |
| 25 | you can't connect a "to-the-host" connector to a peripheral. |
| 26 | |
| 27 | U-Boot can run in the host, or in the peripheral. In both cases |
| 28 | you need a low level bus controller driver, and some software |
| 29 | talking to it. Peripheral controllers are often discrete silicon, |
| 30 | or are integrated with the CPU in a microcontroller. The more |
| 31 | familiar host side controllers have names like "EHCI", "OHCI", |
| 32 | or "UHCI", and are usually integrated into southbridges on PC |
| 33 | motherboards. |
| 34 | |
| 35 | Enable this configuration option if you want to run U-Boot inside |
| 36 | a USB peripheral device. Configure one hardware driver for your |
| 37 | peripheral/device side bus controller, and a "gadget driver" for |
| 38 | your peripheral protocol. |
Sam Protsenko | fb115b1 | 2016-04-13 14:20:24 +0300 | [diff] [blame] | 39 | |
Marek Vasut | 98b9193 | 2023-05-06 16:42:39 +0200 | [diff] [blame] | 40 | config SPL_USB_GADGET |
| 41 | bool "USB Gadget Support in SPL" |
| 42 | help |
| 43 | Enable USB Gadget API which allows to enable USB device functions |
| 44 | in SPL. |
| 45 | |
Sam Protsenko | fb115b1 | 2016-04-13 14:20:24 +0300 | [diff] [blame] | 46 | if USB_GADGET |
| 47 | |
Maxime Ripard | 7f78b9d | 2017-09-07 08:58:08 +0200 | [diff] [blame] | 48 | config USB_GADGET_MANUFACTURER |
| 49 | string "Vendor name of the USB device" |
Maxim Schwalm | 562b997 | 2023-02-14 19:35:30 +0200 | [diff] [blame] | 50 | default "NVIDIA" if ARCH_TEGRA |
Maxime Ripard | 6375bd8 | 2017-09-12 19:41:15 +0200 | [diff] [blame] | 51 | default "Allwinner Technology" if ARCH_SUNXI |
Jagan Teki | c115389 | 2019-11-19 13:56:14 +0530 | [diff] [blame] | 52 | default "Rockchip" if ARCH_ROCKCHIP |
Maxime Ripard | 7f78b9d | 2017-09-07 08:58:08 +0200 | [diff] [blame] | 53 | default "U-Boot" |
| 54 | help |
| 55 | Vendor name of the USB device emulated, reported to the host device. |
| 56 | This is usually either the manufacturer of the device or the SoC. |
| 57 | |
| 58 | config USB_GADGET_VENDOR_NUM |
| 59 | hex "Vendor ID of the USB device" |
Maxim Schwalm | 562b997 | 2023-02-14 19:35:30 +0200 | [diff] [blame] | 60 | default 0x0955 if ARCH_TEGRA |
Maxime Ripard | 6375bd8 | 2017-09-12 19:41:15 +0200 | [diff] [blame] | 61 | default 0x1f3a if ARCH_SUNXI |
Jagan Teki | ac6fb30 | 2019-11-19 13:56:15 +0530 | [diff] [blame] | 62 | default 0x2207 if ARCH_ROCKCHIP |
Maxime Ripard | 7f78b9d | 2017-09-07 08:58:08 +0200 | [diff] [blame] | 63 | default 0x0 |
| 64 | help |
| 65 | Vendor ID of the USB device emulated, reported to the host device. |
| 66 | This is usually the board or SoC vendor's, unless you've registered |
| 67 | for one. |
| 68 | |
| 69 | config USB_GADGET_PRODUCT_NUM |
| 70 | hex "Product ID of the USB device" |
Maxim Schwalm | 562b997 | 2023-02-14 19:35:30 +0200 | [diff] [blame] | 71 | default 0x701a if ARCH_TEGRA |
Maxime Ripard | 6375bd8 | 2017-09-12 19:41:15 +0200 | [diff] [blame] | 72 | default 0x1010 if ARCH_SUNXI |
Jonas Karlman | cec2b2a | 2024-03-10 18:50:57 +0000 | [diff] [blame] | 73 | default 0x110a if ROCKCHIP_RV1108 |
| 74 | default 0x110b if ROCKCHIP_RV1126 |
Paweł Jarosz | 8e3898f | 2022-04-29 23:40:05 +0200 | [diff] [blame] | 75 | default 0x300a if ROCKCHIP_RK3066 |
Jonas Karlman | cec2b2a | 2024-03-10 18:50:57 +0000 | [diff] [blame] | 76 | default 0x301a if ROCKCHIP_RK3036 |
| 77 | default 0x310b if ROCKCHIP_RK3188 |
Jagan Teki | 668c56f | 2019-11-19 13:56:17 +0530 | [diff] [blame] | 78 | default 0x310c if ROCKCHIP_RK3128 |
Jonas Karlman | cec2b2a | 2024-03-10 18:50:57 +0000 | [diff] [blame] | 79 | default 0x320a if ROCKCHIP_RK3288 |
| 80 | default 0x320b if ROCKCHIP_RK322X |
| 81 | default 0x320c if ROCKCHIP_RK3328 |
| 82 | default 0x330a if ROCKCHIP_RK3368 |
Jagan Teki | 5c8e27b | 2019-11-19 13:56:21 +0530 | [diff] [blame] | 83 | default 0x330c if ROCKCHIP_RK3399 |
Jonas Karlman | cec2b2a | 2024-03-10 18:50:57 +0000 | [diff] [blame] | 84 | default 0x330d if ROCKCHIP_PX30 |
| 85 | default 0x330e if ROCKCHIP_RK3308 |
| 86 | default 0x350a if ROCKCHIP_RK3568 |
| 87 | default 0x350b if ROCKCHIP_RK3588 |
Maxime Ripard | 7f78b9d | 2017-09-07 08:58:08 +0200 | [diff] [blame] | 88 | default 0x0 |
| 89 | help |
| 90 | Product ID of the USB device emulated, reported to the host device. |
| 91 | |
Sam Protsenko | b4a0bf7 | 2016-04-13 14:20:25 +0300 | [diff] [blame] | 92 | config USB_GADGET_ATMEL_USBA |
| 93 | bool "Atmel USBA" |
| 94 | select USB_GADGET_DUALSPEED |
| 95 | help |
| 96 | USBA is the integrated high-speed USB Device controller on |
| 97 | the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel. |
| 98 | |
Steve Rae | 437689f | 2016-08-15 17:26:26 -0700 | [diff] [blame] | 99 | config USB_GADGET_BCM_UDC_OTG_PHY |
| 100 | bool "Broadcom UDC OTG PHY" |
| 101 | help |
| 102 | Enable the Broadcom UDC OTG physical device interface. |
| 103 | |
Tom Rini | a7a1e6d | 2022-11-19 18:45:38 -0500 | [diff] [blame] | 104 | config USB_GADGET_AT91 |
| 105 | bool "Atmel AT91 USB Gadget Controller" |
| 106 | depends on ARCH_AT91 |
| 107 | |
Sam Protsenko | b4a0bf7 | 2016-04-13 14:20:25 +0300 | [diff] [blame] | 108 | config USB_GADGET_DWC2_OTG |
| 109 | bool "DesignWare USB2.0 HS OTG controller (gadget mode)" |
| 110 | select USB_GADGET_DUALSPEED |
| 111 | help |
| 112 | The Designware USB2.0 high-speed gadget controller |
| 113 | integrated into many SoCs. Select this option if you want the |
| 114 | driver to operate in Peripheral mode. This option requires |
| 115 | USB_GADGET to be enabled. |
| 116 | |
Steve Rae | d7198f3 | 2016-06-07 15:35:21 -0700 | [diff] [blame] | 117 | if USB_GADGET_DWC2_OTG |
| 118 | |
Tom Rini | fb9d406 | 2022-06-15 12:03:52 -0400 | [diff] [blame] | 119 | config USB_GADGET_DWC2_OTG_PHY |
| 120 | bool "DesignWare USB2.0 HS OTG PHY" |
| 121 | help |
| 122 | Enable the DesignWare USB2.0 HS OTG physical device interface. |
| 123 | |
Steve Rae | d7198f3 | 2016-06-07 15:35:21 -0700 | [diff] [blame] | 124 | config USB_GADGET_DWC2_OTG_PHY_BUS_WIDTH_8 |
| 125 | bool "DesignWare USB2.0 HS OTG controller 8-bit PHY bus width" |
| 126 | help |
| 127 | Set the Designware USB2.0 high-speed OTG controller |
| 128 | PHY interface width to 8 bits, rather than the default (16 bits). |
| 129 | |
| 130 | endif # USB_GADGET_DWC2_OTG |
| 131 | |
Peng Fan | a3669d2 | 2021-01-25 21:43:48 +0800 | [diff] [blame] | 132 | config USB_GADGET_OS_DESCRIPTORS |
| 133 | bool "USB OS Feature Descriptors support" |
| 134 | help |
| 135 | This is a porting patch from linux kernel: 37a3a533429e |
| 136 | ("usb: gadget: OS Feature Descriptors support"), the original commit |
| 137 | log see below: |
| 138 | There is a custom (non-USB IF) extension to the USB standard: |
| 139 | http://msdn.microsoft.com/library/windows/hardware/gg463182 |
| 140 | |
Sam Protsenko | b4a0bf7 | 2016-04-13 14:20:25 +0300 | [diff] [blame] | 141 | config CI_UDC |
| 142 | bool "ChipIdea device controller" |
| 143 | select USB_GADGET_DUALSPEED |
| 144 | help |
| 145 | Say Y here to enable device controller functionality of the |
| 146 | ChipIdea driver. |
| 147 | |
Jassi Brar | 9c5cb7f | 2020-07-29 20:51:27 -0500 | [diff] [blame] | 148 | config USB_GADGET_MAX3420 |
| 149 | bool "MAX3420 USB Over SPI" |
| 150 | depends on DM_SPI |
| 151 | help |
| 152 | MAX3420, from MAXIM, implements USB-over-SPI Full-Speed device controller. |
| 153 | |
Sam Protsenko | fb115b1 | 2016-04-13 14:20:24 +0300 | [diff] [blame] | 154 | config USB_GADGET_VBUS_DRAW |
| 155 | int "Maximum VBUS Power usage (2-500 mA)" |
| 156 | range 2 500 |
| 157 | default 2 |
| 158 | help |
| 159 | Some devices need to draw power from USB when they are |
| 160 | configured, perhaps to operate circuitry or to recharge |
| 161 | batteries. This is in addition to any local power supply, |
| 162 | such as an AC adapter or batteries. |
| 163 | |
| 164 | Enter the maximum power your device draws through USB, in |
| 165 | milliAmperes. The permitted range of values is 2 - 500 mA; |
| 166 | 0 mA would be legal, but can make some hosts misbehave. |
| 167 | |
| 168 | This value will be used except for system-specific gadget |
| 169 | drivers that have more specific information. |
| 170 | |
Frank Li | c2bdb58 | 2020-04-29 10:35:11 +0800 | [diff] [blame] | 171 | config SDP_LOADADDR |
| 172 | hex "Default load address at SDP_WRITE and SDP_JUMP" |
Tom Rini | f18679c | 2023-08-02 11:09:43 -0400 | [diff] [blame] | 173 | default 0x0 |
Frank Li | c2bdb58 | 2020-04-29 10:35:11 +0800 | [diff] [blame] | 174 | |
Sam Protsenko | b4a0bf7 | 2016-04-13 14:20:25 +0300 | [diff] [blame] | 175 | # Selected by UDC drivers that support high-speed operation. |
| 176 | config USB_GADGET_DUALSPEED |
| 177 | bool |
| 178 | |
Sam Protsenko | 4d2439d | 2016-04-13 14:20:26 +0300 | [diff] [blame] | 179 | config USB_GADGET_DOWNLOAD |
| 180 | bool "Enable USB download gadget" |
| 181 | help |
| 182 | Composite USB download gadget support (g_dnl) for download functions. |
| 183 | This code works on top of composite gadget. |
| 184 | |
Sam Protsenko | b706ffd | 2016-04-13 14:20:30 +0300 | [diff] [blame] | 185 | if USB_GADGET_DOWNLOAD |
| 186 | |
Lukasz Majewski | e364e4b | 2018-01-29 19:25:54 +0100 | [diff] [blame] | 187 | config USB_FUNCTION_MASS_STORAGE |
| 188 | bool "Enable USB mass storage gadget" |
| 189 | help |
| 190 | Enable mass storage protocol support in U-Boot. It allows exporting |
| 191 | the eMMC/SD card content to HOST PC so it can be mounted. |
| 192 | |
Eddie Cai | f646092 | 2017-12-15 08:17:10 +0800 | [diff] [blame] | 193 | config USB_FUNCTION_ROCKUSB |
| 194 | bool "Enable USB rockusb gadget" |
| 195 | help |
| 196 | Rockusb protocol is widely used by Rockchip SoC based devices. It can |
| 197 | read/write info, image to/from devices. This enables the USB part of |
| 198 | the rockusb gadget.for more detail about Rockusb protocol, please see |
| 199 | doc/README.rockusb |
| 200 | |
Lukasz Majewski | b886ed9 | 2018-01-29 19:21:39 +0100 | [diff] [blame] | 201 | config USB_FUNCTION_SDP |
| 202 | bool "Enable USB SDP (Serial Download Protocol)" |
| 203 | help |
| 204 | Enable Serial Download Protocol (SDP) device support in U-Boot. This |
| 205 | allows to download images into memory and execute (jump to) them |
| 206 | using the same protocol as implemented by the i.MX family's boot ROM. |
| 207 | |
Lukasz Majewski | 3c32b42 | 2018-01-29 19:30:18 +0100 | [diff] [blame] | 208 | config USB_FUNCTION_THOR |
| 209 | bool "Enable USB THOR gadget" |
| 210 | help |
| 211 | Enable Tizen's THOR download protocol support in U-Boot. It |
| 212 | allows downloading images into memory and flash them to target device. |
| 213 | |
Loic Poulain | eb78f83 | 2021-11-25 18:16:15 +0100 | [diff] [blame] | 214 | config USB_FUNCTION_ACM |
| 215 | bool "Enable CDC ACM gadget" |
| 216 | select SYS_STDIO_DEREGISTER |
| 217 | select CIRCBUF |
| 218 | help |
| 219 | ACM serial link. This function can be used to create a stdio device to |
| 220 | interoperate with MS-Windows hosts or with the Linux-USB "cdc-acm" |
| 221 | driver. |
| 222 | |
Maxime Ripard | a8ad636 | 2017-09-06 22:54:52 +0200 | [diff] [blame] | 223 | endif # USB_GADGET_DOWNLOAD |
| 224 | |
Maxime Ripard | 6584977 | 2017-09-06 23:23:21 +0200 | [diff] [blame] | 225 | config USB_ETHER |
| 226 | bool "USB Ethernet Gadget" |
Alex Kiernan | cc92df4 | 2018-04-01 09:22:36 +0000 | [diff] [blame] | 227 | depends on NET |
Maxime Ripard | 4a553ca | 2017-09-22 09:51:37 +0200 | [diff] [blame] | 228 | default y if ARCH_SUNXI && USB_MUSB_GADGET |
Maxime Ripard | 6584977 | 2017-09-06 23:23:21 +0200 | [diff] [blame] | 229 | help |
| 230 | Creates an Ethernet network device through a USB peripheral |
| 231 | controller. This will create a network interface on both the device |
| 232 | (U-Boot) and the host (remote device) that can be used just like any |
| 233 | other nework interface. |
| 234 | It will bind on the peripheral USB controller, ignoring the USB hosts |
| 235 | controllers in the system. |
| 236 | |
| 237 | if USB_ETHER |
| 238 | |
Maxime Ripard | 7285f48 | 2017-09-07 08:46:14 +0200 | [diff] [blame] | 239 | choice |
| 240 | prompt "USB Ethernet Gadget Model" |
| 241 | default USB_ETH_RNDIS |
| 242 | help |
| 243 | There is several models (protocols) to implement Ethernet over USB |
| 244 | devices. The main ones are Microsoft's RNDIS and USB's CDC-Ethernet |
| 245 | (also called CDC-ECM). RNDIS is obviously compatible with Windows, |
| 246 | while CDC-ECM is not. Most other operating systems support both, so |
| 247 | if inter-operability is a concern, RNDIS is to be preferred. |
| 248 | |
| 249 | config USB_ETH_CDC |
| 250 | bool "CDC-ECM Protocol" |
| 251 | help |
| 252 | CDC (Communications Device Class) is the standard for Ethernet over |
| 253 | USB devices. While there's several alternatives, the most widely used |
| 254 | protocol is ECM (Ethernet Control Model). However, compatibility with |
| 255 | Windows is not that great. |
| 256 | |
| 257 | config USB_ETH_RNDIS |
| 258 | bool "RNDIS Protocol" |
| 259 | help |
| 260 | The RNDIS (Remote Network Driver Interface Specification) is a |
| 261 | Microsoft proprietary protocol to create an Ethernet device over USB. |
| 262 | Windows obviously supports it, as well as all the major operating |
| 263 | systems, so it's the best option for compatibility. |
| 264 | |
| 265 | endchoice |
| 266 | |
Ignacio Zamora | 3cf84bb | 2022-10-08 09:50:56 -0500 | [diff] [blame] | 267 | config USBNET_DEV_ADDR |
Mugunthan V N | 095b761 | 2016-11-18 11:09:15 +0530 | [diff] [blame] | 268 | string "USB Gadget Ethernet device mac address" |
| 269 | default "de:ad:be:ef:00:01" |
Maxime Ripard | d4ff531 | 2017-09-12 18:32:45 +0200 | [diff] [blame] | 270 | help |
| 271 | Ethernet MAC address of the device-side (ie. local board's) MAC |
| 272 | address of the usb_ether interface |
Mugunthan V N | 095b761 | 2016-11-18 11:09:15 +0530 | [diff] [blame] | 273 | |
Maxime Ripard | 764bf28 | 2017-09-06 22:53:43 +0200 | [diff] [blame] | 274 | config USBNET_HOST_ADDR |
| 275 | string "USB Gadget Ethernet host mac address" |
| 276 | default "de:ad:be:ef:00:00" |
| 277 | help |
| 278 | Ethernet MAC address of the host-side (ie. remote device's) MAC |
| 279 | address of the usb_ether interface |
| 280 | |
Maxime Ripard | 6584977 | 2017-09-06 23:23:21 +0200 | [diff] [blame] | 281 | endif # USB_ETHER |
| 282 | |
Sam Protsenko | fb115b1 | 2016-04-13 14:20:24 +0300 | [diff] [blame] | 283 | endif # USB_GADGET |
Marek Vasut | 98b9193 | 2023-05-06 16:42:39 +0200 | [diff] [blame] | 284 | |
| 285 | if SPL_USB_GADGET |
| 286 | |
| 287 | config SPL_USB_ETHER |
| 288 | bool "Support USB Ethernet drivers in SPL" |
| 289 | depends on SPL_NET |
| 290 | help |
| 291 | Enable access to the USB network subsystem and associated |
| 292 | drivers in SPL. This permits SPL to load U-Boot over a |
| 293 | USB-connected Ethernet link (such as a USB Ethernet dongle) rather |
| 294 | than from an onboard peripheral. Environment support is required |
| 295 | since the network stack uses a number of environment variables. |
| 296 | See also SPL_NET and SPL_ETH. |
| 297 | |
Marek Vasut | c2fc02b | 2023-05-06 16:42:40 +0200 | [diff] [blame] | 298 | if SPL_USB_ETHER |
| 299 | |
| 300 | choice |
| 301 | prompt "USB Ethernet Gadget Model in SPL" |
| 302 | default SPL_USB_ETH_RNDIS |
| 303 | help |
| 304 | There is several models (protocols) to implement Ethernet over USB |
| 305 | devices. The main ones are Microsoft's RNDIS and USB's CDC-Ethernet |
| 306 | (also called CDC-ECM). RNDIS is obviously compatible with Windows, |
| 307 | while CDC-ECM is not. Most other operating systems support both, so |
| 308 | if inter-operability is a concern, RNDIS is to be preferred. |
| 309 | |
| 310 | config SPL_USB_ETH_RNDIS |
| 311 | bool "RNDIS Protocol" |
| 312 | help |
| 313 | The RNDIS (Remote Network Driver Interface Specification) is a |
| 314 | Microsoft proprietary protocol to create an Ethernet device over USB. |
| 315 | Windows obviously supports it, as well as all the major operating |
| 316 | systems, so it's the best option for compatibility. |
| 317 | |
| 318 | endchoice |
| 319 | |
| 320 | endif # SPL_USB_ETHER |
| 321 | |
Marek Vasut | 98b9193 | 2023-05-06 16:42:39 +0200 | [diff] [blame] | 322 | config SPL_DFU |
| 323 | bool "Support DFU (Device Firmware Upgrade) in SPL" |
| 324 | select SPL_HASH |
| 325 | select SPL_DFU_NO_RESET |
| 326 | depends on SPL_RAM_SUPPORT |
| 327 | help |
| 328 | This feature enables the DFU (Device Firmware Upgrade) in SPL with |
| 329 | RAM memory device support. The ROM code will load and execute |
| 330 | the SPL built with dfu. The user can load binaries (u-boot/kernel) to |
| 331 | selected device partition from host-pc using dfu-utils. |
| 332 | This feature is useful to flash the binaries to factory or bare-metal |
| 333 | boards using USB interface. |
| 334 | |
| 335 | choice |
| 336 | bool "DFU device selection in SPL" |
| 337 | depends on SPL_DFU |
| 338 | |
| 339 | config SPL_DFU_RAM |
| 340 | bool "RAM device" |
| 341 | depends on SPL_DFU && SPL_RAM_SUPPORT |
| 342 | help |
| 343 | select RAM/DDR memory device for loading binary images |
| 344 | (u-boot/kernel) to the selected device partition using |
| 345 | DFU and execute the u-boot/kernel from RAM. |
| 346 | |
| 347 | endchoice |
| 348 | |
| 349 | config SPL_USB_SDP_SUPPORT |
| 350 | bool "Support SDP (Serial Download Protocol) in SPL" |
| 351 | depends on SPL_SERIAL |
| 352 | help |
| 353 | Enable Serial Download Protocol (SDP) device support in SPL. This |
| 354 | allows to download images into memory and execute (jump to) them |
| 355 | using the same protocol as implemented by the i.MX family's boot ROM. |
| 356 | |
| 357 | config SPL_SDP_USB_DEV |
| 358 | int "SDP USB controller index in SPL" |
| 359 | default 0 |
| 360 | depends on SPL_USB_SDP_SUPPORT |
| 361 | help |
| 362 | Some boards have USB controller other than 0. Define this option |
| 363 | so it can be used in compiled environment. |
| 364 | |
| 365 | endif # SPL_USB_GADGET |