blob: 4621a6fd5e64f6cd4df574a30a98db6b236a5d6d [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
Steve Raed7198f32016-06-07 15:35:21 -0700117if USB_GADGET_DWC2_OTG
118
Tom Rinifb9d4062022-06-15 12:03:52 -0400119config 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 Raed7198f32016-06-07 15:35:21 -0700124config 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
130endif # USB_GADGET_DWC2_OTG
131
Peng Fana3669d22021-01-25 21:43:48 +0800132config 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 Protsenkob4a0bf72016-04-13 14:20:25 +0300141config 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 Brar9c5cb7f2020-07-29 20:51:27 -0500148config 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 Protsenkofb115b12016-04-13 14:20:24 +0300154config 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 Lic2bdb582020-04-29 10:35:11 +0800171config SDP_LOADADDR
172 hex "Default load address at SDP_WRITE and SDP_JUMP"
Tom Rinif18679c2023-08-02 11:09:43 -0400173 default 0x0
Frank Lic2bdb582020-04-29 10:35:11 +0800174
Sam Protsenkob4a0bf72016-04-13 14:20:25 +0300175# Selected by UDC drivers that support high-speed operation.
176config USB_GADGET_DUALSPEED
177 bool
178
Sam Protsenko4d2439d2016-04-13 14:20:26 +0300179config 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 Protsenkob706ffd2016-04-13 14:20:30 +0300185if USB_GADGET_DOWNLOAD
186
Lukasz Majewskie364e4b2018-01-29 19:25:54 +0100187config 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 Caif6460922017-12-15 08:17:10 +0800193config 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 Majewskib886ed92018-01-29 19:21:39 +0100201config 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 Majewski3c32b422018-01-29 19:30:18 +0100208config 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 Poulaineb78f832021-11-25 18:16:15 +0100214config 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 Riparda8ad6362017-09-06 22:54:52 +0200223endif # USB_GADGET_DOWNLOAD
224
Maxime Ripard65849772017-09-06 23:23:21 +0200225config USB_ETHER
226 bool "USB Ethernet Gadget"
Alex Kiernancc92df42018-04-01 09:22:36 +0000227 depends on NET
Maxime Ripard4a553ca2017-09-22 09:51:37 +0200228 default y if ARCH_SUNXI && USB_MUSB_GADGET
Maxime Ripard65849772017-09-06 23:23:21 +0200229 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
237if USB_ETHER
238
Maxime Ripard7285f482017-09-07 08:46:14 +0200239choice
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
249config 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
257config 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
265endchoice
266
Ignacio Zamora3cf84bb2022-10-08 09:50:56 -0500267config USBNET_DEV_ADDR
Mugunthan V N095b7612016-11-18 11:09:15 +0530268 string "USB Gadget Ethernet device mac address"
269 default "de:ad:be:ef:00:01"
Maxime Ripardd4ff5312017-09-12 18:32:45 +0200270 help
271 Ethernet MAC address of the device-side (ie. local board's) MAC
272 address of the usb_ether interface
Mugunthan V N095b7612016-11-18 11:09:15 +0530273
Maxime Ripard764bf282017-09-06 22:53:43 +0200274config 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 Ripard65849772017-09-06 23:23:21 +0200281endif # USB_ETHER
282
Sam Protsenkofb115b12016-04-13 14:20:24 +0300283endif # USB_GADGET
Marek Vasut98b91932023-05-06 16:42:39 +0200284
285if SPL_USB_GADGET
286
287config 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 Vasutc2fc02b2023-05-06 16:42:40 +0200298if SPL_USB_ETHER
299
300choice
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
310config 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
318endchoice
319
320endif # SPL_USB_ETHER
321
Marek Vasut98b91932023-05-06 16:42:39 +0200322config 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
335choice
336 bool "DFU device selection in SPL"
337 depends on SPL_DFU
338
339config 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
347endchoice
348
349config 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
357config 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
365endif # SPL_USB_GADGET