usb: gadget: qdss: Fix usage of usb_ep_autoconfig()

commit 59ff8848b2 ("usb: gadget: qdss: Use usb_ep_autoconfig()
instead of ss() variant") modified f_qdss to use the simple
usb_ep_autoconfig() helper, however this function has a caveat
that the passed in descriptor's wMaxPacketSize field gets updated
to be a maximum to 64 bytes. Hence, this function should not be
called with descriptors intended for high- or Superspeed usage
since they can support up to 512 or 1024 bytes for bulk endpoints.

Instead, call usb_ep_autoconfig() by passing in the FS descriptors,
and use the resulting bEndpointAddress assignment to update the
corresponding HS and SS descriptors.

Change-Id: I0b177d5d1075bc3e996f09a2db4699952cf0886d
Signed-off-by: Jack Pham <jackp@codeaurora.org>
This commit is contained in:
Jack Pham 2020-09-29 09:40:43 -07:00 committed by Gerrit - the friendly Code Review server
parent 6b76771b63
commit 832e170a2d

View File

@ -410,7 +410,7 @@ static int qdss_bind(struct usb_configuration *c, struct usb_function *f)
if (!strcmp(qdss->ch.name, USB_QDSS_CH_MDM))
qdss_data_ep_comp_desc.bMaxBurst = 0;
ep = usb_ep_autoconfig(gadget, &qdss_ss_data_desc);
ep = usb_ep_autoconfig(gadget, &qdss_fs_data_desc);
if (!ep) {
pr_err("%s: ep_autoconfig error\n", __func__);
goto clear_ep;
@ -422,7 +422,7 @@ static int qdss_bind(struct usb_configuration *c, struct usb_function *f)
msm_ep_set_endless(qdss->port.data, true);
if (qdss->debug_inface_enabled) {
ep = usb_ep_autoconfig(gadget, &qdss_ss_ctrl_in_desc);
ep = usb_ep_autoconfig(gadget, &qdss_fs_ctrl_in_desc);
if (!ep) {
pr_err("%s: ep_autoconfig error\n", __func__);
goto clear_ep;
@ -431,7 +431,7 @@ static int qdss_bind(struct usb_configuration *c, struct usb_function *f)
qdss->port.ctrl_in = ep;
ep->driver_data = qdss;
ep = usb_ep_autoconfig(gadget, &qdss_ss_ctrl_out_desc);
ep = usb_ep_autoconfig(gadget, &qdss_fs_ctrl_out_desc);
if (!ep) {
pr_err("%s: ep_autoconfig error\n", __func__);
goto clear_ep;
@ -449,24 +449,17 @@ static int qdss_bind(struct usb_configuration *c, struct usb_function *f)
}
}
/*update fs descriptors*/
qdss_fs_data_desc.bEndpointAddress =
qdss_ss_data_desc.bEndpointAddress;
if (qdss->debug_inface_enabled) {
qdss_fs_ctrl_in_desc.bEndpointAddress =
qdss_ss_ctrl_in_desc.bEndpointAddress;
qdss_fs_ctrl_out_desc.bEndpointAddress =
qdss_ss_ctrl_out_desc.bEndpointAddress;
}
/*update descriptors*/
/* update hs/ss descriptors */
qdss_hs_data_desc.bEndpointAddress =
qdss_ss_data_desc.bEndpointAddress;
qdss_ss_data_desc.bEndpointAddress =
qdss_fs_data_desc.bEndpointAddress;
if (qdss->debug_inface_enabled) {
qdss_hs_ctrl_in_desc.bEndpointAddress =
qdss_ss_ctrl_in_desc.bEndpointAddress;
qdss_ss_ctrl_in_desc.bEndpointAddress =
qdss_fs_ctrl_in_desc.bEndpointAddress;
qdss_hs_ctrl_out_desc.bEndpointAddress =
qdss_ss_ctrl_out_desc.bEndpointAddress;
qdss_ss_ctrl_out_desc.bEndpointAddress =
qdss_fs_ctrl_out_desc.bEndpointAddress;
}
if (qdss->debug_inface_enabled)