From 3caa8f42e1f657177780be5a445502cbb9181e43 Mon Sep 17 00:00:00 2001 From: Marek Vasut Date: Fri, 26 Jun 2026 16:28:17 +0200 Subject: cmd: ums: Set Device Descriptor iSerial based on serial# env variable The DFU code currently sets the content of "serial#" environment variable into Device Descriptor iSerial field. This is useful when there are multiple devices connected to the same host PC and they have to be told apart. Replicate the same behavior in the UMS code. Example without serial# set, which is the original behavior: " u-boot=> ums 0 mmc 1 UMS: LUN 0, dev mmc 1, hwpart 0, sector 0x0, count 0x1d5a000 $ dmesg -w ... usb 5-2.3.7: New USB device found, idVendor=0525, idProduct=a4a5, bcdDevice=7e.a7 usb 5-2.3.7: New USB device strings: Mfr=1, Product=2, SerialNumber=0 usb 5-2.3.7: Product: USB download gadget usb 5-2.3.7: Manufacturer: Vendor <------------------------------- NOT HERE usb-storage 5-2.3.7:1.0: USB Mass Storage device detected ... $ lsusb -vd 0525:a4a5 Bus 005 Device 051: ID 0525:a4a5 Netchip Technology, Inc. Linux-USB File-backed Storage Gadget Negotiated speed: High Speed (480Mbps) Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 [unknown] bDeviceSubClass 0 [unknown] bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x0525 Netchip Technology, Inc. idProduct 0xa4a5 Linux-USB File-backed Storage Gadget bcdDevice 7e.a7 iManufacturer 1 Vendor iProduct 2 USB download gadget iSerial 0 <------------------------------- NOT HERE ... " Example with serial# set to 1234abcd, which is the optional new behavior: " u-boot=> setenv serial# 1234abcd <------------------------------ HERE u-boot=> ums 0 mmc 1 UMS: LUN 0, dev mmc 1, hwpart 0, sector 0x0, count 0x1d5a000 $ dmesg -w ... usb 5-2.3.7: New USB device found, idVendor=0525, idProduct=a4a5, bcdDevice=7e.a7 usb 5-2.3.7: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 5-2.3.7: Product: USB download gadget usb 5-2.3.7: Manufacturer: Vendor usb 5-2.3.7: SerialNumber: 1234abcd <--------------------------- HERE usb-storage 5-2.3.7:1.0: USB Mass Storage device detected ... $ lsusb -vd 0525:a4a5 Bus 005 Device 052: ID 0525:a4a5 Netchip Technology, Inc. Linux-USB File-backed Storage Gadget Negotiated speed: High Speed (480Mbps) Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 [unknown] bDeviceSubClass 0 [unknown] bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x0525 Netchip Technology, Inc. idProduct 0xa4a5 Linux-USB File-backed Storage Gadget bcdDevice 7e.a7 iManufacturer 1 Vendor iProduct 2 USB download gadget iSerial 3 1234abcd <-------------------------- HERE ... " Signed-off-by: Marek Vasut Reviewed-by: Mattijs Korpershoek Link: https://patch.msgid.link/20260626142840.305478-1-marex@nabladev.com Signed-off-by: Mattijs Korpershoek --- drivers/usb/gadget/f_mass_storage.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c index 87ed25e8bb3..7eb667c130d 100644 --- a/drivers/usb/gadget/f_mass_storage.c +++ b/drivers/usb/gadget/f_mass_storage.c @@ -241,6 +241,7 @@ #include #include +#include #include #include #include @@ -2662,8 +2663,15 @@ static int fsg_bind(struct usb_configuration *c, struct usb_function *f) struct usb_gadget *gadget = c->cdev->gadget; int i; struct usb_ep *ep; + char __maybe_unused *sn; fsg->gadget = gadget; + if (CONFIG_IS_ENABLED(ENV_SUPPORT)) { + sn = env_get("serial#"); + if (sn) + g_dnl_set_serialnumber(sn); + } + /* New interface */ i = usb_interface_id(c, f); if (i < 0) -- cgit v1.3.1