From b25c7f53daffa02d3d5fe76fc6138ca7cbf57556 Mon Sep 17 00:00:00 2001 From: Seung-Woo Kim Date: Thu, 9 Apr 2020 20:09:35 +0900 Subject: [PATCH] thor: fix invalid larger device descriptor than requested New Linux kernel xhci hub uses new usb descriptor scheme first for high speed usb peripheral device and it requests 8 bytes usb device descriptor and then 18 bytes full usb device descriptor but thor cdc-acm gadget always sends 18 bytes full usb device descriptor, so thor download mode is failed to recognize for linux host with new scheme. Fix the invalid larger device descriptor than requested by sending only requested bytes. Change-Id: I9ada9831a9667512f372d3a93d196fa8788f11b5 Ref: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=48fc7dbd52c0559647291f33a10ccdc6cdbe4c72 Signed-off-by: Seung-Woo Kim --- property/usb/drv_cdc.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/property/usb/drv_cdc.c b/property/usb/drv_cdc.c index b18a0d6..8596fa2 100644 --- a/property/usb/drv_cdc.c +++ b/property/usb/drv_cdc.c @@ -17,6 +17,7 @@ #include #include #include +#include #define USB_DEBUG @@ -259,7 +260,13 @@ LOCAL void usb_get_descriptor (USB_REQUEST_1_U *request1, USB_REQUEST_2_U *reque case USB_DEVICE_DESCRIPTOR_TYPE: send_data = (uint8 *) thor_get_device_desc(enum_speed); - EPI0_config (0x12, 0x1, TRUE, (uint32 *) send_data); + /* + * only send less or equal than requested length. + * no need to care about larger reqeust than possible + * descriptor length because of zero-length packet + * generated by usb controller + */ + EPI0_config (min(USB_DT_DEVICE_SIZE, length), 0x1, TRUE, (uint32 *) send_data); break; case USB_CONFIGURATION_DESCRIPTOR_TYPE: -- 2.7.4