diff options
| author | salmonik <salmonik@tuta.io> | 2026-11-01 16:55:14 +0100 |
|---|---|---|
| committer | salmonik <salmonik@tuta.io> | 2026-11-01 16:55:14 +0100 |
| commit | e53161d6b9191533caeea0ef6148f247f4e22441 (patch) | |
| tree | 4b6b251fe9fccca6520f9c0efffb3bb6c06495e3 /DEBUG_NOTES.md | |
| parent | ehci: reserve the 64-bit QH/qTD layout (fixes hardware HSE) (diff) | |
| download | rs-dos-e53161d6b9191533caeea0ef6148f247f4e22441.tar.gz rs-dos-e53161d6b9191533caeea0ef6148f247f4e22441.zip | |
ehci: diagnostics + hardening for the port-not-enabled case
Second OptiPlex QR: the Host System Error is gone (the 64-bit QH/qTD layout
fix worked), but the SETUP qTD now halts with TBYTES=0, C_ERR=3 and no
XactErr/Babble/DBE -- a split transaction with no valid response. PORTSC
shows CCS=1, PP=1 but PED=0, i.e. the port never enabled, so the split has no
TT to address. On Intel PCH a healthy USB2 port shows the rate-matching hub
as high-speed (PED=1), so the next step is to see every port's state.
- settle 100 ms after powering ports and clear stale change bits before the
reset walk (RMHs come up slower than direct devices)
- retry the port reset once after settling
- log a clear line when a connected port remains disabled
- retry a failed full-speed device as low-speed (the PORTSC speed field is
only valid once the port is enabled)
- persistent bottom-row summary: controller count, caps64, USB legacy handoff
result, every connected port's PORTSC and the HID device count. A hardware
run without serial now reports the whole picture instead of one QR.
Diffstat (limited to 'DEBUG_NOTES.md')
| -rw-r--r-- | DEBUG_NOTES.md | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/DEBUG_NOTES.md b/DEBUG_NOTES.md index cd2b9ae..c9efdc1 100644 --- a/DEBUG_NOTES.md +++ b/DEBUG_NOTES.md | |||
| @@ -664,3 +664,38 @@ hardware exposed this. | |||
| 664 | tail): HID qTD at QH+0x80; control qTDs at +0x100/+0x140/+0x180 and the setup | 664 | tail): HID qTD at QH+0x80; control qTDs at +0x100/+0x140/+0x180 and the setup |
| 665 | packet at +0x1C0. The failure QR now prints `c64=` and the DMA bases | 665 | packet at +0x1C0. The failure QR now prints `c64=` and the DMA bases |
| 666 | (async/xfer/setup/buf) so the next run is self-describing. | 666 | (async/xfer/setup/buf) so the next run is self-describing. |
| 667 | |||
| 668 | ### OptiPlex 7010 — second hardware QR (after the 64-bit layout fix) | ||
| 669 | |||
| 670 | ``` | ||
| 671 | EHCI fail stage=1 t=20ms sp=0 dev=0 in=true len=18 c64=1 | ||
| 672 | cmd=00000021 sts=00008003 | ||
| 673 | prtsc0=0x00001005 hp=0x00003000 | ||
| 674 | qh1=48084000 qh2=40800000 nqtd=012081c0 | ||
| 675 | setup=00080e42 data=80120d80 stat=80008c80 | ||
| 676 | dma a=01208000 x=01208080 s=01208240 b=0120b000 | ||
| 677 | ``` | ||
| 678 | |||
| 679 | - `sts=0x8003`: USBINT|USBERRINT|ASS — **no HSE**, the 64-bit QH/qTD layout is | ||
| 680 | fixed and the controller runs. | ||
| 681 | - `stage=1`: the **SETUP qTD halted**, `setup=0x00080e42` -> TBYTES 0, | ||
| 682 | Halted, C_ERR still 3, no XactErr/Babble/DBE (a split that got no valid | ||
| 683 | response). | ||
| 684 | - `prtsc0=0x1005`: device connected + powered, **PED=0** (port never | ||
| 685 | enabled), speed field reads full-speed. | ||
| 686 | |||
| 687 | On Intel PCH the USB2 physical ports sit behind the integrated Rate Matching | ||
| 688 | Hub, so a healthy root port shows the hub as a **high-speed** device | ||
| 689 | (`PED=1`). PED=0 with a connected device means the port did not enable, and | ||
| 690 | a full/low-speed split has no valid TT to talk to -> SETUP halts. | ||
| 691 | |||
| 692 | Follow-up hardening in the driver: | ||
| 693 | - 100 ms power-up settle (RMHs are slow) and stale port-change bits cleared | ||
| 694 | before the reset walk | ||
| 695 | - one reset retry after a settle | ||
| 696 | - explicit log line when a connected port stays disabled | ||
| 697 | - low-speed retry for a failed full-speed device (the PORTSC speed field is | ||
| 698 | only trustworthy once the port is enabled) | ||
| 699 | - persistent bottom-row summary: per controller `64b=`/`leg=` handoff result, | ||
| 700 | every connected port's PORTSC, and the HID device count — hardware runs | ||
| 701 | without serial now show the whole picture, not just the first QR | ||
