summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Bus/Usb/UsbBusPei
diff options
context:
space:
mode:
authorStar Zeng <star.zeng@intel.com>2014-09-15 09:33:16 +0000
committerlzeng14 <lzeng14@6f19259b-4bc3-4df7-8a09-765794883524>2014-09-15 09:33:16 +0000
commit04910ceb352b54fe8edac4c20d9a6515cd5fdad5 (patch)
treea2f7966b46cf4b3804ba373abca863809f5c39aa /MdeModulePkg/Bus/Usb/UsbBusPei
parentc4a7d20890eb3002926ec669fb229cea3b3528fb (diff)
downloadedk2-04910ceb352b54fe8edac4c20d9a6515cd5fdad5.zip
edk2-04910ceb352b54fe8edac4c20d9a6515cd5fdad5.tar.gz
edk2-04910ceb352b54fe8edac4c20d9a6515cd5fdad5.tar.bz2
MdeModulePkg XhciPei/UsbBusPei: Enhance code for better device compatibility.
1. Add delay after set device address and get configuration descriptor. 2. Sync the change at R15876 in XhciDxe to do not access transfer ring when endpoint is isochronous type or control type. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16105 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Bus/Usb/UsbBusPei')
-rw-r--r--MdeModulePkg/Bus/Usb/UsbBusPei/UsbPeim.c3
-rw-r--r--MdeModulePkg/Bus/Usb/UsbBusPei/UsbPeim.h11
2 files changed, 14 insertions, 0 deletions
diff --git a/MdeModulePkg/Bus/Usb/UsbBusPei/UsbPeim.c b/MdeModulePkg/Bus/Usb/UsbBusPei/UsbPeim.c
index 947864b..f350021 100644
--- a/MdeModulePkg/Bus/Usb/UsbBusPei/UsbPeim.c
+++ b/MdeModulePkg/Bus/Usb/UsbBusPei/UsbPeim.c
@@ -720,6 +720,7 @@ PeiConfigureUsbDevice (
DEBUG ((EFI_D_ERROR, "PeiUsbSetDeviceAddress Failed: %r\n", Status));
return Status;
}
+ MicroSecondDelay (USB_SET_DEVICE_ADDRESS_STALL);
PeiUsbDevice->DeviceAddress = *DeviceAddress;
@@ -750,6 +751,7 @@ PeiConfigureUsbDevice (
if (EFI_ERROR (Status)) {
return Status;
}
+ MicroSecondDelay (USB_GET_CONFIG_DESCRIPTOR_STALL);
Status = PeiUsbSetConfiguration (
PeiServices,
@@ -809,6 +811,7 @@ PeiUsbGetAllConfiguration (
DEBUG ((EFI_D_ERROR, "PeiUsbGet Config Descriptor First Failed\n"));
return Status;
}
+ MicroSecondDelay (USB_GET_CONFIG_DESCRIPTOR_STALL);
ConfigDesc = (EFI_USB_CONFIG_DESCRIPTOR *) PeiUsbDevice->ConfigurationData;
ConfigDescLength = ConfigDesc->TotalLength;
diff --git a/MdeModulePkg/Bus/Usb/UsbBusPei/UsbPeim.h b/MdeModulePkg/Bus/Usb/UsbBusPei/UsbPeim.h
index df459e7..dff8eeb 100644
--- a/MdeModulePkg/Bus/Usb/UsbBusPei/UsbPeim.h
+++ b/MdeModulePkg/Bus/Usb/UsbBusPei/UsbPeim.h
@@ -99,6 +99,17 @@ typedef struct {
//
#define USB_SET_PORT_POWER_STALL (2 * USB_BUS_1_MILLISECOND)
+//
+// Wait for set device address, refers to specification
+// [USB20-9.2.6.3, it says 2ms]
+//
+#define USB_SET_DEVICE_ADDRESS_STALL (2 * USB_BUS_1_MILLISECOND)
+
+//
+// Wait for get configuration descriptor, set by experience
+//
+#define USB_GET_CONFIG_DESCRIPTOR_STALL (1 * USB_BUS_1_MILLISECOND)
+
/**
Submits control transfer to a target USB device.