* [PATCH v1] usb: xhci: Check return value of wait for TRB_TRANSFER event @ 2023-10-17 6:20 Minda Chen 2023-10-17 11:20 ` Marek Vasut 0 siblings, 1 reply; 10+ messages in thread From: Minda Chen @ 2023-10-17 6:20 UTC (permalink / raw) To: Bin Meng, Marek Vasut; +Cc: u-boot, Minda Chen xhci_wait_for_event() waiting TRB_TRANSFER event may return NULL. Checking the return value to avoid crash. Signed-off-by: Minda Chen <minda.chen@starfivetech.com> --- drivers/usb/host/xhci-ring.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index c8260cbdf9..5f02ff0769 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -544,6 +544,8 @@ static void abort_td(struct usb_device *udev, int ep_index) xhci_queue_command(ctrl, 0, udev->slot_id, ep_index, TRB_STOP_RING); event = xhci_wait_for_event(ctrl, TRB_TRANSFER); + if (!event) + return; field = le32_to_cpu(event->trans_event.flags); BUG_ON(TRB_TO_SLOT_ID(field) != udev->slot_id); BUG_ON(TRB_TO_EP_INDEX(field) != ep_index); -- 2.17.1 ^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v1] usb: xhci: Check return value of wait for TRB_TRANSFER event 2023-10-17 6:20 [PATCH v1] usb: xhci: Check return value of wait for TRB_TRANSFER event Minda Chen @ 2023-10-17 11:20 ` Marek Vasut 2023-10-18 1:22 ` Minda Chen 0 siblings, 1 reply; 10+ messages in thread From: Marek Vasut @ 2023-10-17 11:20 UTC (permalink / raw) To: Minda Chen, Bin Meng; +Cc: u-boot On 10/17/23 08:20, Minda Chen wrote: > xhci_wait_for_event() waiting TRB_TRANSFER event may return > NULL. Checking the return value to avoid crash. > > Signed-off-by: Minda Chen <minda.chen@starfivetech.com> How did you trigger this error ? Is there a reproducer ? Details please ... ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1] usb: xhci: Check return value of wait for TRB_TRANSFER event 2023-10-17 11:20 ` Marek Vasut @ 2023-10-18 1:22 ` Minda Chen 2023-10-18 2:35 ` Marek Vasut 0 siblings, 1 reply; 10+ messages in thread From: Minda Chen @ 2023-10-18 1:22 UTC (permalink / raw) To: Marek Vasut, Bin Meng; +Cc: u-boot On 2023/10/17 19:20, Marek Vasut wrote: > On 10/17/23 08:20, Minda Chen wrote: >> xhci_wait_for_event() waiting TRB_TRANSFER event may return >> NULL. Checking the return value to avoid crash. >> >> Signed-off-by: Minda Chen <minda.chen@starfivetech.com> > > How did you trigger this error ? Is there a reproducer ? Details please ... While Scanning a lenovo usb2.0 udisk, not 100 % reproduce This is log. StarFive # usb reset resetting USB... Bus xhci_pci: Register 5000420 NbrPorts 5 Starting the controller USB XHCI 1.00 scanning bus xhci_pci for devices... WARN halted endpoint, queueing URB anyway. Unexpected XHCI event TRB, skipping... (f77141f0 00000000 13000000 02008401) Unhandled exception: Load access fault EPC: 00000000f7f563c6 RA: 00000000f7f563c6 TVAL: 000000000000000c EPC: 000000004024a3c6 RA: 000000004024a3c6 reloc adjusted SP: 00000000f76f9a60 GP: 00000000f76fbdd0 TP: 0000000000000001 T0: 00000000f76fa168 T1: 00000000000000ff T2: 0000000000000016 S0: 00000000f7712fc0 S1: 00000000f76fb100 A0: 0000000000000000 A1: 0000000000000000 A2: 00000000f77145d0 A3: 00000000f7714590 A4: 0000000000000000 A5: 0000000000000020 A6: 000000000000000f A7: 0000000000000100 S2: 0000000000000000 S3: 0000000000000000 S4: 00000000f7717050 S5: 00000000f7717050 S6: 0000000080000383 S7: 00000000f76f9dc0 S8: 00000000000000ff S9: 0000000000000001 S10: 00000000f76f9ba0 S11: 0000000000010c04 T3: 0000000000000010 T4: 0000000000000006 T5: 0000000000000080 T6: 00000000f76fa231 Code: 842a f0ef d75f 0593 0200 8522 f0ef ebdf (455c) This is USB info and storage info StarFive # 1: Hub, USB Revision 3.0 - U-Boot XHCI Host Controller - Class: Hub - PacketSize: 512 Configurations: 1 - Vendor: 0x0000 Product 0x0000 Version 1.0 Configuration: 1 - Interfaces: 1 Self Powered 0mA Interface: 0 - Alternate Setting 0, Endpoints: 1 - Class Hub - Endpoint 1 In Interrupt MaxPacket 8 Interval 255ms 2: Hub, USB Revision 2.10 - USB2.0 Hub - Class: Hub - PacketSize: 64 Configurations: 1 - Vendor: 0x2109 Product 0x3431 Version 4.32 Configuration: 1 - Interfaces: 1 Self Powered Remote Wakeup 100mA Interface: 0 - Alternate Setting 0, Endpoints: 1 - Class Hub - Endpoint 1 In Interrupt MaxPacket 1 Interval 12ms 3: Mass Storage, USB Revision 2.0 - Generic Mass Storage 31097778XB15113405 - Class: (from Interface) Mass Storage - PacketSize: 64 Configurations: 1 - Vendor: 0x17ef Product 0x38ac Version 1.0 Configuration: 1 - Interfaces: 1 Bus Powered 200mA Interface: 0 - Alternate Setting 0, Endpoints: 2 - Class Mass Storage, Transp. SCSI, Bulk only - Endpoint 1 Out Bulk MaxPacket 512 - Endpoint 2 In Bulk MaxPacket 512 StarFive # usb storage Device 0: Vendor: Rev: 8.07 Prod: Lenovo SX1 64G Type: Removable Hard Disk Capacity: 60000.0 MB = 58.5 GB (122880000 x 512) StarFive # ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1] usb: xhci: Check return value of wait for TRB_TRANSFER event 2023-10-18 1:22 ` Minda Chen @ 2023-10-18 2:35 ` Marek Vasut 2023-10-18 3:46 ` Minda Chen 0 siblings, 1 reply; 10+ messages in thread From: Marek Vasut @ 2023-10-18 2:35 UTC (permalink / raw) To: Minda Chen, Bin Meng; +Cc: u-boot On 10/18/23 03:22, Minda Chen wrote: > > > On 2023/10/17 19:20, Marek Vasut wrote: >> On 10/17/23 08:20, Minda Chen wrote: >>> xhci_wait_for_event() waiting TRB_TRANSFER event may return >>> NULL. Checking the return value to avoid crash. >>> >>> Signed-off-by: Minda Chen <minda.chen@starfivetech.com> >> >> How did you trigger this error ? Is there a reproducer ? Details please ... > > While Scanning a lenovo usb2.0 udisk, not 100 % reproduce Can you include Linux lsusb -vvv output for this device and include that information in the commit message ? (or the U-Boot info below, that works too, just please add it into the commit message, it is important for future reference). > This is log. > > StarFive # usb reset > resetting USB... > Bus xhci_pci: Register 5000420 NbrPorts 5 > Starting the controller > USB XHCI 1.00 > scanning bus xhci_pci for devices... WARN halted endpoint, queueing URB anyway. > Unexpected XHCI event TRB, skipping... (f77141f0 00000000 13000000 02008401) > Unhandled exception: Load access fault > EPC: 00000000f7f563c6 RA: 00000000f7f563c6 TVAL: 000000000000000c > EPC: 000000004024a3c6 RA: 000000004024a3c6 reloc adjusted Where does the crash point to in code, can you disassemble the PC pointer ? (or maybe you can use scripts/decodecode I think) > SP: 00000000f76f9a60 GP: 00000000f76fbdd0 TP: 0000000000000001 > T0: 00000000f76fa168 T1: 00000000000000ff T2: 0000000000000016 > S0: 00000000f7712fc0 S1: 00000000f76fb100 A0: 0000000000000000 > A1: 0000000000000000 A2: 00000000f77145d0 A3: 00000000f7714590 > A4: 0000000000000000 A5: 0000000000000020 A6: 000000000000000f > A7: 0000000000000100 S2: 0000000000000000 S3: 0000000000000000 > S4: 00000000f7717050 S5: 00000000f7717050 S6: 0000000080000383 > S7: 00000000f76f9dc0 S8: 00000000000000ff S9: 0000000000000001 > S10: 00000000f76f9ba0 S11: 0000000000010c04 T3: 0000000000000010 > T4: 0000000000000006 T5: 0000000000000080 T6: 00000000f76fa231 [...] > 3: Mass Storage, USB Revision 2.0 > - Generic Mass Storage 31097778XB15113405 > - Class: (from Interface) Mass Storage > - PacketSize: 64 Configurations: 1 > - Vendor: 0x17ef Product 0x38ac Version 1.0 > Configuration: 1 > - Interfaces: 1 Bus Powered 200mA > Interface: 0 > - Alternate Setting 0, Endpoints: 2 > - Class Mass Storage, Transp. SCSI, Bulk only > - Endpoint 1 Out Bulk MaxPacket 512 > - Endpoint 2 In Bulk MaxPacket 512 > > StarFive # usb storage > Device 0: Vendor: Rev: 8.07 Prod: Lenovo SX1 64G > Type: Removable Hard Disk > Capacity: 60000.0 MB = 58.5 GB (122880000 x 512) [...] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1] usb: xhci: Check return value of wait for TRB_TRANSFER event 2023-10-18 2:35 ` Marek Vasut @ 2023-10-18 3:46 ` Minda Chen 2023-10-18 10:11 ` Marek Vasut 0 siblings, 1 reply; 10+ messages in thread From: Minda Chen @ 2023-10-18 3:46 UTC (permalink / raw) To: Marek Vasut, Bin Meng; +Cc: u-boot On 2023/10/18 10:35, Marek Vasut wrote: > On 10/18/23 03:22, Minda Chen wrote: >> >> >> On 2023/10/17 19:20, Marek Vasut wrote: >>> On 10/17/23 08:20, Minda Chen wrote: >>>> xhci_wait_for_event() waiting TRB_TRANSFER event may return >>>> NULL. Checking the return value to avoid crash. >>>> >>>> Signed-off-by: Minda Chen <minda.chen@starfivetech.com> >>> >>> How did you trigger this error ? Is there a reproducer ? Details please ... >> >> While Scanning a lenovo usb2.0 udisk, not 100 % reproduce > > Can you include Linux > > lsusb -vvv > > output for this device and include that information in the commit message ? (or the U-Boot info below, that works too, just please add it into the commit message, it is important for future reference). > OK, I will add lsusb -vvv Linux udisk message and crash dump info to commit message >> This is log. >> >> StarFive # usb reset >> resetting USB... >> Bus xhci_pci: Register 5000420 NbrPorts 5 >> Starting the controller >> USB XHCI 1.00 >> scanning bus xhci_pci for devices... WARN halted endpoint, queueing URB anyway. >> Unexpected XHCI event TRB, skipping... (f77141f0 00000000 13000000 02008401) >> Unhandled exception: Load access fault >> EPC: 00000000f7f563c6 RA: 00000000f7f563c6 TVAL: 000000000000000c >> EPC: 000000004024a3c6 RA: 000000004024a3c6 reloc adjusted > > Where does the crash point to in code, can you disassemble the PC pointer ? (or maybe you can use scripts/decodecode I think) > OK, I will add EPC pointer disassemble to commit message >> SP: 00000000f76f9a60 GP: 00000000f76fbdd0 TP: 0000000000000001 >> T0: 00000000f76fa168 T1: 00000000000000ff T2: 0000000000000016 >> S0: 00000000f7712fc0 S1: 00000000f76fb100 A0: 0000000000000000 >> A1: 0000000000000000 A2: 00000000f77145d0 A3: 00000000f7714590 >> A4: 0000000000000000 A5: 0000000000000020 A6: 000000000000000f >> A7: 0000000000000100 S2: 0000000000000000 S3: 0000000000000000 >> S4: 00000000f7717050 S5: 00000000f7717050 S6: 0000000080000383 >> S7: 00000000f76f9dc0 S8: 00000000000000ff S9: 0000000000000001 >> S10: 00000000f76f9ba0 S11: 0000000000010c04 T3: 0000000000000010 >> T4: 0000000000000006 T5: 0000000000000080 T6: 00000000f76fa231 > > [...] > >> 3: Mass Storage, USB Revision 2.0 >> - Generic Mass Storage 31097778XB15113405 >> - Class: (from Interface) Mass Storage >> - PacketSize: 64 Configurations: 1 >> - Vendor: 0x17ef Product 0x38ac Version 1.0 >> Configuration: 1 >> - Interfaces: 1 Bus Powered 200mA >> Interface: 0 >> - Alternate Setting 0, Endpoints: 2 >> - Class Mass Storage, Transp. SCSI, Bulk only >> - Endpoint 1 Out Bulk MaxPacket 512 >> - Endpoint 2 In Bulk MaxPacket 512 >> >> StarFive # usb storage >> Device 0: Vendor: Rev: 8.07 Prod: Lenovo SX1 64G >> Type: Removable Hard Disk >> Capacity: 60000.0 MB = 58.5 GB (122880000 x 512) > > [...] ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1] usb: xhci: Check return value of wait for TRB_TRANSFER event 2023-10-18 3:46 ` Minda Chen @ 2023-10-18 10:11 ` Marek Vasut 2023-10-18 10:16 ` Minda Chen 0 siblings, 1 reply; 10+ messages in thread From: Marek Vasut @ 2023-10-18 10:11 UTC (permalink / raw) To: Minda Chen, Bin Meng; +Cc: u-boot On 10/18/23 05:46, Minda Chen wrote: > > > On 2023/10/18 10:35, Marek Vasut wrote: >> On 10/18/23 03:22, Minda Chen wrote: >>> >>> >>> On 2023/10/17 19:20, Marek Vasut wrote: >>>> On 10/17/23 08:20, Minda Chen wrote: >>>>> xhci_wait_for_event() waiting TRB_TRANSFER event may return >>>>> NULL. Checking the return value to avoid crash. >>>>> >>>>> Signed-off-by: Minda Chen <minda.chen@starfivetech.com> >>>> >>>> How did you trigger this error ? Is there a reproducer ? Details please ... >>> >>> While Scanning a lenovo usb2.0 udisk, not 100 % reproduce >> >> Can you include Linux >> >> lsusb -vvv >> >> output for this device and include that information in the commit message ? (or the U-Boot info below, that works too, just please add it into the commit message, it is important for future reference). >> > OK, I will add lsusb -vvv Linux udisk message and crash dump info to commit message Thank you >>> This is log. >>> >>> StarFive # usb reset >>> resetting USB... >>> Bus xhci_pci: Register 5000420 NbrPorts 5 >>> Starting the controller >>> USB XHCI 1.00 >>> scanning bus xhci_pci for devices... WARN halted endpoint, queueing URB anyway. >>> Unexpected XHCI event TRB, skipping... (f77141f0 00000000 13000000 02008401) >>> Unhandled exception: Load access fault >>> EPC: 00000000f7f563c6 RA: 00000000f7f563c6 TVAL: 000000000000000c >>> EPC: 000000004024a3c6 RA: 000000004024a3c6 reloc adjusted >> >> Where does the crash point to in code, can you disassemble the PC pointer ? (or maybe you can use scripts/decodecode I think) >> > OK, I will add EPC pointer disassemble to commit message This part probably doesn't need to be in the commit message. I'd like to know where the crash occurred in the code. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1] usb: xhci: Check return value of wait for TRB_TRANSFER event 2023-10-18 10:11 ` Marek Vasut @ 2023-10-18 10:16 ` Minda Chen 2023-10-18 10:55 ` Marek Vasut 0 siblings, 1 reply; 10+ messages in thread From: Minda Chen @ 2023-10-18 10:16 UTC (permalink / raw) To: Marek Vasut, Bin Meng; +Cc: u-boot On 2023/10/18 18:11, Marek Vasut wrote: > On 10/18/23 05:46, Minda Chen wrote: >> >> >> On 2023/10/18 10:35, Marek Vasut wrote: >>> On 10/18/23 03:22, Minda Chen wrote: >>>> >>>> >>>> On 2023/10/17 19:20, Marek Vasut wrote: >>>>> On 10/17/23 08:20, Minda Chen wrote: >>>>>> xhci_wait_for_event() waiting TRB_TRANSFER event may return >>>>>> NULL. Checking the return value to avoid crash. >>>>>> >>>>>> Signed-off-by: Minda Chen <minda.chen@starfivetech.com> >>>>> >>>>> How did you trigger this error ? Is there a reproducer ? Details please ... >>>> >>>> While Scanning a lenovo usb2.0 udisk, not 100 % reproduce >>> >>> Can you include Linux >>> >>> lsusb -vvv >>> >>> output for this device and include that information in the commit message ? (or the U-Boot info below, that works too, just please add it into the commit message, it is important for future reference). >>> >> OK, I will add lsusb -vvv Linux udisk message and crash dump info to commit message > > Thank you > >>>> This is log. >>>> >>>> StarFive # usb reset >>>> resetting USB... >>>> Bus xhci_pci: Register 5000420 NbrPorts 5 >>>> Starting the controller >>>> USB XHCI 1.00 >>>> scanning bus xhci_pci for devices... WARN halted endpoint, queueing URB anyway. >>>> Unexpected XHCI event TRB, skipping... (f77141f0 00000000 13000000 02008401) >>>> Unhandled exception: Load access fault >>>> EPC: 00000000f7f563c6 RA: 00000000f7f563c6 TVAL: 000000000000000c >>>> EPC: 000000004024a3c6 RA: 000000004024a3c6 reloc adjusted >>> >>> Where does the crash point to in code, can you disassemble the PC pointer ? (or maybe you can use scripts/decodecode I think) >>> >> OK, I will add EPC pointer disassemble to commit message > > This part probably doesn't need to be in the commit message. I'd like to know where the crash occurred in the code. 000000004024a376 <abort_td>: { 4024a376: 7179 addi sp,sp,-48 4024a378: f406 sd ra,40(sp) 4024a37a: f022 sd s0,32(sp) 4024a37c: ec26 sd s1,24(sp) 4024a37e: e84a sd s2,16(sp) 4024a380: e44e sd s3,8(sp) 4024a382: e052 sd s4,0(sp) 4024a384: 89ae mv s3,a1 4024a386: 84aa mv s1,a0 struct xhci_ctrl *ctrl = xhci_get_ctrl(udev); 4024a388: 8c4fe0ef jal ra,4024844c <xhci_get_ctrl> struct xhci_ring *ring = ctrl->devs[udev->slot_id]->eps[ep_index].ring; 4024a38c: 6785 lui a5,0x1 4024a38e: 94be add s1,s1,a5 4024a390: 9444a603 lw a2,-1724(s1) 4024a394: 00198713 addi a4,s3,1 4024a398: 0712 slli a4,a4,0x4 4024a39a: 02061793 slli a5,a2,0x20 4024a39e: 9381 srli a5,a5,0x20 4024a3a0: 07c9 addi a5,a5,18 4024a3a2: 078e slli a5,a5,0x3 4024a3a4: 97aa add a5,a5,a0 4024a3a6: 679c ld a5,8(a5) xhci_queue_command(ctrl, NULL, udev->slot_id, ep_index, TRB_STOP_RING); 4024a3a8: 2981 sext.w s3,s3 4024a3aa: 86ce mv a3,s3 struct xhci_ring *ring = ctrl->devs[udev->slot_id]->eps[ep_index].ring; 4024a3ac: 97ba add a5,a5,a4 xhci_queue_command(ctrl, NULL, udev->slot_id, ep_index, TRB_STOP_RING); 4024a3ae: 4581 li a1,0 4024a3b0: 473d li a4,15 struct xhci_ring *ring = ctrl->devs[udev->slot_id]->eps[ep_index].ring; 4024a3b2: 0087ba03 ld s4,8(a5) # 1008 <_start-0x401feff8> struct xhci_ctrl *ctrl = xhci_get_ctrl(udev); 4024a3b6: 842a mv s0,a0 xhci_queue_command(ctrl, NULL, udev->slot_id, ep_index, TRB_STOP_RING); 4024a3b8: d75ff0ef jal ra,4024a12c <xhci_queue_command> event = xhci_wait_for_event(ctrl, TRB_TRANSFER); 4024a3bc: 02000593 li a1,32 4024a3c0: 8522 mv a0,s0 4024a3c2: ebdff0ef jal ra,4024a27e <xhci_wait_for_event> field = le32_to_cpu(event->trans_event.flags); epc-> 4024a3c6: 455c lw a5,12(a0) BUG_ON(TRB_TO_SLOT_ID(field) != udev->slot_id); 4024a3c8: 9444a703 lw a4,-1724(s1) field = le32_to_cpu(event->trans_event.flags); 4024a3cc: 0007891b sext.w s2,a5 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1] usb: xhci: Check return value of wait for TRB_TRANSFER event 2023-10-18 10:16 ` Minda Chen @ 2023-10-18 10:55 ` Marek Vasut 2023-10-19 2:46 ` Minda Chen 0 siblings, 1 reply; 10+ messages in thread From: Marek Vasut @ 2023-10-18 10:55 UTC (permalink / raw) To: Minda Chen, Bin Meng; +Cc: u-boot On 10/18/23 12:16, Minda Chen wrote: > > > On 2023/10/18 18:11, Marek Vasut wrote: >> On 10/18/23 05:46, Minda Chen wrote: >>> >>> >>> On 2023/10/18 10:35, Marek Vasut wrote: >>>> On 10/18/23 03:22, Minda Chen wrote: >>>>> >>>>> >>>>> On 2023/10/17 19:20, Marek Vasut wrote: >>>>>> On 10/17/23 08:20, Minda Chen wrote: >>>>>>> xhci_wait_for_event() waiting TRB_TRANSFER event may return >>>>>>> NULL. Checking the return value to avoid crash. >>>>>>> >>>>>>> Signed-off-by: Minda Chen <minda.chen@starfivetech.com> >>>>>> >>>>>> How did you trigger this error ? Is there a reproducer ? Details please ... >>>>> >>>>> While Scanning a lenovo usb2.0 udisk, not 100 % reproduce >>>> >>>> Can you include Linux >>>> >>>> lsusb -vvv >>>> >>>> output for this device and include that information in the commit message ? (or the U-Boot info below, that works too, just please add it into the commit message, it is important for future reference). >>>> >>> OK, I will add lsusb -vvv Linux udisk message and crash dump info to commit message >> >> Thank you >> >>>>> This is log. >>>>> >>>>> StarFive # usb reset >>>>> resetting USB... >>>>> Bus xhci_pci: Register 5000420 NbrPorts 5 >>>>> Starting the controller >>>>> USB XHCI 1.00 >>>>> scanning bus xhci_pci for devices... WARN halted endpoint, queueing URB anyway. >>>>> Unexpected XHCI event TRB, skipping... (f77141f0 00000000 13000000 02008401) >>>>> Unhandled exception: Load access fault >>>>> EPC: 00000000f7f563c6 RA: 00000000f7f563c6 TVAL: 000000000000000c >>>>> EPC: 000000004024a3c6 RA: 000000004024a3c6 reloc adjusted >>>> >>>> Where does the crash point to in code, can you disassemble the PC pointer ? (or maybe you can use scripts/decodecode I think) >>>> >>> OK, I will add EPC pointer disassemble to commit message >> >> This part probably doesn't need to be in the commit message. I'd like to know where the crash occurred in the code. > > > 000000004024a376 <abort_td>: > { > 4024a376: 7179 addi sp,sp,-48 > 4024a378: f406 sd ra,40(sp) > 4024a37a: f022 sd s0,32(sp) > 4024a37c: ec26 sd s1,24(sp) > 4024a37e: e84a sd s2,16(sp) > 4024a380: e44e sd s3,8(sp) > 4024a382: e052 sd s4,0(sp) > 4024a384: 89ae mv s3,a1 > 4024a386: 84aa mv s1,a0 > struct xhci_ctrl *ctrl = xhci_get_ctrl(udev); > 4024a388: 8c4fe0ef jal ra,4024844c <xhci_get_ctrl> > struct xhci_ring *ring = ctrl->devs[udev->slot_id]->eps[ep_index].ring; > 4024a38c: 6785 lui a5,0x1 > 4024a38e: 94be add s1,s1,a5 > 4024a390: 9444a603 lw a2,-1724(s1) > 4024a394: 00198713 addi a4,s3,1 > 4024a398: 0712 slli a4,a4,0x4 > 4024a39a: 02061793 slli a5,a2,0x20 > 4024a39e: 9381 srli a5,a5,0x20 > 4024a3a0: 07c9 addi a5,a5,18 > 4024a3a2: 078e slli a5,a5,0x3 > 4024a3a4: 97aa add a5,a5,a0 > 4024a3a6: 679c ld a5,8(a5) > xhci_queue_command(ctrl, NULL, udev->slot_id, ep_index, TRB_STOP_RING); > 4024a3a8: 2981 sext.w s3,s3 > 4024a3aa: 86ce mv a3,s3 > struct xhci_ring *ring = ctrl->devs[udev->slot_id]->eps[ep_index].ring; > 4024a3ac: 97ba add a5,a5,a4 > xhci_queue_command(ctrl, NULL, udev->slot_id, ep_index, TRB_STOP_RING); > 4024a3ae: 4581 li a1,0 > 4024a3b0: 473d li a4,15 > struct xhci_ring *ring = ctrl->devs[udev->slot_id]->eps[ep_index].ring; > 4024a3b2: 0087ba03 ld s4,8(a5) # 1008 <_start-0x401feff8> > struct xhci_ctrl *ctrl = xhci_get_ctrl(udev); > 4024a3b6: 842a mv s0,a0 > xhci_queue_command(ctrl, NULL, udev->slot_id, ep_index, TRB_STOP_RING); > 4024a3b8: d75ff0ef jal ra,4024a12c <xhci_queue_command> > event = xhci_wait_for_event(ctrl, TRB_TRANSFER); > 4024a3bc: 02000593 li a1,32 > 4024a3c0: 8522 mv a0,s0 > 4024a3c2: ebdff0ef jal ra,4024a27e <xhci_wait_for_event> > field = le32_to_cpu(event->trans_event.flags); > epc-> 4024a3c6: 455c lw a5,12(a0) So the fault occurs when reading the controller register(s), do I understand it right ? Could it be the problem is rather some clock, which are turned off after a fault ? ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1] usb: xhci: Check return value of wait for TRB_TRANSFER event 2023-10-18 10:55 ` Marek Vasut @ 2023-10-19 2:46 ` Minda Chen 2023-10-19 3:22 ` Marek Vasut 0 siblings, 1 reply; 10+ messages in thread From: Minda Chen @ 2023-10-19 2:46 UTC (permalink / raw) To: Marek Vasut, Bin Meng; +Cc: u-boot On 2023/10/18 18:55, Marek Vasut wrote: > On 10/18/23 12:16, Minda Chen wrote: >> >> >> On 2023/10/18 18:11, Marek Vasut wrote: >>> On 10/18/23 05:46, Minda Chen wrote: >>>> >>>> >>>> On 2023/10/18 10:35, Marek Vasut wrote: >>>>> On 10/18/23 03:22, Minda Chen wrote: >>>>>> >>>>>> >>>>>> On 2023/10/17 19:20, Marek Vasut wrote: >>>>>>> On 10/17/23 08:20, Minda Chen wrote: >>>>>>>> xhci_wait_for_event() waiting TRB_TRANSFER event may return >>>>>>>> NULL. Checking the return value to avoid crash. >>>>>>>> >>>>>>>> Signed-off-by: Minda Chen <minda.chen@starfivetech.com> >>>>>>> >>>>>>> How did you trigger this error ? Is there a reproducer ? Details please ... >>>>>> >>>>>> While Scanning a lenovo usb2.0 udisk, not 100 % reproduce >>>>> >>>>> Can you include Linux >>>>> >>>>> lsusb -vvv >>>>> >>>>> output for this device and include that information in the commit message ? (or the U-Boot info below, that works too, just please add it into the commit message, it is important for future reference). >>>>> >>>> OK, I will add lsusb -vvv Linux udisk message and crash dump info to commit message >>> >>> Thank you >>> >>>>>> This is log. >>>>>> >>>>>> StarFive # usb reset >>>>>> resetting USB... >>>>>> Bus xhci_pci: Register 5000420 NbrPorts 5 >>>>>> Starting the controller >>>>>> USB XHCI 1.00 >>>>>> scanning bus xhci_pci for devices... WARN halted endpoint, queueing URB anyway. >>>>>> Unexpected XHCI event TRB, skipping... (f77141f0 00000000 13000000 02008401) >>>>>> Unhandled exception: Load access fault >>>>>> EPC: 00000000f7f563c6 RA: 00000000f7f563c6 TVAL: 000000000000000c >>>>>> EPC: 000000004024a3c6 RA: 000000004024a3c6 reloc adjusted >>>>> >>>>> Where does the crash point to in code, can you disassemble the PC pointer ? (or maybe you can use scripts/decodecode I think) >>>>> >>>> OK, I will add EPC pointer disassemble to commit message >>> >>> This part probably doesn't need to be in the commit message. I'd like to know where the crash occurred in the code. >> >> >> 000000004024a376 <abort_td>: >> { >> 4024a376: 7179 addi sp,sp,-48 >> 4024a378: f406 sd ra,40(sp) >> 4024a37a: f022 sd s0,32(sp) >> 4024a37c: ec26 sd s1,24(sp) >> 4024a37e: e84a sd s2,16(sp) >> 4024a380: e44e sd s3,8(sp) >> 4024a382: e052 sd s4,0(sp) >> 4024a384: 89ae mv s3,a1 >> 4024a386: 84aa mv s1,a0 >> struct xhci_ctrl *ctrl = xhci_get_ctrl(udev); >> 4024a388: 8c4fe0ef jal ra,4024844c <xhci_get_ctrl> >> struct xhci_ring *ring = ctrl->devs[udev->slot_id]->eps[ep_index].ring; >> 4024a38c: 6785 lui a5,0x1 >> 4024a38e: 94be add s1,s1,a5 >> 4024a390: 9444a603 lw a2,-1724(s1) >> 4024a394: 00198713 addi a4,s3,1 >> 4024a398: 0712 slli a4,a4,0x4 >> 4024a39a: 02061793 slli a5,a2,0x20 >> 4024a39e: 9381 srli a5,a5,0x20 >> 4024a3a0: 07c9 addi a5,a5,18 >> 4024a3a2: 078e slli a5,a5,0x3 >> 4024a3a4: 97aa add a5,a5,a0 >> 4024a3a6: 679c ld a5,8(a5) >> xhci_queue_command(ctrl, NULL, udev->slot_id, ep_index, TRB_STOP_RING); >> 4024a3a8: 2981 sext.w s3,s3 >> 4024a3aa: 86ce mv a3,s3 >> struct xhci_ring *ring = ctrl->devs[udev->slot_id]->eps[ep_index].ring; >> 4024a3ac: 97ba add a5,a5,a4 >> xhci_queue_command(ctrl, NULL, udev->slot_id, ep_index, TRB_STOP_RING); >> 4024a3ae: 4581 li a1,0 >> 4024a3b0: 473d li a4,15 >> struct xhci_ring *ring = ctrl->devs[udev->slot_id]->eps[ep_index].ring; >> 4024a3b2: 0087ba03 ld s4,8(a5) # 1008 <_start-0x401feff8> >> struct xhci_ctrl *ctrl = xhci_get_ctrl(udev); >> 4024a3b6: 842a mv s0,a0 >> xhci_queue_command(ctrl, NULL, udev->slot_id, ep_index, TRB_STOP_RING); >> 4024a3b8: d75ff0ef jal ra,4024a12c <xhci_queue_command> >> event = xhci_wait_for_event(ctrl, TRB_TRANSFER); >> 4024a3bc: 02000593 li a1,32 >> 4024a3c0: 8522 mv a0,s0 >> 4024a3c2: ebdff0ef jal ra,4024a27e <xhci_wait_for_event> >> field = le32_to_cpu(event->trans_event.flags); >> epc-> 4024a3c6: 455c lw a5,12(a0) > > So the fault occurs when reading the controller register(s), do I understand it right ? > I think it is right. Actually this error occur in error path, control tx transfer TRB_TRANSFER error occur and jump to error path. sending TRB_TRANSFER again. > Could it be the problem is rather some clock, which are turned off after a fault ? I think not. Just this udisk can reproduce this issue. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v1] usb: xhci: Check return value of wait for TRB_TRANSFER event 2023-10-19 2:46 ` Minda Chen @ 2023-10-19 3:22 ` Marek Vasut 0 siblings, 0 replies; 10+ messages in thread From: Marek Vasut @ 2023-10-19 3:22 UTC (permalink / raw) To: Minda Chen, Bin Meng; +Cc: u-boot On 10/19/23 04:46, Minda Chen wrote: [...] >>> 000000004024a376 <abort_td>: >>> { >>> 4024a376: 7179 addi sp,sp,-48 >>> 4024a378: f406 sd ra,40(sp) >>> 4024a37a: f022 sd s0,32(sp) >>> 4024a37c: ec26 sd s1,24(sp) >>> 4024a37e: e84a sd s2,16(sp) >>> 4024a380: e44e sd s3,8(sp) >>> 4024a382: e052 sd s4,0(sp) >>> 4024a384: 89ae mv s3,a1 >>> 4024a386: 84aa mv s1,a0 >>> struct xhci_ctrl *ctrl = xhci_get_ctrl(udev); >>> 4024a388: 8c4fe0ef jal ra,4024844c <xhci_get_ctrl> >>> struct xhci_ring *ring = ctrl->devs[udev->slot_id]->eps[ep_index].ring; >>> 4024a38c: 6785 lui a5,0x1 >>> 4024a38e: 94be add s1,s1,a5 >>> 4024a390: 9444a603 lw a2,-1724(s1) >>> 4024a394: 00198713 addi a4,s3,1 >>> 4024a398: 0712 slli a4,a4,0x4 >>> 4024a39a: 02061793 slli a5,a2,0x20 >>> 4024a39e: 9381 srli a5,a5,0x20 >>> 4024a3a0: 07c9 addi a5,a5,18 >>> 4024a3a2: 078e slli a5,a5,0x3 >>> 4024a3a4: 97aa add a5,a5,a0 >>> 4024a3a6: 679c ld a5,8(a5) >>> xhci_queue_command(ctrl, NULL, udev->slot_id, ep_index, TRB_STOP_RING); >>> 4024a3a8: 2981 sext.w s3,s3 >>> 4024a3aa: 86ce mv a3,s3 >>> struct xhci_ring *ring = ctrl->devs[udev->slot_id]->eps[ep_index].ring; >>> 4024a3ac: 97ba add a5,a5,a4 >>> xhci_queue_command(ctrl, NULL, udev->slot_id, ep_index, TRB_STOP_RING); >>> 4024a3ae: 4581 li a1,0 >>> 4024a3b0: 473d li a4,15 >>> struct xhci_ring *ring = ctrl->devs[udev->slot_id]->eps[ep_index].ring; >>> 4024a3b2: 0087ba03 ld s4,8(a5) # 1008 <_start-0x401feff8> >>> struct xhci_ctrl *ctrl = xhci_get_ctrl(udev); >>> 4024a3b6: 842a mv s0,a0 >>> xhci_queue_command(ctrl, NULL, udev->slot_id, ep_index, TRB_STOP_RING); >>> 4024a3b8: d75ff0ef jal ra,4024a12c <xhci_queue_command> >>> event = xhci_wait_for_event(ctrl, TRB_TRANSFER); >>> 4024a3bc: 02000593 li a1,32 >>> 4024a3c0: 8522 mv a0,s0 >>> 4024a3c2: ebdff0ef jal ra,4024a27e <xhci_wait_for_event> >>> field = le32_to_cpu(event->trans_event.flags); >>> epc-> 4024a3c6: 455c lw a5,12(a0) >> >> So the fault occurs when reading the controller register(s), do I understand it right ? >> > I think it is right. Actually this error occur in error path, control tx transfer TRB_TRANSFER error occur and jump to error path. > sending TRB_TRANSFER again. >> Could it be the problem is rather some clock, which are turned off after a fault ? > I think not. Just this udisk can reproduce this issue. Can you take a closer look into this ? Is there maybe some hardware debug tool which can clarify what is going on better ? It seems weird that controller register access would trigger this kind of bus fault (it is a bus fault, right ?) ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2023-10-19 3:22 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-10-17 6:20 [PATCH v1] usb: xhci: Check return value of wait for TRB_TRANSFER event Minda Chen 2023-10-17 11:20 ` Marek Vasut 2023-10-18 1:22 ` Minda Chen 2023-10-18 2:35 ` Marek Vasut 2023-10-18 3:46 ` Minda Chen 2023-10-18 10:11 ` Marek Vasut 2023-10-18 10:16 ` Minda Chen 2023-10-18 10:55 ` Marek Vasut 2023-10-19 2:46 ` Minda Chen 2023-10-19 3:22 ` Marek Vasut
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox