Context: MACHINE=ia64, CPU=Montecito
I'm running into a timing related MCA. In short:
...
umass0: <HEWLETT PACKARD INTEGRITY SERVER, class 0/0, rev 2.00/0.a1,
addr 2> on usbus2
umass0: SCSI over Bulk-Only; quirks = 0x0000
umass0:2:0:-1: Attached to scbus2
*** machine check abort ***
***********************************************************
* ROM Version : 01.05
* ROM Date : 11/06/2006
* BMC Version : 05.06
***********************************************************
...
When I enable EHCI debugging (level 99) this does not happen
and between the debug output, I see:
...
(probe0:umass-sim0:0:0:0): TEST UNIT READY. CDB: 0 0 0 0 0 0
(probe0:umass-sim0:0:0:0): CAM Status: SCSI Status Error
(probe0:umass-sim0:0:0:0): SCSI Status: Check Condition
(probe0:umass-sim0:0:0:0): UNIT ATTENTION asc:29,0
(probe0:umass-sim0:0:0:0): Power on, reset, or bus device reset occurred
(probe0:umass-sim0:0:0:0): Retrying Command (per Sense Data)
...
(probe0:umass-sim0:0:0:0): TEST UNIT READY. CDB: 0 0 0 0 0 0
(probe0:umass-sim0:0:0:0): CAM Status: SCSI Status Error
(probe0:umass-sim0:0:0:0): SCSI Status: Check Condition
(probe0:umass-sim0:0:0:0): NOT READY asc:3a,0
(probe0:umass-sim0:0:0:0): Medium not present
(probe0:umass-sim0:0:0:0): Unretryable error
...
ehcd0 at umass-sim0 bus 0 target 0 lun 0
cd0: <TEAC DV-28E-N C.6B> Removable CD-ROM SCSI-0 device
cd0: 40.000MB/s transfers
cd0: Attempt to query device size failed: NOT READY, Medium not present
...
MCA error dumps tells me that it's PCI related. I
suspect it's a race condition caused by the HCD
writing/updating operational state at the same
time that the HC is accessing it.
I have 2 instruction pointers. The first is one
where an interrupt last occured: IP=0xe0000000041cf810
(gdb) l *0xe0000000041cf810
0xe0000000041cf810 is in ehci_root_ctrl_done (/nfs/freebsd/base/head/
sys/dev/usb2/controller/ehci2.c:3307).
3302 std->err = USB_ERR_IOERROR;
3303 goto done;
3304 }
3305 v = EOREAD4(sc, EHCI_PORTSC(index));
3306 DPRINTFN(9, "port status=0x%04x\n", v);
3307 if (sc->sc_flags & EHCI_SCFLG_FORCESPEED) {
3308 if ((v & 0xc000000) == 0x8000000)
3309 i = UPS_HIGH_SPEED;
3310 else if ((v & 0xc000000) == 0x4000000)
3311 i = UPS_LOW_SPEED;
The second is when the MCA happened: IP=0xe00000000420d8b0
(gdb) l *0xe00000000420d8b0
0xe00000000420d8b0 is in usb2_transfer_start (/nfs/freebsd/base/head/
sys/dev/usb2/core/usb2_transfer.c:1577).
1572 {
1573 if (xfer == NULL) {
1574 /* transfer is gone */
1575 return;
1576 }
1577 USB_XFER_LOCK_ASSERT(xfer, MA_OWNED);
1578
1579 /* mark the USB transfer started */
1580
1581 if (!xfer->flags_int.started) {
The last access to the EHCI registers was through register 0x6c,
which corresponds to PORTSC(3). This matches the first IP.
The MCA is caused by an error on the PCI bus, most likely
an invalid inbound address:
**** MEMORY ERROR STRUCTURE ****
MEM_ERR_STRUCT_VALID 0x0000000000000201
**** PLATFORM_SPECIFIC_ERROR_INFO ****
VALIDATION_BITS 0x000000000000007b
PLATFORM_ERROR_STATUS 0x0000000000421200
PLATFORM_REQUESTOR_ID 0x0000000000000000
PLATFORM_RESPONDER_ID 0x0000000000000000
PLATFORM_TARGET_ID 0x000000003fde6000
PLATFORM_BUS_SPECIFIC_DATA 0x0000000000107628
PLATFORM_OEM_COMPONENT_ID[0] 0x000000004033103c
PLATFORM_OEM_COMPONENT_ID[1] 0x0000000000000000
PLATFORM_OEM_DEVICE_PATH 0x0000000000000000
.... HP_TITAN_PLATFORM_DATA .....
ERROR_LOG_EN 0x0000008000003dff
ERROR_SIG_EN 0x0000200000002117
ERROR_STATUS 0x0000000000001000
ERROR_OVFL 0x0000000000001000
ERROR_FIRST 0x0000000000000000
AP_ADDRa 0x0000000000000000
AP_ADDRb 0x0000000000000000
ST_ADDRa 0x0000000000000000
ST_ADDRb 0x0000000000000000
RT_ADDRa 0x0000000000000000
RT_ADDRb 0x0000000000000000
RP_ADDRa 0x0000000000000000
RP_ADDRb 0x0000000000000000
LE_ADDRa 0x503800003fde6000
LE_ADDRb 0xc020000000030118
ST_TO 0x00000000fffffff3
PT_TO 0x00000000ffffffff
RT_TO 0x000000009e8c6100
**** PCI BUS REGISTERS ****
PCI_BUS_ERROR_VALID 0x0000000000000001
**** PLATFORM_PCI_BUS_ERROR_INFO ****
VALIDATION_BITS 0x00000000000007cf
PCI_BUS_ERROR_STATUS 0x0000000000091200
PCI_BUS_ERROR_TYPE 0x0000000000000000
PCI_BUS_ID 0x0000000000000000
PCI_BUS_ADDRESS 0x00000000fc2fa5d0
PCI_BUS_DATA 0x0000000000000000
PCI_BUS_CMD 0x0000000000000000
PCI_BUS_REQUESTOR_ID 0x0000000000001000
PCI_BUS_COMPLETER_ID 0x00000000fed20000
PCI_BUS_TARGET_ID 0x00000000fc2fa5d0
PCI_BUS_OEM_ID[0] 0x000000000000122e
PCI_BUS_OEM_ID[1] 0x0000000000000000
.... HP_MERCURY_DATA ....
CELL_NUMBER 0x0000000000000000
SBA_NUMBER 0x0000000000000000
ROPE_NUMBER 0x0000000000000000
ERROR_STATUS 0x000000010000021a
ERROR_MASTER_ID_LOG 0x0000000000000008
INBOUND_ERR_ADDRESS 0x00000000fc2fa5d0
INBOUND_ERR_ATTRIBUTE 0x2000000000000000
COMPLETION_MESSAGE_LOG 0x0000000000000000
OUTBOUND_ERR_ADDRESS 0x0000000000000000
ERROR_CONFIG 0x0000000000001d50
STATUS_INFO_CONTROL 0x0000000000000048
FUNC_ID 0x0ab00146122e103c
CAPABILITIES_LIST 0x0f00023700200002
AGP_COMMAND 0x0000000000000000
PCIX_CAPABILITIES 0x0013ff0000010007
OLR_CONTROL 0x00023e1b00032403
CLOCK_CONTROL 0x0000000000000048
BUS_MODE 0x9da874ae36d58460
Some more background information:
\begin{log}
...
FreeBSD 8.0-CURRENT #28 r188699M: Mon Feb 16 14:51:49 PST 2009
mar...@hob.lan.xcllnt.net:/usr/obj/nfs/freebsd/base/head/sys/HOB
...
CPU: Montecito (1594.66-Mhz Itanium 2)
...
ohci0: <NEC uPD 9210 USB controller> mem 0x88032000-0x88032fff irq 17
at device 2.0 on pci0
ohci0: [ITHREAD]
usbus0: <NEC uPD 9210 USB controller> on ohci0
ohci1: <NEC uPD 9210 USB controller> mem 0x88031000-0x88031fff irq 18
at device 2.1 on pci0
ohci1: [ITHREAD]
usbus1: <NEC uPD 9210 USB controller> on ohci1
ehci0: <NEC uPD 720100 USB 2.0 controller> mem 0x88030000-0x880300ff
irq 19 at device 2.2 on pci0
ehci0: [ITHREAD]
usbus2: EHCI version 1.0
usbus2: <NEC uPD 720100 USB 2.0 controller> on ehci0
...
usbus0: 12Mbps Full Speed USB v1.0
usbus1: 12Mbps Full Speed USB v1.0
usbus2: 480Mbps High Speed USB v2.0
ugen0.1: <NEC> at usbus0
ushub0: <NEC OHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
ugen1.1: <NEC> at usbus1
ushub1: <NEC OHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus1
ugen2.1: <NEC> at usbus2
ushub2: <NEC EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus2
ushub1: 2 ports with 2 removable, self powered
ushub0: 3 ports with 3 removable, self powered
...
ushub2: 5 ports with 5 removable, self powered
ugen0.2: <HP> at usbus0
uhid0: <Virtual Keyboard> on usbus0
Symlink: uhid0 -> usb0.2.0.16
ums0: <Virtual Mouse> on usbus0
ugen2.2: <HEWLETT PACKARD> at usbus2
ums0: 3 buttons and [] coordinates
Symlink: ums0 -> usb0.2.1.17
...
\end{log}
--
Marcel Moolenaar
xcl...@mac.com
_______________________________________________
freebsd-usb@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"