thor: fix invalid larger device descriptor than requested 46/230346/5 accepted/tizen_6.0_unified accepted/tizen_6.0_unified_hotfix accepted/tizen_7.0_unified accepted/tizen_7.0_unified_hotfix tizen_6.0 tizen_6.0_hotfix tizen_6.5 tizen_7.0 tizen_7.0_hotfix accepted/tizen/6.0/unified/20201030.103146 accepted/tizen/6.0/unified/20211029.040826 accepted/tizen/6.0/unified/20211029.081416 accepted/tizen/6.0/unified/hotfix/20201103.045159 accepted/tizen/7.0/unified/20221110.062937 accepted/tizen/7.0/unified/hotfix/20221116.111956 accepted/tizen/unified/20200410.122732 submit/tizen/20200410.050758 submit/tizen_6.0/20201029.205505 submit/tizen_6.0/20211029.144301 submit/tizen_6.0_hotfix/20201102.192905 submit/tizen_6.0_hotfix/20201103.115105 submit/tizen_6.5/20211028.164001 submit/tizen_6.5/20211029.140001 tizen_6.0.m2_release tizen_6.5.m2_release tizen_7.0_m2_release
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 04:13:05 +0000 (13:13 +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: