Reduced EHCI port reset delay to allow USB volumes to be ready for boot.

This at least fixes the problem on the commonly used Acer AspireOne ZG5,
where previously a USB boot from BIOS could transfer to an ATA boot from DOS
because DOS only saw the ATA disk when the time came to choose a boot volume.
This commit is contained in:
Neil Cafferkey 2023-03-30 03:06:19 +01:00
parent fe077ef3bf
commit 98f5955031
2 changed files with 7 additions and 2 deletions

View File

@ -1,5 +1,5 @@
##begin config
version 1.4
version 1.5
libbase base
libbasetype struct PCIDevice
libbasetypeextern struct Device

View File

@ -797,7 +797,12 @@ WORD cmdControlXFerRootHub(struct IOUsbHWReq *ioreq,
newval &= ~(EHPF_PORTSUSPEND|EHPF_PORTENABLE);
newval |= EHPF_PORTRESET;
WRITEREG32_LE(hc->hc_RegBase, portreg, newval);
uhwDelayMS(200, unit); /* Spec is 50ms, FreeBSD source suggests 200ms */
// Wait for reset to complete (spec is 50ms, FreeBSD source suggests 200ms, but
// we compromise to help USB volumes become available in time to be chosen as
// the boot device)
uhwDelayMS(125, unit);
newval = READREG32_LE(hc->hc_RegBase, portreg) & ~(EHPF_OVERCURRENTCHG|EHPF_ENABLECHANGE|EHPF_CONNECTCHANGE|EHPF_PORTSUSPEND|EHPF_PORTENABLE);
KPRINTF(10, ("EHCI: Reset=%s\n", newval & EHPF_PORTRESET ? "BAD!" : "GOOD"));
if (newval & EHPF_PORTRESET)