blob: 4eccc5e3370e12526654372866b1e3a00551ea81 [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
Sam Protsenkob084b0c2016-03-25 16:39:47 +020020 help
21 USB is a master/slave protocol, organized with one master
22 host (such as a PC) controlling up to 127 peripheral devices.
23 The USB hardware is asymmetric, which makes it easier to set up:
24 you can't connect a "to-the-host" connector to a peripheral.
25
26 U-Boot can run in the host, or in the peripheral. In both cases
27 you need a low level bus controller driver, and some software
28 talking to it. Peripheral controllers are often discrete silicon,
29 or are integrated with the CPU in a microcontroller. The more
30 familiar host side controllers have names like "EHCI", "OHCI",
31 or "UHCI", and are usually integrated into southbridges on PC
32 motherboards.
33
34 Enable this configuration option if you want to run U-Boot inside
35 a USB peripheral device. Configure one hardware driver for your
36 peripheral/device side bus controller, and a "gadget driver" for
37 your peripheral protocol.
Sam Protsenkofb115b12016-04-13 14:20:24 +030038
Marek Vasut98b91932023-05-06 16:42:39 +020039config SPL_USB_GADGET
40 bool "USB Gadget Support in SPL"
41 help
42 Enable USB Gadget API which allows to enable USB device functions
43 in SPL.
44
Sam Protsenkofb115b12016-04-13 14:20:24 +030045if USB_GADGET
46
Maxime Ripard7f78b9d2017-09-07 08:58:08 +020047config USB_GADGET_MANUFACTURER
48 string "Vendor name of the USB device"
Maxim Schwalm562b9972023-02-14 19:35:30 +020049 default "NVIDIA" if ARCH_TEGRA
Maxime Ripard6375bd82017-09-12 19:41:15 +020050 default "Allwinner Technology" if ARCH_SUNXI
Jagan Tekic1153892019-11-19 13:56:14 +053051 default "Rockchip" if ARCH_ROCKCHIP
Maxime Ripard7f78b9d2017-09-07 08:58:08 +020052 default "U-Boot"
53 help
54 Vendor name of the USB device emulated, reported to the host device.
55 This is usually either the manufacturer of the device or the SoC.
56
57config USB_GADGET_VENDOR_NUM
58 hex "Vendor ID of the USB device"
Maxim Schwalm562b9972023-02-14 19:35:30 +020059 default 0x0955 if ARCH_TEGRA
Maxime Ripard6375bd82017-09-12 19:41:15 +020060 default 0x1f3a if ARCH_SUNXI
Jagan Tekiac6fb302019-11-19 13:56:15 +053061 default 0x2207 if ARCH_ROCKCHIP
Maxime Ripard7f78b9d2017-09-07 08:58:08 +020062 default 0x0
63 help
64 Vendor ID of the USB device emulated, reported to the host device.
65 This is usually the board or SoC vendor's, unless you've registered
66 for one.
67
68config USB_GADGET_PRODUCT_NUM
69 hex "Product ID of the USB device"
Maxim Schwalm562b9972023-02-14 19:35:30 +020070 default 0x701a if ARCH_TEGRA
Maxime Ripard6375bd82017-09-12 19:41:15 +020071 default 0x1010 if ARCH_SUNXI
Jagan Teki1de44f02019-11-19 13:56:16 +053072 default 0x310a if ROCKCHIP_RK3036
Paweł Jarosz8e3898f2022-04-29 23:40:05 +020073 default 0x300a if ROCKCHIP_RK3066
Jagan Teki668c56f2019-11-19 13:56:17 +053074 default 0x310c if ROCKCHIP_RK3128
Jagan Teki1de44f02019-11-19 13:56:16 +053075 default 0x320a if ROCKCHIP_RK3229 || ROCKCHIP_RK3288
76 default 0x330a if ROCKCHIP_RK3328
Jagan Teki5c8e27b2019-11-19 13:56:21 +053077 default 0x330c if ROCKCHIP_RK3399
Maxime Ripard7f78b9d2017-09-07 08:58:08 +020078 default 0x0
79 help
80 Product ID of the USB device emulated, reported to the host device.
81
Sam Protsenkob4a0bf72016-04-13 14:20:25 +030082config USB_GADGET_ATMEL_USBA
83 bool "Atmel USBA"
84 select USB_GADGET_DUALSPEED
85 help
86 USBA is the integrated high-speed USB Device controller on
87 the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.
88
Steve Rae437689f2016-08-15 17:26:26 -070089config USB_GADGET_BCM_UDC_OTG_PHY
90 bool "Broadcom UDC OTG PHY"
91 help
92 Enable the Broadcom UDC OTG physical device interface.
93
Tom Rinia7a1e6d2022-11-19 18:45:38 -050094config USB_GADGET_AT91
95 bool "Atmel AT91 USB Gadget Controller"
96 depends on ARCH_AT91
97
Sam Protsenkob4a0bf72016-04-13 14:20:25 +030098config USB_GADGET_DWC2_OTG
99 bool "DesignWare USB2.0 HS OTG controller (gadget mode)"
100 select USB_GADGET_DUALSPEED
101 help
102 The Designware USB2.0 high-speed gadget controller
103 integrated into many SoCs. Select this option if you want the
104 driver to operate in Peripheral mode. This option requires
105 USB_GADGET to be enabled.
106
Steve Raed7198f32016-06-07 15:35:21 -0700107if USB_GADGET_DWC2_OTG
108
Tom Rinifb9d4062022-06-15 12:03:52 -0400109config USB_GADGET_DWC2_OTG_PHY
110 bool "DesignWare USB2.0 HS OTG PHY"
111 help
112 Enable the DesignWare USB2.0 HS OTG physical device interface.
113
Steve Raed7198f32016-06-07 15:35:21 -0700114config USB_GADGET_DWC2_OTG_PHY_BUS_WIDTH_8
115 bool "DesignWare USB2.0 HS OTG controller 8-bit PHY bus width"
116 help
117 Set the Designware USB2.0 high-speed OTG controller
118 PHY interface width to 8 bits, rather than the default (16 bits).
119
120endif # USB_GADGET_DWC2_OTG
121
Peng Fana3669d22021-01-25 21:43:48 +0800122config USB_GADGET_OS_DESCRIPTORS
123 bool "USB OS Feature Descriptors support"
124 help
125 This is a porting patch from linux kernel: 37a3a533429e
126 ("usb: gadget: OS Feature Descriptors support"), the original commit
127 log see below:
128 There is a custom (non-USB IF) extension to the USB standard:
129 http://msdn.microsoft.com/library/windows/hardware/gg463182
130
Sam Protsenkob4a0bf72016-04-13 14:20:25 +0300131config CI_UDC
132 bool "ChipIdea device controller"
133 select USB_GADGET_DUALSPEED
134 help
135 Say Y here to enable device controller functionality of the
136 ChipIdea driver.
137
Jassi Brar9c5cb7f2020-07-29 20:51:27 -0500138config USB_GADGET_MAX3420
139 bool "MAX3420 USB Over SPI"
140 depends on DM_SPI
141 help
142 MAX3420, from MAXIM, implements USB-over-SPI Full-Speed device controller.
143
Sam Protsenkofb115b12016-04-13 14:20:24 +0300144config USB_GADGET_VBUS_DRAW
145 int "Maximum VBUS Power usage (2-500 mA)"
146 range 2 500
147 default 2
148 help
149 Some devices need to draw power from USB when they are
150 configured, perhaps to operate circuitry or to recharge
151 batteries. This is in addition to any local power supply,
152 such as an AC adapter or batteries.
153
154 Enter the maximum power your device draws through USB, in
155 milliAmperes. The permitted range of values is 2 - 500 mA;
156 0 mA would be legal, but can make some hosts misbehave.
157
158 This value will be used except for system-specific gadget
159 drivers that have more specific information.
160
Frank Lic2bdb582020-04-29 10:35:11 +0800161config SDP_LOADADDR
162 hex "Default load address at SDP_WRITE and SDP_JUMP"
Tom Rinif18679c2023-08-02 11:09:43 -0400163 default 0x0
Frank Lic2bdb582020-04-29 10:35:11 +0800164
Sam Protsenkob4a0bf72016-04-13 14:20:25 +0300165# Selected by UDC drivers that support high-speed operation.
166config USB_GADGET_DUALSPEED
167 bool
168
Sam Protsenko4d2439d2016-04-13 14:20:26 +0300169config USB_GADGET_DOWNLOAD
170 bool "Enable USB download gadget"
171 help
172 Composite USB download gadget support (g_dnl) for download functions.
173 This code works on top of composite gadget.
174
Sam Protsenkob706ffd2016-04-13 14:20:30 +0300175if USB_GADGET_DOWNLOAD
176
Lukasz Majewskie364e4b2018-01-29 19:25:54 +0100177config USB_FUNCTION_MASS_STORAGE
178 bool "Enable USB mass storage gadget"
179 help
180 Enable mass storage protocol support in U-Boot. It allows exporting
181 the eMMC/SD card content to HOST PC so it can be mounted.
182
Eddie Caif6460922017-12-15 08:17:10 +0800183config USB_FUNCTION_ROCKUSB
184 bool "Enable USB rockusb gadget"
185 help
186 Rockusb protocol is widely used by Rockchip SoC based devices. It can
187 read/write info, image to/from devices. This enables the USB part of
188 the rockusb gadget.for more detail about Rockusb protocol, please see
189 doc/README.rockusb
190
Lukasz Majewskib886ed92018-01-29 19:21:39 +0100191config USB_FUNCTION_SDP
192 bool "Enable USB SDP (Serial Download Protocol)"
193 help
194 Enable Serial Download Protocol (SDP) device support in U-Boot. This
195 allows to download images into memory and execute (jump to) them
196 using the same protocol as implemented by the i.MX family's boot ROM.
197
Lukasz Majewski3c32b422018-01-29 19:30:18 +0100198config USB_FUNCTION_THOR
199 bool "Enable USB THOR gadget"
200 help
201 Enable Tizen's THOR download protocol support in U-Boot. It
202 allows downloading images into memory and flash them to target device.
203
Loic Poulaineb78f832021-11-25 18:16:15 +0100204config USB_FUNCTION_ACM
205 bool "Enable CDC ACM gadget"
206 select SYS_STDIO_DEREGISTER
207 select CIRCBUF
208 help
209 ACM serial link. This function can be used to create a stdio device to
210 interoperate with MS-Windows hosts or with the Linux-USB "cdc-acm"
211 driver.
212
Maxime Riparda8ad6362017-09-06 22:54:52 +0200213endif # USB_GADGET_DOWNLOAD
214
Maxime Ripard65849772017-09-06 23:23:21 +0200215config USB_ETHER
216 bool "USB Ethernet Gadget"
Alex Kiernancc92df42018-04-01 09:22:36 +0000217 depends on NET
Maxime Ripard4a553ca2017-09-22 09:51:37 +0200218 default y if ARCH_SUNXI && USB_MUSB_GADGET
Maxime Ripard65849772017-09-06 23:23:21 +0200219 help
220 Creates an Ethernet network device through a USB peripheral
221 controller. This will create a network interface on both the device
222 (U-Boot) and the host (remote device) that can be used just like any
223 other nework interface.
224 It will bind on the peripheral USB controller, ignoring the USB hosts
225 controllers in the system.
226
227if USB_ETHER
228
Maxime Ripard7285f482017-09-07 08:46:14 +0200229choice
230 prompt "USB Ethernet Gadget Model"
231 default USB_ETH_RNDIS
232 help
233 There is several models (protocols) to implement Ethernet over USB
234 devices. The main ones are Microsoft's RNDIS and USB's CDC-Ethernet
235 (also called CDC-ECM). RNDIS is obviously compatible with Windows,
236 while CDC-ECM is not. Most other operating systems support both, so
237 if inter-operability is a concern, RNDIS is to be preferred.
238
239config USB_ETH_CDC
240 bool "CDC-ECM Protocol"
241 help
242 CDC (Communications Device Class) is the standard for Ethernet over
243 USB devices. While there's several alternatives, the most widely used
244 protocol is ECM (Ethernet Control Model). However, compatibility with
245 Windows is not that great.
246
247config USB_ETH_RNDIS
248 bool "RNDIS Protocol"
249 help
250 The RNDIS (Remote Network Driver Interface Specification) is a
251 Microsoft proprietary protocol to create an Ethernet device over USB.
252 Windows obviously supports it, as well as all the major operating
253 systems, so it's the best option for compatibility.
254
255endchoice
256
Ignacio Zamora3cf84bb2022-10-08 09:50:56 -0500257config USBNET_DEV_ADDR
Mugunthan V N095b7612016-11-18 11:09:15 +0530258 string "USB Gadget Ethernet device mac address"
259 default "de:ad:be:ef:00:01"
Maxime Ripardd4ff5312017-09-12 18:32:45 +0200260 help
261 Ethernet MAC address of the device-side (ie. local board's) MAC
262 address of the usb_ether interface
Mugunthan V N095b7612016-11-18 11:09:15 +0530263
Maxime Ripard764bf282017-09-06 22:53:43 +0200264config USBNET_HOST_ADDR
265 string "USB Gadget Ethernet host mac address"
266 default "de:ad:be:ef:00:00"
267 help
268 Ethernet MAC address of the host-side (ie. remote device's) MAC
269 address of the usb_ether interface
270
Maxime Ripard65849772017-09-06 23:23:21 +0200271endif # USB_ETHER
272
Sam Protsenkofb115b12016-04-13 14:20:24 +0300273endif # USB_GADGET
Marek Vasut98b91932023-05-06 16:42:39 +0200274
275if SPL_USB_GADGET
276
277config SPL_USB_ETHER
278 bool "Support USB Ethernet drivers in SPL"
279 depends on SPL_NET
280 help
281 Enable access to the USB network subsystem and associated
282 drivers in SPL. This permits SPL to load U-Boot over a
283 USB-connected Ethernet link (such as a USB Ethernet dongle) rather
284 than from an onboard peripheral. Environment support is required
285 since the network stack uses a number of environment variables.
286 See also SPL_NET and SPL_ETH.
287
Marek Vasutc2fc02b2023-05-06 16:42:40 +0200288if SPL_USB_ETHER
289
290choice
291 prompt "USB Ethernet Gadget Model in SPL"
292 default SPL_USB_ETH_RNDIS
293 help
294 There is several models (protocols) to implement Ethernet over USB
295 devices. The main ones are Microsoft's RNDIS and USB's CDC-Ethernet
296 (also called CDC-ECM). RNDIS is obviously compatible with Windows,
297 while CDC-ECM is not. Most other operating systems support both, so
298 if inter-operability is a concern, RNDIS is to be preferred.
299
300config SPL_USB_ETH_RNDIS
301 bool "RNDIS Protocol"
302 help
303 The RNDIS (Remote Network Driver Interface Specification) is a
304 Microsoft proprietary protocol to create an Ethernet device over USB.
305 Windows obviously supports it, as well as all the major operating
306 systems, so it's the best option for compatibility.
307
308endchoice
309
310endif # SPL_USB_ETHER
311
Marek Vasut98b91932023-05-06 16:42:39 +0200312config SPL_DFU
313 bool "Support DFU (Device Firmware Upgrade) in SPL"
314 select SPL_HASH
315 select SPL_DFU_NO_RESET
316 depends on SPL_RAM_SUPPORT
317 help
318 This feature enables the DFU (Device Firmware Upgrade) in SPL with
319 RAM memory device support. The ROM code will load and execute
320 the SPL built with dfu. The user can load binaries (u-boot/kernel) to
321 selected device partition from host-pc using dfu-utils.
322 This feature is useful to flash the binaries to factory or bare-metal
323 boards using USB interface.
324
325choice
326 bool "DFU device selection in SPL"
327 depends on SPL_DFU
328
329config SPL_DFU_RAM
330 bool "RAM device"
331 depends on SPL_DFU && SPL_RAM_SUPPORT
332 help
333 select RAM/DDR memory device for loading binary images
334 (u-boot/kernel) to the selected device partition using
335 DFU and execute the u-boot/kernel from RAM.
336
337endchoice
338
339config SPL_USB_SDP_SUPPORT
340 bool "Support SDP (Serial Download Protocol) in SPL"
341 depends on SPL_SERIAL
342 help
343 Enable Serial Download Protocol (SDP) device support in SPL. This
344 allows to download images into memory and execute (jump to) them
345 using the same protocol as implemented by the i.MX family's boot ROM.
346
347config SPL_SDP_USB_DEV
348 int "SDP USB controller index in SPL"
349 default 0
350 depends on SPL_USB_SDP_SUPPORT
351 help
352 Some boards have USB controller other than 0. Define this option
353 so it can be used in compiled environment.
354
355endif # SPL_USB_GADGET