Re: git: 7520b88860d7 - main - usb(4): Automagically apply all quirks for USB mass storage devices.
Date: Mon, 28 Feb 2022 09:54:33 UTC
On 2/28/22 10:19, Ruslan Bukin wrote: > On Sun, Feb 27, 2022 at 09:34:42PM +0100, Hans Petter Selasky wrote: >> On 2/27/22 20:48, Ruslan Bukin wrote: >>> Hi, >>> >>> I've an xhci issue with this change on my ARM Morello Board. >>> I've attached boot log. Can you look? >>> >>> Thanks. >>> >>> Ruslan >> >> Hi, >> >> The "xhci0: Resetting controller" indicates that the XHCI hardware >> halted. If you just need this device working, then just load >> usb_quirk.ko in /boot/loader.conf and add the same quirk there! >> >> man usb_quirk >> >> Maybe you can enable hw.usb.xhci.debug=17 from the loader during boot. >> If there is only one device it shouldn't spam the console too much. >> >> Sorry for the breakage. Seems to be related to xhci.c and probably its >> handling of the unconfigure command. >> > > Here is the output with xhcidebug = 17: > https://people.freebsd.org/~br/usb_issue_debug_17.txt > Can you look? I've unplugged mouse and keyboard, but left USB storage device. > Hi Ruslan, First this happens: > xhci_check_transfer: TD is last > xhci_generic_done: xfer=0xffff00012a7a7180 endpoint=0xffffa00006d55128 transfer done > xhci_generic_done_sub: xfer=0xffff00012a7a7180[0/2] rem=0/8 status=1 > xhci_generic_done_sub: xfer=0xffff00012a7a7180[1/2] rem=0/1 status=1 ^^^ the device returns 1 byte worth of data, and status=1 means success. > xhci_generic_done_sub: xfer=0xffff00012a7a7180[2/2] rem=0/0 status=1 > xhci_device_done: xfer=0xffff00012a7a7180, endpoint=0xffffa00006d55128, error=0 > xhci_interrupt_poll: event[86] = 32 (0x0000000086a77310 0x01000000 0x01018001) ^^^ 0x01 -> XHCI_TRB_ERROR_SUCCESS > xhci_check_transfer: slot=1 epno=1 remainder=0 status=1 This quirk gets set because the byte returned is zero, most likely. > usb_msc_auto_quirk: UQ_MSC_NO_GETMAXLUN set for USB mass storage device SanDisk Extreme (0x0781:0x5580) > xhci_device_generic_open: I suspect a CPU cache sync issue in busdma_dmamap_sync on your platform, as invoked by usb_pc_cpu_xxx(). Maybe you should print all the parameters for the intial usb_pc_cpu_xxx() calls? The LUN byte should be non-zero! Then comes the next problem: > xhci_cmd_set_tr_dequeue_ptr: > xhci_do_command: command[10] = 16 (0x0000000086a84001, 0x00000000, 0x01044000) > xhci_interrupt: real interrupt (status=0x00000008) > xhci_interrupt_poll: event[87] = 33 (0x000000008508ffa0 0x13000000 0x01008401) > xhci_check_command: Received command event > xhci_configure_reset_endpoint: Could not set dequeue ptr for endpoint 4 > xhci_cmd_configure_ep: 0x13 = XHCI_TRB_ERROR_CONTEXT_STATE as found in sys/dev/usb/controller/xhci*.h (Refer to xHCI_Specification_for_USB.pdf for more details) --HPS