mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-02-16 14:08:45 +00:00
usb: xhci: Fix max packet size for full speed device endpoint 0
In xhci_check_maxpacket(), the control endpoint 0 max packet size is wrongly taken from the interface's endpoint descriptor. However the default endpoint 0 does not come with an endpoint descriptor hence is not included in the interface structure. Change to use epmaxpacketin[0] instead. The other bug in this routine is that when setting max packet size to the xHC endpoint 0 context, it does not clear its previous value at all before programming a new one. Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
parent
932bb668bb
commit
b5aa857b95
1 changed files with 3 additions and 5 deletions
|
@ -546,16 +546,13 @@ int xhci_check_maxpacket(struct usb_device *udev)
|
|||
int max_packet_size;
|
||||
int hw_max_packet_size;
|
||||
int ret = 0;
|
||||
struct usb_interface *ifdesc;
|
||||
|
||||
ifdesc = &udev->config.if_desc[0];
|
||||
|
||||
out_ctx = ctrl->devs[slot_id]->out_ctx;
|
||||
xhci_inval_cache((uintptr_t)out_ctx->bytes, out_ctx->size);
|
||||
|
||||
ep_ctx = xhci_get_ep_ctx(ctrl, out_ctx, ep_index);
|
||||
hw_max_packet_size = MAX_PACKET_DECODED(le32_to_cpu(ep_ctx->ep_info2));
|
||||
max_packet_size = usb_endpoint_maxp(&ifdesc->ep_desc[0]);
|
||||
max_packet_size = udev->epmaxpacketin[0];
|
||||
if (hw_max_packet_size != max_packet_size) {
|
||||
debug("Max Packet Size for ep 0 changed.\n");
|
||||
debug("Max packet size in usb_device = %d\n", max_packet_size);
|
||||
|
@ -567,7 +564,8 @@ int xhci_check_maxpacket(struct usb_device *udev)
|
|||
ctrl->devs[slot_id]->out_ctx, ep_index);
|
||||
in_ctx = ctrl->devs[slot_id]->in_ctx;
|
||||
ep_ctx = xhci_get_ep_ctx(ctrl, in_ctx, ep_index);
|
||||
ep_ctx->ep_info2 &= cpu_to_le32(~MAX_PACKET_MASK);
|
||||
ep_ctx->ep_info2 &= cpu_to_le32(~((0xffff & MAX_PACKET_MASK)
|
||||
<< MAX_PACKET_SHIFT));
|
||||
ep_ctx->ep_info2 |= cpu_to_le32(MAX_PACKET(max_packet_size));
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Reference in a new issue