thor: fix invalid larger device descriptor than requested accepted/tizen_5.0_unified tizen_5.0 accepted/tizen/5.0/unified/20200413.005049 submit/tizen_5.0/20200410.050858
authorSeung-Woo Kim <sw0312.kim@samsung.com>
Thu, 9 Apr 2020 11:09:35 +0000 (20:09 +0900)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Fri, 10 Apr 2020 05:08:47 +0000 (14:08 +0900)
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 <sw0312.kim@samsung.com>
property/usb/drv_cdc.c

index b18a0d6..8596fa2 100644 (file)
@@ -17,6 +17,7 @@
 #include <asm/arch/virtual_com.h>
 #include <asm/arch/packet.h>
 #include <asm/arch/usb20_reg_v3.h>
+#include <linux/usb/ch9.h>
 
 #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: