summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/usb_device.c8
-rw-r--r--include/drivers/usb_device.h2
-rw-r--r--plat/st/stm32mp1/stm32mp1_usb_dfu.c2
3 files changed, 9 insertions, 3 deletions
diff --git a/drivers/usb/usb_device.c b/drivers/usb/usb_device.c
index 7fcb39b15..7dd3f6069 100644
--- a/drivers/usb/usb_device.c
+++ b/drivers/usb/usb_device.c
@@ -74,7 +74,6 @@ static void usb_core_get_desc(struct usb_handle *pdev, struct usb_setup_req *req
case USB_DESC_TYPE_CONFIGURATION:
pbuf = pdev->desc->get_config_desc(&len);
- pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
break;
case USB_DESC_TYPE_STRING:
@@ -116,8 +115,11 @@ static void usb_core_get_desc(struct usb_handle *pdev, struct usb_setup_req *req
break;
case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION:
- pbuf = pdev->desc->get_config_desc(&len);
- pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION;
+ if (pdev->desc->get_other_speed_config_desc == NULL) {
+ usb_core_ctl_error(pdev);
+ return;
+ }
+ pbuf = pdev->desc->get_other_speed_config_desc(&len);
break;
default:
diff --git a/include/drivers/usb_device.h b/include/drivers/usb_device.h
index e21e3155d..8fdb6ae13 100644
--- a/include/drivers/usb_device.h
+++ b/include/drivers/usb_device.h
@@ -166,6 +166,8 @@ struct usb_desc {
uint8_t *(*get_usr_desc)(uint8_t index, uint16_t *length);
uint8_t *(*get_config_desc)(uint16_t *length);
uint8_t *(*get_device_qualifier_desc)(uint16_t *length);
+ /* optional: high speed capable device operating at its other speed */
+ uint8_t *(*get_other_speed_config_desc)(uint16_t *length);
};
/* USB Device handle structure */
diff --git a/plat/st/stm32mp1/stm32mp1_usb_dfu.c b/plat/st/stm32mp1/stm32mp1_usb_dfu.c
index 051d43532..70fbba6db 100644
--- a/plat/st/stm32mp1/stm32mp1_usb_dfu.c
+++ b/plat/st/stm32mp1/stm32mp1_usb_dfu.c
@@ -338,6 +338,8 @@ static const struct usb_desc dfu_desc = {
.get_usr_desc = stm32mp1_get_usr_desc,
.get_config_desc = stm32mp1_get_config_desc,
.get_device_qualifier_desc = stm32mp1_get_qualifier_desc,
+ /* only HS is supported, as ROM code */
+ .get_other_speed_config_desc = NULL,
};
static struct usb_handle usb_core_handle;