blob: 010084ef7f38307718f79b621cf2763cb0ff3630 [file] [log] [blame]
Sam Protsenkob084b0c2016-03-25 16:39:47 +02001#
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
16menuconfig USB_GADGET
17 bool "USB Gadget Support"
Tom Rini5b9e6162021-07-09 10:11:56 -040018 depends on DM
19 select DM_USB
Miquel Raynal75d63472023-10-10 11:03:02 +020020 imply CMD_BIND
Sam Protsenkob084b0c2016-03-25 16:39:47 +020021 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 Protsenkofb115b12016-04-13 14:20:24 +030039
Marek Vasut98b91932023-05-06 16:42:39 +020040config 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 Protsenkofb115b12016-04-13 14:20:24 +030046if USB_GADGET
47
Maxime Ripard7f78b9d2017-09-07 08:58:08 +020048config USB_GADGET_MANUFACTURER
49 string "Vendor name of the USB device"
Maxim Schwalm562b9972023-02-14 19:35:30 +020050 default "NVIDIA" if ARCH_TEGRA
Maxime Ripard6375bd82017-09-12 19:41:15 +020051 default "Allwinner Technology" if ARCH_SUNXI
Jagan Tekic1153892019-11-19 13:56:14 +053052 default "Rockchip" if ARCH_ROCKCHIP
Maxime Ripard7f78b9d2017-09-07 08:58:08 +020053 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
58config USB_GADGET_VENDOR_NUM
59 hex "Vendor ID of the USB device"
Maxim Schwalm562b9972023-02-14 19:35:30 +020060 default 0x0955 if ARCH_TEGRA
Maxime Ripard6375bd82017-09-12 19:41:15 +020061 default 0x1f3a if ARCH_SUNXI
Jagan Tekiac6fb302019-11-19 13:56:15 +053062 default 0x2207 if ARCH_ROCKCHIP
Maxime Ripard7f78b9d2017-09-07 08:58:08 +020063 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
69config USB_GADGET_PRODUCT_NUM
70 hex "Product ID of the USB device"
Maxim Schwalm562b9972023-02-14 19:35:30 +020071 default 0x701a if ARCH_TEGRA
Maxime Ripard6375bd82017-09-12 19:41:15 +020072 default 0x1010 if ARCH_SUNXI
Jonas Karlmancec2b2a2024-03-10 18:50:57 +000073 default 0x110a if ROCKCHIP_RV1108
74 default 0x110b if ROCKCHIP_RV1126
Paweł Jarosz8e3898f2022-04-29 23:40:05 +020075 default 0x300a if ROCKCHIP_RK3066
Jonas Karlmancec2b2a2024-03-10 18:50:57 +000076 default 0x301a if ROCKCHIP_RK3036
77 default 0x310b if ROCKCHIP_RK3188
Jagan Teki668c56f2019-11-19 13:56:17 +053078 default 0x310c if ROCKCHIP_RK3128
Jonas Karlmancec2b2a2024-03-10 18:50:57 +000079 default 0x320a if ROCKCHIP_RK3288
80 default 0x320b if ROCKCHIP_RK322X
81 default 0x320c if ROCKCHIP_RK3328
82 default 0x330a if ROCKCHIP_RK3368
Jagan Teki5c8e27b2019-11-19 13:56:21 +053083 default 0x330c if ROCKCHIP_RK3399
Jonas Karlmancec2b2a2024-03-10 18:50:57 +000084 default 0x330d if ROCKCHIP_PX30
85 default 0x330e if ROCKCHIP_RK3308
86 default 0x350a if ROCKCHIP_RK3568
87 default 0x350b if ROCKCHIP_RK3588
Maxime Ripard7f78b9d2017-09-07 08:58:08 +020088 default 0x0
89 help
90 Product ID of the USB device emulated, reported to the host device.
91
Sam Protsenkob4a0bf72016-04-13 14:20:25 +030092config 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 Rae437689f2016-08-15 17:26:26 -070099config 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 Rinia7a1e6d2022-11-19 18:45:38 -0500104config USB_GADGET_AT91
105 bool "Atmel AT91 USB Gadget Controller"
106 depends on ARCH_AT91
107
Sam Protsenkob4a0bf72016-04-13 14:20:25 +0300108config 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
Vitaliy Vasylskyyd8e5fc82024-09-09 01:06:24 +0200117config USB_RENESAS_USBHS
118 bool "Renesas RCar USB2.0 HS controller (gadget mode)"
119 select USB_GADGET_DUALSPEED
120 help
121 The Renesas Rcar USB 2.0 high-speed gadget controller
122 integrated into Salvator and Kingfisher boards. Select this
123 option if you want the driver to operate in Peripheral mode.
124 This option requires USB_GADGET to be enabled.
125
Steve Raed7198f32016-06-07 15:35:21 -0700126if USB_GADGET_DWC2_OTG
127
Tom Rinifb9d4062022-06-15 12:03:52 -0400128config USB_GADGET_DWC2_OTG_PHY
129 bool "DesignWare USB2.0 HS OTG PHY"
130 help
131 Enable the DesignWare USB2.0 HS OTG physical device interface.
132
Steve Raed7198f32016-06-07 15:35:21 -0700133config USB_GADGET_DWC2_OTG_PHY_BUS_WIDTH_8
134 bool "DesignWare USB2.0 HS OTG controller 8-bit PHY bus width"
135 help
136 Set the Designware USB2.0 high-speed OTG controller
137 PHY interface width to 8 bits, rather than the default (16 bits).
138
139endif # USB_GADGET_DWC2_OTG
140
Peng Fana3669d22021-01-25 21:43:48 +0800141config USB_GADGET_OS_DESCRIPTORS
142 bool "USB OS Feature Descriptors support"
143 help
144 This is a porting patch from linux kernel: 37a3a533429e
145 ("usb: gadget: OS Feature Descriptors support"), the original commit
146 log see below:
147 There is a custom (non-USB IF) extension to the USB standard:
148 http://msdn.microsoft.com/library/windows/hardware/gg463182
149
Sam Protsenkob4a0bf72016-04-13 14:20:25 +0300150config CI_UDC
151 bool "ChipIdea device controller"
152 select USB_GADGET_DUALSPEED
153 help
154 Say Y here to enable device controller functionality of the
155 ChipIdea driver.
156
Jassi Brar9c5cb7f2020-07-29 20:51:27 -0500157config USB_GADGET_MAX3420
158 bool "MAX3420 USB Over SPI"
159 depends on DM_SPI
160 help
161 MAX3420, from MAXIM, implements USB-over-SPI Full-Speed device controller.
162
Sam Protsenkofb115b12016-04-13 14:20:24 +0300163config USB_GADGET_VBUS_DRAW
164 int "Maximum VBUS Power usage (2-500 mA)"
165 range 2 500
166 default 2
167 help
168 Some devices need to draw power from USB when they are
169 configured, perhaps to operate circuitry or to recharge
170 batteries. This is in addition to any local power supply,
171 such as an AC adapter or batteries.
172
173 Enter the maximum power your device draws through USB, in
174 milliAmperes. The permitted range of values is 2 - 500 mA;
175 0 mA would be legal, but can make some hosts misbehave.
176
177 This value will be used except for system-specific gadget
178 drivers that have more specific information.
179
Frank Lic2bdb582020-04-29 10:35:11 +0800180config SDP_LOADADDR
181 hex "Default load address at SDP_WRITE and SDP_JUMP"
Tom Rinif18679c2023-08-02 11:09:43 -0400182 default 0x0
Frank Lic2bdb582020-04-29 10:35:11 +0800183
Sam Protsenkob4a0bf72016-04-13 14:20:25 +0300184# Selected by UDC drivers that support high-speed operation.
185config USB_GADGET_DUALSPEED
186 bool
187
Sam Protsenko4d2439d2016-04-13 14:20:26 +0300188config USB_GADGET_DOWNLOAD
189 bool "Enable USB download gadget"
190 help
191 Composite USB download gadget support (g_dnl) for download functions.
192 This code works on top of composite gadget.
193
Sam Protsenkob706ffd2016-04-13 14:20:30 +0300194if USB_GADGET_DOWNLOAD
195
Lukasz Majewskie364e4b2018-01-29 19:25:54 +0100196config USB_FUNCTION_MASS_STORAGE
197 bool "Enable USB mass storage gadget"
198 help
199 Enable mass storage protocol support in U-Boot. It allows exporting
200 the eMMC/SD card content to HOST PC so it can be mounted.
201
Eddie Caif6460922017-12-15 08:17:10 +0800202config USB_FUNCTION_ROCKUSB
203 bool "Enable USB rockusb gadget"
204 help
205 Rockusb protocol is widely used by Rockchip SoC based devices. It can
206 read/write info, image to/from devices. This enables the USB part of
207 the rockusb gadget.for more detail about Rockusb protocol, please see
208 doc/README.rockusb
209
Lukasz Majewskib886ed92018-01-29 19:21:39 +0100210config USB_FUNCTION_SDP
211 bool "Enable USB SDP (Serial Download Protocol)"
212 help
213 Enable Serial Download Protocol (SDP) device support in U-Boot. This
214 allows to download images into memory and execute (jump to) them
215 using the same protocol as implemented by the i.MX family's boot ROM.
216
Lukasz Majewski3c32b422018-01-29 19:30:18 +0100217config USB_FUNCTION_THOR
218 bool "Enable USB THOR gadget"
219 help
220 Enable Tizen's THOR download protocol support in U-Boot. It
221 allows downloading images into memory and flash them to target device.
222
Loic Poulaineb78f832021-11-25 18:16:15 +0100223config USB_FUNCTION_ACM
224 bool "Enable CDC ACM gadget"
225 select SYS_STDIO_DEREGISTER
226 select CIRCBUF
227 help
228 ACM serial link. This function can be used to create a stdio device to
229 interoperate with MS-Windows hosts or with the Linux-USB "cdc-acm"
230 driver.
231
Maxime Riparda8ad6362017-09-06 22:54:52 +0200232endif # USB_GADGET_DOWNLOAD
233
Maxime Ripard65849772017-09-06 23:23:21 +0200234config USB_ETHER
235 bool "USB Ethernet Gadget"
Jerome Forissiere0f95512024-10-16 12:03:59 +0200236 depends on NET || NET_LWIP
Maxime Ripard4a553ca2017-09-22 09:51:37 +0200237 default y if ARCH_SUNXI && USB_MUSB_GADGET
Maxime Ripard65849772017-09-06 23:23:21 +0200238 help
239 Creates an Ethernet network device through a USB peripheral
240 controller. This will create a network interface on both the device
241 (U-Boot) and the host (remote device) that can be used just like any
242 other nework interface.
243 It will bind on the peripheral USB controller, ignoring the USB hosts
244 controllers in the system.
245
246if USB_ETHER
247
Maxime Ripard7285f482017-09-07 08:46:14 +0200248choice
249 prompt "USB Ethernet Gadget Model"
250 default USB_ETH_RNDIS
251 help
252 There is several models (protocols) to implement Ethernet over USB
253 devices. The main ones are Microsoft's RNDIS and USB's CDC-Ethernet
254 (also called CDC-ECM). RNDIS is obviously compatible with Windows,
255 while CDC-ECM is not. Most other operating systems support both, so
256 if inter-operability is a concern, RNDIS is to be preferred.
257
258config USB_ETH_CDC
259 bool "CDC-ECM Protocol"
260 help
261 CDC (Communications Device Class) is the standard for Ethernet over
262 USB devices. While there's several alternatives, the most widely used
263 protocol is ECM (Ethernet Control Model). However, compatibility with
264 Windows is not that great.
265
266config USB_ETH_RNDIS
267 bool "RNDIS Protocol"
268 help
269 The RNDIS (Remote Network Driver Interface Specification) is a
270 Microsoft proprietary protocol to create an Ethernet device over USB.
271 Windows obviously supports it, as well as all the major operating
272 systems, so it's the best option for compatibility.
273
274endchoice
275
Ignacio Zamora3cf84bb2022-10-08 09:50:56 -0500276config USBNET_DEV_ADDR
Mugunthan V N095b7612016-11-18 11:09:15 +0530277 string "USB Gadget Ethernet device mac address"
278 default "de:ad:be:ef:00:01"
Maxime Ripardd4ff5312017-09-12 18:32:45 +0200279 help
280 Ethernet MAC address of the device-side (ie. local board's) MAC
281 address of the usb_ether interface
Mugunthan V N095b7612016-11-18 11:09:15 +0530282
Maxime Ripard764bf282017-09-06 22:53:43 +0200283config USBNET_HOST_ADDR
284 string "USB Gadget Ethernet host mac address"
285 default "de:ad:be:ef:00:00"
286 help
287 Ethernet MAC address of the host-side (ie. remote device's) MAC
288 address of the usb_ether interface
289
Maxime Ripard65849772017-09-06 23:23:21 +0200290endif # USB_ETHER
291
Sam Protsenkofb115b12016-04-13 14:20:24 +0300292endif # USB_GADGET
Marek Vasut98b91932023-05-06 16:42:39 +0200293
294if SPL_USB_GADGET
295
296config SPL_USB_ETHER
297 bool "Support USB Ethernet drivers in SPL"
298 depends on SPL_NET
299 help
300 Enable access to the USB network subsystem and associated
301 drivers in SPL. This permits SPL to load U-Boot over a
302 USB-connected Ethernet link (such as a USB Ethernet dongle) rather
303 than from an onboard peripheral. Environment support is required
304 since the network stack uses a number of environment variables.
305 See also SPL_NET and SPL_ETH.
306
Marek Vasutc2fc02b2023-05-06 16:42:40 +0200307if SPL_USB_ETHER
308
309choice
310 prompt "USB Ethernet Gadget Model in SPL"
311 default SPL_USB_ETH_RNDIS
312 help
313 There is several models (protocols) to implement Ethernet over USB
314 devices. The main ones are Microsoft's RNDIS and USB's CDC-Ethernet
315 (also called CDC-ECM). RNDIS is obviously compatible with Windows,
316 while CDC-ECM is not. Most other operating systems support both, so
317 if inter-operability is a concern, RNDIS is to be preferred.
318
319config SPL_USB_ETH_RNDIS
320 bool "RNDIS Protocol"
321 help
322 The RNDIS (Remote Network Driver Interface Specification) is a
323 Microsoft proprietary protocol to create an Ethernet device over USB.
324 Windows obviously supports it, as well as all the major operating
325 systems, so it's the best option for compatibility.
326
327endchoice
328
329endif # SPL_USB_ETHER
330
Marek Vasut98b91932023-05-06 16:42:39 +0200331config SPL_DFU
332 bool "Support DFU (Device Firmware Upgrade) in SPL"
333 select SPL_HASH
334 select SPL_DFU_NO_RESET
Jerome Forissiera2a34902024-09-10 15:00:18 +0200335 select SPL_RAM_SUPPORT
Jerome Forissier1d28d542024-09-10 12:27:50 +0200336 depends on DFU_OVER_USB
Marek Vasut98b91932023-05-06 16:42:39 +0200337 help
338 This feature enables the DFU (Device Firmware Upgrade) in SPL with
339 RAM memory device support. The ROM code will load and execute
340 the SPL built with dfu. The user can load binaries (u-boot/kernel) to
341 selected device partition from host-pc using dfu-utils.
342 This feature is useful to flash the binaries to factory or bare-metal
343 boards using USB interface.
344
345choice
346 bool "DFU device selection in SPL"
347 depends on SPL_DFU
348
349config SPL_DFU_RAM
350 bool "RAM device"
351 depends on SPL_DFU && SPL_RAM_SUPPORT
352 help
353 select RAM/DDR memory device for loading binary images
354 (u-boot/kernel) to the selected device partition using
355 DFU and execute the u-boot/kernel from RAM.
356
357endchoice
358
359config SPL_USB_SDP_SUPPORT
360 bool "Support SDP (Serial Download Protocol) in SPL"
361 depends on SPL_SERIAL
362 help
363 Enable Serial Download Protocol (SDP) device support in SPL. This
364 allows to download images into memory and execute (jump to) them
365 using the same protocol as implemented by the i.MX family's boot ROM.
366
367config SPL_SDP_USB_DEV
368 int "SDP USB controller index in SPL"
369 default 0
370 depends on SPL_USB_SDP_SUPPORT
371 help
372 Some boards have USB controller other than 0. Define this option
373 so it can be used in compiled environment.
374
375endif # SPL_USB_GADGET