Linksys MR8300, OpenWrt 22.03.0-rc4, USB port-powered storage devices not working

Worthy to try at least.
I own a MR8300 but I have never tried to plug anything in the USB. I'm following this thread anyway.

An idea to investigate. Maybe the OEM firmware limits itself to USB2 performance for a matter of power consumption. USB3 demands more. On the other hand, OpenWrt try to use USB3, and the hardware can't offer the power needed. Is there a way to tell OpenWrt to limit itself to USB2 despite USB3 capable port?

Some of the USB thumb drives I have tested are only capable of USB 2 (without the additional 5 pins used for USB 3) and the problem was exactly the same. And the power they draw from the USB port is very low.

By the way.
According to the official firmware release notes for the MR8300 it appears that it even took Linksys considerable time to enable support for storage devices via the USB port on this router model. (on the box that my MR8300 V1.1 came in the USB port is still marked with "For future expansion" and no word about USB storage support)
https://downloads.linksys.com/support/assets/releasenotes/MR8300_1.1.10.210186_Customer_ReleaseNotes.txt

Given that the older EA8300 already supported USB storage devices before the MR8300 even existed and both router models are based on the same Qualcomm chips, it would seem illogical that Linksys didn't provide USB storage support on the MR8300 right from the start. Unless they were maybe facing some unexpected problem with the re-designed PCB?

I wonder if Linksys had to come up with an unusual solution to make the USB port on the MR8300 work, like implement some sophisticated load balancing or pause some other system component(s) whenever a data packet is to be sent or received from the USB port?

1 Like

Interesting analysis.

So, did the OEM firmware fix this issue?. Did you inspect the MR8300 GPL to get any clue about this issue.

https://downloads.linksys.com/support/assets/gpl/MR8300_v1.1.10.210186.tar.gz
If the issue is fixed, we may need to need to know the version which contains the fix.

I tested mounting on the stock firmware - I think mine was 1.0.8 or something. It worked right away, without any issue whatsoever.

//edit

Just double checked, I was wrong: I have 1.1.8.203202

I poked around in the firmware via serial, but couldn't find anything that I considered relevant - but then again, I do not know what I am looking for.

In case somebody wants me to check something specific, let me know, I am more than happy to provide the data needed.

BTW: user is root and password is admin - in case somebody wants to poke around. The pinout and baud rate is the same as on the EA8300 and can be found on the device page of the EA8300.

Hi :slight_smile: My device is MR7350, but I have the same problem. I unpacked linksys MR8300 firmware, found script service_usb.sh and saw next:

lion_usb_power_reset ()
{
	echo "===> RESET LION usb power" > /dev/console
	echo "68" > /sys/class/gpio/export  # gpio.68 (USB_PWR_EN)
	echo "out" >/sys/class/gpio/gpio68/direction
	echo "1" >/sys/class/gpio/gpio68/value  # pull High, then pull Low (it's active Low)
	sleep 2
	echo "0" >/sys/class/gpio/gpio68/value
}

From qcom-ipq4019-xx8300.dtsi:

pulldowns {
	pins =  "gpio55", "gpio56", "gpio57",
		"gpio60", "gpio62", "gpio63",
		"gpio64", "gpio65", "gpio66",
		"gpio67", "gpio68", "gpio69";
	function = "qpic";
	bias-pull-down;
};

So, if I understand correctly, GPIO 68 should be reset to make USB to work, but it's in active-low state by default due to the dtsi definition, right? I'm not a programmer, so it's just my thoughts.
Full script:

#!/bin/sh
source /etc/init.d/ulog_functions.sh
source /etc/init.d/event_handler_functions.sh
source /etc/init.d/usb_functions.sh
SERVICE_NAME="usb"
PID="($$)"
MODULE_PATH=/lib/modules/`uname -r`/
UDEVD_DIR="/etc/udev/rules.d"
UDEVD_FILE="${UDEVD_DIR}/10-local.rules"
prepare_udevd_conf()
{
   mkdir -p $UDEVD_DIR
        if [ "`cat /etc/product`" != "cobra" ] && [ "`cat /etc/product`" != "caiman" ]; then
(
cat <<'End-of-Text'
AUTODETECT_SCRIPT="/var/config/auto_detect.sh"
SUBSYSTEM=="usb", ACTION=="add", RUN+="/etc/init.d/service_usb/auto_detect.sh add_usb_device %k"
SUBSYSTEM=="usb", ACTION=="remove", RUN+="/etc/init.d/service_usb/auto_detect.sh remove_usb_device %k"
KERNEL=="sd[a-z][0-9]*", DRIVERS=="usb-storage", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/init.d/service_usb/auto_detect.sh add_usb_storage %k"
KERNEL=="sd[a-z][0-9]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/init.d/service_usb/auto_detect.sh remove_usb_storage %k"
KERNEL=="sd[a-z]*", DRIVERS=="usb-storage", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/init.d/service_usb/auto_detect.sh add_usb_storage %k"
KERNEL=="sd[a-z]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/init.d/service_usb/auto_detect.sh remove_usb_storage %k"
DEVPATH=="/devices/platform/msm_sata.?/*/block/sd*", ENV{UDISKS_SYSTEM_INTERNAL}="0", ACTION=="add", RUN+="/etc/init.d/service_usb/auto_detect.sh add_usb_storage %k"
DEVPATH=="/devices/platform/msm_sata.?/*/block/sd*", ENV{UDISKS_SYSTEM_INTERNAL}="0", ACTION=="remove", RUN+="/etc/init.d/service_usb/auto_detect.sh remove_usb_storage %k"
End-of-Text
) > $UDEVD_FILE
else
(
cat <<'End-of-Text'
AUTODETECT_SCRIPT="/var/config/auto_detect.sh"
SUBSYSTEM=="usb", ACTION=="add", RUN+="/etc/init.d/service_usb/auto_detect.sh add_usb_device %k"
SUBSYSTEM=="usb", ACTION=="remove", RUN+="/etc/init.d/service_usb/auto_detect.sh remove_usb_device %k"
KERNEL=="sd[a-z][0-9]*", DRIVERS=="usb-storage", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/init.d/service_usb/auto_detect.sh add_usb_storage %k"
KERNEL=="sd[a-z][0-9]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/init.d/service_usb/auto_detect.sh remove_usb_storage %k"
KERNEL=="sd[a-z]*", DRIVERS=="usb-storage", SUBSYSTEM=="block", ACTION=="add", RUN+="/etc/init.d/service_usb/auto_detect.sh add_usb_storage %k"
KERNEL=="sd[a-z]*", SUBSYSTEM=="block", ACTION=="remove", RUN+="/etc/init.d/service_usb/auto_detect.sh remove_usb_storage %k"
DEVPATH=="/devices/soc.0/internal-regs.?/*/block/sd*", ENV{UDISKS_SYSTEM_INTERNAL}="0", ACTION=="add", RUN+="/etc/init.d/service_usb/auto_detect.sh add_usb_storage %k"
DEVPATH=="/devices/soc.0/internal-regs.?/*/block/sd*", ENV{UDISKS_SYSTEM_INTERNAL}="0", ACTION=="remove", RUN+="/etc/init.d/service_usb/auto_detect.sh remove_usb_storage %k"
End-of-Text
) > $UDEVD_FILE
fi
}
start_udevd_for_usb()
{
   prepare_udevd_conf
   /sbin/udevadm control --reload-rules
}
stop_usb_port()
{
   [ -z "$1" ] && return
   sysevent set usb_port_${1}_type none
   sysevent set usb_port_${1}_state down
}
start_usb_port()
{
   [ -z "$1" ] && return
   get_usb_config_by_port_num $1
   SYSEVENT_usb_port_type=`sysevent get usb_port_${1}_type`
   SYSEVENT_usb_port_state=`sysevent get usb_port_${1}_state`
   ulog usb manager "$PID USB_current_mode = $USB_current_mode"
   provisioned_mode_to_desired_port_mode $USB_current_mode
   [ -z "$USB_desired_mode" ] && USB_desired_mode="detect"
   
   ulog usb manager "$PID USB_desired_mode = $USB_desired_mode"
   if [ "up" = "$SYSEVENT_usb_port_state" ] ; then
      if [ "used" = "$USB_desired_mode" ] ; then
         ulog usb service "$PID USB up: Configured for no special modes on usb port $1"
         if [ "storage" = "$SYSEVENT_usb_port_type" ] ; then
            syscfg set usb_${1}::current_mode storage
            add_storage_drivers
         elif [ "printer" = "$SYSEVENT_usb_port_type" ] ; then
            syscfg set usb_${1}::current_mode virtualUSB
            add_virtualusb_drivers
         elif [ "none" = "$SYSEVENT_usb_port_type" ] ; then
            syscfg set usb_${1}::current_mode detect
         fi
         sysevent set usb_port_${1}_state up
         return
      fi
      case "$USB_desired_mode" in
         storage)
            ulog usb service "$PID USB up: desired mode is Storage"
            lsmod | grep "usb_storage" ; 
            if [ "1" = "$?" ] ; then
               add_storage_drivers
               ulog usb service "$PID Adding storage drivers on usb port $1"
            fi
            ;;
         virtualUSB)
            ulog usb service "$PID USB up: desired mode is VirtualUSB"
            lsmod | grep "sxuptp" ; 
            if [ "1" = "$?" ] ; then
               add_virtualusb_drivers
               ulog usb service "$PID Adding virtual usb drivers on usb port $1"
            fi
            ;;
         detect)
            ulog usb service "$PID USB up: desired mode is Detect"
            if [ "storage" = "$SYSEVENT_usb_port_type" ] ; then
               lsmod | grep "usb_storage" ;
               if [ "1" = "$?" ]; then
                  add_storage_drivers
                  ulog usb service "$PID Adding storage drivers on usb port $1"
               else
                  ulog usb service "$PID storage drivers already installed on usb port $1"
               fi
            elif [ "printer" = "$SYSEVENT_usb_port_type" ] ; then
               lsmod | grep "sxuptp" ;
               if [ "1" = "$?" ] ; then
                  add_virtualusb_drivers
                  ulog usb service "$PID Adding virtual usb drivers on usb port $1"
               else
                  ulog usb service "$PID virtualUSB drivers already installed on usb port $1"
               fi
            fi
            ;;
         *)
            ulog usb service "$PID USB up: Unhandled case statement for mode $USB_desired_mode"
            ;;
      esac
   else
      if [ "used" = "$USB_desired_mode" ] ; then
         ulog usb service "$PID USB down: Configured for no special modes on usb port $1"
         if [ "storage" = "$SYSEVENT_usb_port_type" ] ; then
            syscfg set usb_${1}::current_mode storage
            add_storage_drivers 
            sysevent set usb_port_${1}_state up
         elif [ "printer" = "$SYSEVENT_usb_port_type" ] ; then
            syscfg set usb_${1}::current_mode virtualUSB
            add_virtualusb_drivers
            sysevent set usb_port_${1}_state up
         elif [ "none" = "$SYSEVENT_usb_port_type" ] ; then
            syscfg set usb_${1}::current_mode detect
            sysevent set usb_port_${1}_state detecting
         fi
         return
      fi
      case "$USB_desired_mode" in
         storage)
            ulog usb service "$PID USB down: desired mode is Storage"
            add_storage_drivers
            sysevent set usb_port_${1}_state up
            ;;
         virtualUSB)
            ulog usb service "$PID USB down: desired mode is VirtualUSB"
            add_virtualusb_drivers
            sysevent set usb_port_${1}_state up
            ;;
         detect)
            ulog usb service "$PID USB down: desired mode is Detect"
            if [ "none" = "$SYSEVENT_usb_port_type" ] ; then
               ulog usb service "$PID USB down: There is no usb on usb port $1"
               sysevent set usb_port_${1}_state detecting
            elif [ "storage" = "$SYSEVENT_usb_port_type" ] ; then
               lsmod | grep "usb_storage" ;
               if [ "1" = "$?" ] ; then
                  add_storage_drivers
                  ulog usb service "$PID USB down: Adding storage drivers on usb port $1"
               else
                  ulog usb service "$PID USB down: storage drivers already installed on usb port $1"
               fi
               sysevent set usb_port_${1}_state up
            elif [ "printer" = "$SYSEVENT_usb_port_type" ] ; then
               lsmod | grep "sxuptp" ;
               if [ "1" = "$?" ] ; then
                  add_virtualusb_drivers
                  ulog usb service "$PID USB down: Adding virtual usb drivers on usb port $1"
               else
                  ulog usb service "$PID USB down: virtual usb drivers already installed on usb port $1"
               fi
               sysevent set usb_port_${1}_state up
            fi
            ;;
         *)
            ulog usb service "$PID USB down: Unhandled case statement 2 for mode $USB_desired_mode"
            ;;
      esac
   fi
}
service_init ()
{
   SYSCFG_FAILED='false'
   FOO=`utctx_cmd get UsbPortCount`
   eval $FOO
   if [ $SYSCFG_FAILED = 'true' ] ; then
      ulog usb status "$PID utctx failed to get some configuration data"
      exit
   fi
}
lion_usb_power_reset ()
{
	echo "===> RESET LION usb power" > /dev/console
	echo "68" > /sys/class/gpio/export  # gpio.68 (USB_PWR_EN)
	echo "out" >/sys/class/gpio/gpio68/direction
	echo "1" >/sys/class/gpio/gpio68/value  # pull High, then pull Low (it's active Low)
	sleep 2
	echo "0" >/sys/class/gpio/gpio68/value
}
service_start ()
{
   [ "started" = "`sysevent get ${SERVICE_NAME}-status`" ] && return
   SYSCFG_UsbPortCount=`syscfg get UsbPortCount`
   [ -z "$SYSCFG_UsbPortCount" ] && return
   for i in `seq 1 $SYSCFG_UsbPortCount`
   do
      start_usb_port $i
   done
   start_udevd_for_usb
   MODULE_PATH=/lib/modules/`uname -r`/
   lsmod | grep usbcore 2>&1 > /dev/null
   if [ $? -eq 1 ]; then
       [ -f $MODULE_PATH/usbcore.ko ] && insmod $MODULE_PATH/usbcore.ko
   fi
  lsmod | grep xhci_hcd 2>&1 > /dev/null
   if [ $? -eq 1 ]; then
       [ -f $MODULE_PATH/xhci-hcd.ko ] && insmod $MODULE_PATH/xhci-hcd.ko
   fi
   lsmod | grep ehci_hcd 2>&1 > /dev/null
   if [ $? -eq 1 ]; then
       [ -f $MODULE_PATH/ehci-hcd.ko ] && insmod $MODULE_PATH/ehci-hcd.ko
   fi
   lsmod | grep ohci_hcd 2>&1 > /dev/null
   if [ $? -eq 1 ]; then
       [ -f $MODULE_PATH/ohci-hcd.ko ] && insmod $MODULE_PATH/ohci-hcd.ko
   fi
   lsmod | grep uhci_hcd 2>&1 > /dev/null
   if [ $? -eq 1 ]; then
       [ -f $MODULE_PATH/uhci-hcd.ko ] && insmod $MODULE_PATH/uhci-hcd.ko
   fi
   lsmod | grep usb_libusual 2>&1 > /dev/null
   if [ $? -eq 1 ]; then
       [ -f $MODULE_PATH/usb-libusual.ko ] && insmod $MODULE_PATH/usb-libusual.ko
   fi
   sleep 30 
   MODEL_NAME=`syscfg get device::model_base`
   if [ -z "$MODEL_NAME" ] ; then
       MODEL_NAME=`syscfg get device::modelNumber`
       MODEL_NAME=${MODEL_NAME%-*}	
   fi
   if [ "EA9200" = "$MODEL_NAME" ] ; then
		ulog usb service "here,enable usb port again" 
   		echo "low" > /proc/bdutil/usbhub
   fi
   if [ "lion" = "`cat /etc/product`" -o "rogue" = "`cat /etc/product`" ]; then
	   lion_usb_power_reset
   fi
   sysevent set ${SERVICE_NAME}-status started
   ulog usb service "$PID : udevadm trigger "   
   /sbin/udevadm trigger --subsystem-match=usb --attr-match=bInterfaceClass=07 --action=add
   /sbin/udevadm trigger --subsystem-match=usb --attr-match=bInterfaceClass=08 --action=add
   /sbin/udevadm trigger --subsystem-match=block --action=add
}
service_stop ()
{
   SYSCFG_UsbPortCount=`syscfg get UsbPortCount`
   [ -z "$SYSCFG_UsbPortCount" ] && return
   for i in `seq 1 $SYSCFG_UsbPortCount`
   do
      unmount_storage_drive $i
      stop_usb_port $i
   done
   
   rm_storage_drivers
   rm_virtualusb_drivers
   sysevent set ${SERVICE_NAME}-status stopped
}
service_restart()
{
   service_stop
   sleep 1
   service_start
}
mesh_usb_eject()
{
    EJECTVAR=$1
    MESHUSBDIR="/tmp/msg/MESHUSB"
    MODE=`syscfg get smart_mode::mode`
    if [ "$MODE" = "2" ] ; then
        UUID=${EJECTVAR%%,*}
        DEVICENAME=${EJECTVAR##*,}
        UUID=`echo $UUID | tr "[:lower:]" "[:upper:]"`
        if [ "$UUID" = "`syscfg get device::uuid`" ] ; then
            /etc/init.d/service_usb/mountscript.sh remove $DEVICENAME
        else
            cat $MESHUSBDIR/$UUID/partitions 2>/dev/null | grep -q "\"$DEVICENAME\""
            [ "$?" = "0" ] && pub_mesh_usb_eject $UUID $DEVICENAME
        fi
    elif [ "$MODE" = "1" ] ; then
        [ ! -f $EJECTVAR ] && return
        DEVICENAME="${EJECTVAR##*/}"
        /etc/init.d/service_usb/mountscript.sh remove $DEVICENAME       
    fi
}
mesh_usb_refresh_data()
{
    MESHUSBDIR="/tmp/msg/MESHUSB"
    MODE=`syscfg get smart_mode::mode`
    if [ "$MODE" = "2" ] ; then
        UUID=$1
        if [ "$UUID" != "NULL" ] ; then
            UUID=`echo $UUID | tr "[:lower:]" "[:upper:]"`
            pub_mesh_usb_refresh $UUID
        else
            DEVICELIST=`ls $MESHUSBDIR`
            for UUID in $DEVICELIST
            do
                echo $UUID | egrep "^[0-9A-F]{8}-([0-9A-F]{4}-){3}[0-9A-F]{12}$" > /dev/null 2>&1
                [ "$?" = "0" ] && pub_mesh_usb_refresh $UUID
            done
        fi
    elif [ "$MODE" = "1" ] ; then
        pub_mesh_usb_partitions      
    fi
}
service_init
case "$1" in
   ${SERVICE_NAME}-start)
      service_start
      ;;
   ${SERVICE_NAME}-stop)
      service_stop
      ;;
   ${SERVICE_NAME}-restart)
      service_restart
      ;;
   lan-started)
      service_start
      ;;
   mesh_usb::eject_usb)
      mesh_usb_eject $2
      ;;
   mesh_usb::refresh_data)
      mesh_usb_refresh_data $2
      ;;
   *)
      echo "Usage: service-${SERVICE_NAME} [ ${SERVICE_NAME}-start | ${SERVICE_NAME}-stop | ${SERVICE_NAME}-restart] | lan-started" > /dev/console
      exit 3
      ;;
esac

For my MR7350 GPIO is 61 and dts definition looks like this:

usb_power_pins: usb_power_pins {
		mux {
			pins = "gpio61";
			function = "gpio";
			bias-disable;
			output-low;
		};
	};

GPIO muxed and I cannot control it.
Anyway, I'm not familiar with the new gpiod interface and don't know how to do a reset or how to properly defined GPIO in dts.

2 Likes

This generally works pretty well, unfortunately right now I do not have a suitable device to play with. You will need to install gpiod-tools and use gpioset to change the line state.
Here you can find some examples, one of them is relevant to your case:
gpioset --mode=time --sec=1 gpiochip0 34=0
You will need to change 34 to 61 and play with the values (0/1).

Worth to quote a note from the tool help text:

the state of a GPIO line controlled over the character device reverts to default
when the last process referencing the file descriptor representing the device file exits.
This means that it's wrong to run gpioset, have it exit and expect the line to continue
being driven high or low.

Edit: I suppose you first need to run gpioinfo and make sure that the line you want to manipulate is not [used]

I tried to configure the pin in different ways, but no luck. I also find now that the power pin is disabled due to the script above. So I don't understand in which way USB is powered.
For my MR7350:

/sys/class/gpio $ ls
export     gpio34     gpio61     gpiochip0  unexport
device      edge        subsystem   value
/sys/devices/platform/soc/1000000.pinctrl/gpio/gpio61 $ cat direction
out
/sys/devices/platform/soc/1000000.pinctrl/gpio/gpio61 $ cat active_low
0
/sys/devices/platform/soc/1000000.pinctrl/gpio/gpio61 $ cat value
0

This is from the stock Linksys firmware. The power pin is active-high and disabled. GPIO 34 is for Bluetooth.

cat /sys/kernel/debug/gpio usually gives better output. It will also show if the line in question is [not] available for manual control.
The script you mentioned tells "pull High, then pull Low", so what you need to do is

echo "1" > /sys/class/gpio/gpio61/value
/wait a sec/
echo "0" > /sys/class/gpio/gpio61/value

(assuming the GPIO is available, otherwise a change in the DTS will be needed)

I tried this using the old API. gpiochip432 + 61 = 493. Dts definition was removed to avoid 'used' status.

echo "493" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio493/direction
echo "1" > /sys/class/gpio/gpio493/active_low
echo "1" > /sys/class/gpio/gpio493/value
sleep 5
echo "0" > /sys/class/gpio/gpio493/value

Value 0 mean no power at the USB port.

Will try later.

I don't think you need to set the pin active_low.
output-low from the earlier example has a different meaning - "set the pin to output mode with low level"

1 Like

I have 5.5V, but still, errors spamming.
I collected some information from Linksys firmware:

~ # cat /sys/kernel/debug/gpio
GPIOs 0-79, platform/1000000.pinctrl, 1000000.pinctrl:
 gpio0   : in  1 2mA pull down
 gpio1   : in  1 8mA pull down
 gpio2   : in  1 2mA pull down
 gpio3   : in  1 8mA pull down
 gpio4   : in  1 8mA pull down
 gpio5   : in  1 8mA pull down
 gpio6   : in  1 8mA pull down
 gpio7   : in  1 8mA pull down
 gpio8   : in  1 8mA pull down
 gpio9   : in  1 2mA pull down
 gpio10  : in  1 8mA pull down
 gpio11  : in  1 8mA pull down
 gpio12  : in  1 8mA pull down
 gpio13  : in  1 8mA pull down
 gpio14  : in  1 8mA pull down
 gpio15  : in  1 8mA pull down
 gpio16  : in  1 2mA pull down
 gpio17  : in  1 8mA pull down
 gpio18  : in  0 2mA pull down
 gpio19  : in  0 2mA pull down
 gpio20  : in  0 2mA pull down
 gpio21  : in  0 2mA pull down
 gpio22  : in  0 2mA pull down
 gpio23  : in  0 2mA pull down
 gpio24  : in  0 2mA pull down
 gpio25  : in  0 2mA pull down
 gpio26  : in  0 2mA pull down
 gpio27  : in  0 2mA pull down
 gpio28  : in  0 2mA pull down
 gpio29  : in  0 2mA pull down
 gpio30  : in  0 2mA pull down
 gpio31  : in  0 2mA pull down
 gpio32  : in  0 2mA pull down
 gpio33  : in  0 2mA pull down
 gpio34  : out 0 2mA pull down
 gpio35  : in  0 2mA pull down
 gpio36  : in  0 2mA pull down
 gpio37  : in  0 2mA pull down
 gpio38  : in  3 8mA pull down
 gpio39  : in  3 8mA pull down
 gpio40  : in  2 8mA pull down
 gpio41  : in  2 8mA pull down
 gpio42  : in  2 2mA pull down
 gpio43  : in  2 2mA pull down
 gpio44  : out 1 8mA pull down
 gpio45  : out 1 8mA pull down
 gpio46  : in  1 2mA pull down
 gpio47  : in  1 2mA pull down
 gpio48  : in  0 2mA pull down
 gpio49  : in  0 2mA pull down
 gpio50  : in  0 2mA pull down
 gpio51  : in  0 2mA pull down
 gpio52  : in  0 2mA pull down
 gpio53  : in  0 2mA pull down
 gpio54  : in  0 2mA pull down
 gpio55  : in  0 2mA pull down
 gpio56  : in  0 8mA pull up
 gpio57  : in  0 8mA pull up
 gpio58  : out 0 8mA pull down
 gpio59  : out 0 8mA pull down
 gpio60  : out 0 8mA pull down
 gpio61  : out 0 2mA no pull
 gpio62  : in  0 2mA pull down
 gpio63  : in  0 2mA pull down
 gpio64  : in  1 8mA pull up
 gpio65  : in  1 8mA pull up
 gpio66  : in  0 2mA pull down
 gpio67  : in  0 2mA pull down
 gpio68  : in  0 2mA pull down
 gpio69  : in  1 8mA no pull
 gpio70  : in  1 8mA no pull
 gpio71  : in  1 8mA no pull
 gpio72  : in  1 8mA no pull
 gpio73  : in  0 2mA pull down
 gpio74  : in  0 2mA pull down
 gpio75  : out 0 2mA pull up
 gpio76  : in  0 2mA pull down
 gpio77  : in  0 2mA pull down
 gpio78  : in  0 2mA pull down
 gpio79  : in  0 2mA pull down
~ # cat /sys/kernel/debug/pinctrl/1000000.pinctrl/pinmux-pins
Pinmux settings per pin
Format: pin (name): mux_owner gpio_owner hog?
pin 0 (GPIO_0): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 1 (GPIO_1): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad group gpio1
pin 2 (GPIO_2): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 3 (GPIO_3): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad group gpio3
pin 4 (GPIO_4): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad group gpio4
pin 5 (GPIO_5): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad4 group gpio5
pin 6 (GPIO_6): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad5 group gpio6
pin 7 (GPIO_7): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad6 group gpio7
pin 8 (GPIO_8): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad7 group gpio8
pin 9 (GPIO_9): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 10 (GPIO_10): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad group gpio10
pin 11 (GPIO_11): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad group gpio11
pin 12 (GPIO_12): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad1 group gpio12
pin 13 (GPIO_13): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad2 group gpio13
pin 14 (GPIO_14): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad3 group gpio14
pin 15 (GPIO_15): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad0 group gpio15
pin 16 (GPIO_16): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 17 (GPIO_17): 79b0000.qpic-nand (GPIO UNCLAIMED) function qpic_pad group gpio17
pin 18 (GPIO_18): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 19 (GPIO_19): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 20 (GPIO_20): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 21 (GPIO_21): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 22 (GPIO_22): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 23 (GPIO_23): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 24 (GPIO_24): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 25 (GPIO_25): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 26 (GPIO_26): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 27 (GPIO_27): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 28 (GPIO_28): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 29 (GPIO_29): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 30 (GPIO_30): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 31 (GPIO_31): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 32 (GPIO_32): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 33 (GPIO_33): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 34 (GPIO_34): (MUX UNCLAIMED) 1000000.pinctrl:34
pin 35 (GPIO_35): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 36 (GPIO_36): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 37 (GPIO_37): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 38 (GPIO_38): 78b5000.spi (GPIO UNCLAIMED) function blsp0_spi group gpio38
pin 39 (GPIO_39): 78b5000.spi (GPIO UNCLAIMED) function blsp0_spi group gpio39
pin 40 (GPIO_40): 78b5000.spi (GPIO UNCLAIMED) function blsp0_spi group gpio40
pin 41 (GPIO_41): 78b5000.spi (GPIO UNCLAIMED) function blsp0_spi group gpio41
pin 42 (GPIO_42): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 43 (GPIO_43): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 44 (GPIO_44): 78b1000.serial (GPIO UNCLAIMED) function blsp2_uart group gpio44
pin 45 (GPIO_45): 78b1000.serial (GPIO UNCLAIMED) function blsp2_uart group gpio45
pin 46 (GPIO_46): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 47 (GPIO_47): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 48 (GPIO_48): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 49 (GPIO_49): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 50 (GPIO_50): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 51 (GPIO_51): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 52 (GPIO_52): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 53 (GPIO_53): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 54 (GPIO_54): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 55 (GPIO_55): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 56 (GPIO_56): soc:gpio_keys 1000000.pinctrl:56 function gpio group gpio56
pin 57 (GPIO_57): soc:gpio_keys 1000000.pinctrl:57 function gpio group gpio57
pin 58 (GPIO_58): soc:gpio_leds 1000000.pinctrl:58 function gpio group gpio58
pin 59 (GPIO_59): soc:gpio_leds 1000000.pinctrl:59 function gpio group gpio59
pin 60 (GPIO_60): soc:gpio_leds 1000000.pinctrl:60 function gpio group gpio60
pin 61 (GPIO_61): (MUX UNCLAIMED) 1000000.pinctrl:61
pin 62 (GPIO_62): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 63 (GPIO_63): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 64 (GPIO_64): 90000.mdio (GPIO UNCLAIMED) function mdc group gpio64
pin 65 (GPIO_65): 90000.mdio (GPIO UNCLAIMED) function mdio group gpio65
pin 66 (GPIO_66): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 67 (GPIO_67): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 68 (GPIO_68): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 69 (GPIO_69): 78b0000.serial (GPIO UNCLAIMED) function blsp1_uart group gpio69
pin 70 (GPIO_70): 78b0000.serial (GPIO UNCLAIMED) function blsp1_uart group gpio70
pin 71 (GPIO_71): 78b0000.serial (GPIO UNCLAIMED) function blsp1_uart group gpio71
pin 72 (GPIO_72): 78b0000.serial (GPIO UNCLAIMED) function blsp1_uart group gpio72
pin 73 (GPIO_73): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 74 (GPIO_74): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 75 (GPIO_75): 90000.mdio (GPIO UNCLAIMED) function gpio group gpio75
pin 76 (GPIO_76): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 77 (GPIO_77): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 78 (GPIO_78): (MUX UNCLAIMED) (GPIO UNCLAIMED)
pin 79 (GPIO_79): (MUX UNCLAIMED) (GPIO UNCLAIMED)

Maybe it helps somehow. Tell me if I can provide more information.

P.S. Info from MR7350 ofc.

1 Like

Some investigations with available USB devices.

T&G USB2.0 4Gb and Transcend USB2.0 16Gb. Same with CP2102 USB-TTL.

[18477.909453] usb 1-1: new high-speed USB device number 101 using xhci-hcd
[18478.069492] usb 1-1: device descriptor read/64, error -71
[18478.349481] usb 1-1: device descriptor read/64, error -71
[18478.619476] usb 1-1: new high-speed USB device number 102 using xhci-hcd
[18478.769452] usb 1-1: device descriptor read/64, error -71
[18479.039493] usb 1-1: device descriptor read/64, error -71
[18479.159517] usb usb1-port1: attempt power cycle
[18479.629429] usb 1-1: new high-speed USB device number 103 using xhci-hcd
[18479.629546] usb 1-1: Device not responding to setup address.
[18479.849449] usb 1-1: Device not responding to setup address.
[18480.069411] usb 1-1: device not accepting address 103, error -71
[18480.229430] usb 1-1: new high-speed USB device number 104 using xhci-hcd
[18480.229550] usb 1-1: Device not responding to setup address.
[18480.449460] usb 1-1: Device not responding to setup address.
[18480.669404] usb 1-1: device not accepting address 104, error -71
[18480.669559] usb usb1-port1: unable to enumerate USB device

JMicron JMS578/9 USB-SATA

[19304.341791] usb usb1-port1: Cannot enable. Maybe the USB cable is bad?
[19305.301785] usb usb1-port1: Cannot enable. Maybe the USB cable is bad?
[19305.301935] usb usb1-port1: attempt power cycle
[19306.371754] usb usb1-port1: Cannot enable. Maybe the USB cable is bad?
[19307.331775] usb usb1-port1: Cannot enable. Maybe the USB cable is bad?
[19307.331927] usb usb1-port1: unable to enumerate USB device
[19335.801521] usb usb1-port1: Cannot enable. Maybe the USB cable is bad?
[19336.761519] usb usb1-port1: Cannot enable. Maybe the USB cable is bad?
[19336.761669] usb usb1-port1: attempt power cycle

7-port USB hub (x4 ports USB3.0 on VL812 and x3 USB2.0 ports on SL 2.2s)

[19541.359628] usb 1-1: new low-speed USB device number 124 using xhci-hcd
[19541.509623] usb 1-1: device descriptor read/64, error -71
[19541.779607] usb 1-1: device descriptor read/64, error -71
[19545.559708] usb usb2-port1: Cannot enable. Maybe the USB cable is bad?
[19546.269575] usb usb1-port1: Cannot enable. Maybe the USB cable is bad?
[19546.269698] usb usb1-port1: attempt power cycle

Genesys Logic GL3523 USB3.0 hub

[19716.398038] usb 1-1: new high-speed USB device number 2 using xhci-hcd
[19716.631105] hub 1-1:1.0: USB hub found
[19716.631511] hub 1-1:1.0: 4 ports detected
[19720.498096] usb usb2-port1: Cannot enable. Maybe the USB cable is bad?
[19724.818022] usb usb2-port1: Cannot enable. Maybe the USB cable is bad?

CH341A SPI Programmer (no driver installed) works fine.

[19811.917181] usb 1-1: new full-speed USB device number 11 using xhci-hcd
lsusb -v
Bus 001 Device 011: ID 1a86:5512  
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass          255 
  bDeviceSubClass         0 
  bDeviceProtocol         2 
  bMaxPacketSize0         8
  idVendor           0x1a86 
  idProduct          0x5512 
  bcdDevice            3.04
  iManufacturer           0 
  iProduct                0 
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0027
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower               96mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           3
      bInterfaceClass       255 
      bInterfaceSubClass      1 
      bInterfaceProtocol      2 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1
Device Status:     0x0000
  (Bus Powered)

Powercom BNT-800AP USB UPS (NUT usbhid-ups driver) constantly reconnects.

[19918.456278] usb 1-1: new low-speed USB device number 12 using xhci-hcd
[19918.787006] hid-generic 0003:0D9F:0004.000B: hiddev96,hidraw0: USB HID v1.00 Device [POWERCOM Co.,LTD HID UPS Battery] on usb-xhci-hcd.0.auto-1/input0
[19922.328083] usb 1-1: USB disconnect, device number 12
[19924.996132] usb 1-1: new low-speed USB device number 13 using xhci-hcd
[19925.289154] hid-generic 0003:0D9F:0004.000C: hiddev96,hidraw0: USB HID v1.00 Device [POWERCOM Co.,LTD HID UPS Battery] on usb-xhci-hcd.0.auto-1/input0
[19928.782521] usb 1-1: USB disconnect, device number 13
[19931.456105] usb 1-1: new low-speed USB device number 14 using xhci-hcd
[19931.791519] hid-generic 0003:0D9F:0004.000D: hiddev96,hidraw0: USB HID v1.00 Device [POWERCOM Co.,LTD HID UPS Battery] on usb-xhci-hcd.0.auto-1/input0
[19935.322529] usb 1-1: USB disconnect, device number 14
lsusb -v
Bus 001 Device 017: ID 0d9f:0004 POWERCOM Co.,LTD HID UPS Battery
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x0d9f 
  idProduct          0x0004 
  bcdDevice            0.02
  iManufacturer           3 POWERCOM Co.,LTD
  iProduct                1 HID UPS Battery
  iSerial                 2 004-0D9F-000
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0022
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.00
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     996
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval             100
Device Status:     0x0001
  Self Powered

Transcend JetFlash 730 32GB USB3.0 flash drive is not recognized at all, not on stock firmware, nor on the OpenWrt. But via USB2.0 cable it tries and fails.

[21711.040052] usb 1-1.3: new high-speed USB device number 24 using xhci-hcd
[21711.173107] usb-storage 1-1.3:1.0: USB Mass Storage device detected
[21711.174969] scsi host2: usb-storage 1-1.3:1.0
[21712.260670] scsi 2:0:0:0: Direct-Access     JetFlash Transcend 32GB   1100 PQ: 0 ANSI: 6
[21712.261377] sd 2:0:0:0: Attached scsi generic sg2 type 0
[21712.262022] sd 2:0:0:0: [sdc] 59725824 512-byte logical blocks: (30.6 GB/28.5 GiB)
[21712.273374] sd 2:0:0:0: [sdc] Write Protect is off
[21712.280526] sd 2:0:0:0: [sdc] Mode Sense: 43 00 00 00
[21712.280699] sd 2:0:0:0: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[21712.390071] usb 1-1.3: reset high-speed USB device number 24 using xhci-hcd
[21717.570007] usb 1-1.3: device descriptor read/64, error -110

Silicon Power USB3.0 32Gb flash drive is the only one that works in USB3.0 mode.

[18575.388574] usb 2-1: new SuperSpeed USB device number 4 using xhci-hcd
[18575.420546] usb-storage 2-1:1.0: USB Mass Storage device detected
[18575.421095] scsi host0: usb-storage 2-1:1.0
[18576.459279] scsi 0:0:0:0: Direct-Access     UFD 3.0  Silicon-Power32G PMAP PQ: 0 ANSI: 6
[18576.459988] sd 0:0:0:0: Attached scsi generic sg0 type 0
[18576.460837] sd 0:0:0:0: [sda] 60530688 512-byte logical blocks: (31.0 GB/28.9 GiB)
[18576.471975] sd 0:0:0:0: [sda] Write Protect is off
[18576.479166] sd 0:0:0:0: [sda] Mode Sense: 45 00 00 00
[18576.479438] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[18576.669760]  sda: sda1
[18576.670867] sd 0:0:0:0: [sda] Attached SCSI removable disk
lsusb -v
Bus 002 Device 004: ID 13fe:5400 UFD 3.0 Silicon-Power32G
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               3.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         9
  idVendor           0x13fe 
  idProduct          0x5400 
  bcdDevice            1.10
  iManufacturer           1 UFD 3.0
  iProduct                2 Silicon-Power32G
  iSerial                 3 P170307507087ADF871DDF86
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x002c
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              504mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 
      bInterfaceSubClass      6 
      bInterfaceProtocol     80 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst               3
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0400  1x 1024 bytes
        bInterval               0
        bMaxBurst               3
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x0016
  bNumDeviceCaps          2
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x00000006
      BESL Link Power Management (LPM) Supported
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   2
      Lowest fully-functional device speed is High Speed (480Mbps)
    bU1DevExitLat          10 micro seconds
    bU2DevExitLat        2047 micro seconds
Device Status:     0x0000
  (Bus Powered)

Genesys Logic GL3523 USB3.0 hub and 2x JMicron JMS578/9 USB-SATA with 2TB and 3TB HDDs connected via USB2.0 cable works as expected.

[21048.376348] usb 1-1: new high-speed USB device number 21 using xhci-hcd
[21048.599122] hub 1-1:1.0: USB hub found
[21048.599496] hub 1-1:1.0: 4 ports detected
[21048.966355] usb 1-1.1: new high-speed USB device number 22 using xhci-hcd
[21049.179194] scsi host0: uas
[21049.180489] scsi 0:0:0:0: Direct-Access     WDC WD30 EZRX-00DC0B0     3102 PQ: 0 ANSI: 6
[21049.184205] sd 0:0:0:0: Attached scsi generic sg0 type 0
[21049.184648] sd 0:0:0:0: [sda] 5860533168 512-byte logical blocks: (3.00 TB/2.73 TiB)
[21049.194473] sd 0:0:0:0: [sda] 4096-byte physical blocks
[21049.202469] sd 0:0:0:0: [sda] Write Protect is off
[21049.207141] sd 0:0:0:0: [sda] Mode Sense: 5f 00 00 08
[21049.207546] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[21049.212338] sd 0:0:0:0: [sda] Optimal transfer size 33553920 bytes not a multiple of physical block size (4096 bytes)
[21049.276316] usb 1-1.2: new high-speed USB device number 23 using xhci-hcd
[21049.499363] scsi host1: uas
[21049.500719] scsi 1:0:0:0: Direct-Access     TOSHIBA  DT01ACA200       3102 PQ: 0 ANSI: 6
[21049.502525] scsi 1:0:0:0: Attached scsi generic sg1 type 0
[21050.012056] sd 1:0:0:0: [sdb] 3907029168 512-byte logical blocks: (2.00 TB/1.82 TiB)
[21050.012122] sd 1:0:0:0: [sdb] 4096-byte physical blocks
[21050.019134] sd 1:0:0:0: [sdb] Write Protect is off
[21050.023848] sd 1:0:0:0: [sdb] Mode Sense: 5f 00 00 08
[21050.024247] sd 1:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
[21050.029042] sd 1:0:0:0: [sdb] Optimal transfer size 33553920 bytes not a multiple of physical block size (4096 bytes)
[21050.060831] sd 1:0:0:0: [sdb] Attached SCSI disk
[21050.354942] BTRFS info (device sdb): setting nodatacow, compression disabled
[21050.355004] BTRFS info (device sdb): turning on async discard
[21050.361268] BTRFS info (device sdb): use no compression
[21050.366742] BTRFS info (device sdb): using free space tree
[21050.371747] BTRFS info (device sdb): has skinny extents
[21052.276736] BTRFS info (device sdb): cleaning free space cache v1
[21052.494315] BTRFS info (device sdb): checking UUID tree
[21056.310937] sd 0:0:0:0: [sda] Attached SCSI disk
[21056.596348] BTRFS info (device sda): setting nodatacow, compression disabled
[21056.596408] BTRFS info (device sda): turning on async discard
[21056.602478] BTRFS info (device sda): use no compression
[21056.608131] BTRFS info (device sda): using free space tree
[21056.613149] BTRFS info (device sda): has skinny extents
lsusb -v
Bus 001 Device 023: ID 0080:a001 TOSHIBA DT01ACA200
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0080 
  idProduct          0xa001 
  bcdDevice           31.02
  iManufacturer           1 TOSHIBA
  iProduct                2 DT01ACA200
  iSerial                 3 Y5QJ57PTSTZ5
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0055
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 
      bInterfaceSubClass      6 
      bInterfaceProtocol     80 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       1
      bNumEndpoints           4
      bInterfaceClass         8 
      bInterfaceSubClass      6 
      bInterfaceProtocol     98 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Command pipe (0x01)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Status pipe (0x02)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Data-in pipe (0x03)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Data-out pipe (0x04)
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x0016
  bNumDeviceCaps          2
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x00000f0e
      BESL Link Power Management (LPM) Supported
    BESL value     3840 us 
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat          10 micro seconds
    bU2DevExitLat          32 micro seconds
Device Status:     0x0000
  (Bus Powered)


Bus 001 Device 022: ID 0080:a001 Western Digital WDC WD30EZRX-00DC0B0
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.10
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x0080 
  idProduct          0xa001 
  bcdDevice           31.02
  iManufacturer           1 Western Digital
  iProduct                2 WDC WD30EZRX-00DC0B0
  iSerial                 3 WMC1T1872664
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0055
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 
      bInterfaceSubClass      6 
      bInterfaceProtocol     80 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       1
      bNumEndpoints           4
      bInterfaceClass         8 
      bInterfaceSubClass      6 
      bInterfaceProtocol     98 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Command pipe (0x01)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Status pipe (0x02)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Data-in pipe (0x03)
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
        Data-out pipe (0x04)
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x0016
  bNumDeviceCaps          2
  USB 2.0 Extension Device Capability:
    bLength                 7
    bDescriptorType        16
    bDevCapabilityType      2
    bmAttributes   0x00000f0e
      BESL Link Power Management (LPM) Supported
    BESL value     3840 us 
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x00
    wSpeedsSupported   0x000e
      Device can operate at Full Speed (12Mbps)
      Device can operate at High Speed (480Mbps)
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   1
      Lowest fully-functional device speed is Full Speed (12Mbps)
    bU1DevExitLat          10 micro seconds
    bU2DevExitLat          32 micro seconds
Device Status:     0x0000
  (Bus Powered)


Bus 001 Device 021: ID 05e3:0610 GenesysLogic USB2.0 Hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            9 
  bDeviceSubClass         0 
  bDeviceProtocol         2 
  bMaxPacketSize0        64
  idVendor           0x05e3 
  idProduct          0x0610 
  bcdDevice            5.11
  iManufacturer           1 GenesysLogic
  iProduct                2 USB2.0 Hub
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0029
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 
      bInterfaceSubClass      0 
      bInterfaceProtocol      1 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0001  1x 1 bytes
        bInterval              12
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass         9 
      bInterfaceSubClass      0 
      bInterfaceProtocol      2 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0001  1x 1 bytes
        bInterval              12
Hub Descriptor:
  bLength               9
  bDescriptorType      41
  nNbrPorts             4
  wHubCharacteristic 0x00e9
    Per-port power switching
    Per-port overcurrent protection
    TT think time 32 FS bits
    Port indicators
  bPwrOn2PwrGood       50 * 2 milli seconds
  bHubContrCurrent    100 milli Ampere
  DeviceRemovable    0x00
  PortPwrCtrlMask    0xff
 Hub Port Status:
   Port 1: 0000.0503 highspeed power enable connect
   Port 2: 0000.0503 highspeed power enable connect
   Port 3: 0000.0100 power
   Port 4: 0000.0100 power
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass            9 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0001
  Self Powered

So, looks like it's a driver issue.

Personally, I have a MR8300ca v1.1 and I've been running 22.03 and recently snapshot and I don't have any problem with USB: I tried 3 devices (USB2 and USB3 wit ext4, ntfs and exfat) and run ksmbd and minidlna and everything is fine.

Did you do first the linksys "guided first steps" with the router? Or did you directly install openwrt firmware?

Not sure what "guided first steps" are. I followed instructions here: https://openwrt.org/toh/linksys/mr8300?s[]=linksys&s[]=mr8300.

He meant the installation process that Linksys OEM needs at first start. I guess he is trying to know if completing that process can have some influence on the USB working.

1 Like

When I received the router, I plugged it and left it running for 30 minutes before flashing Openwrt. Never used the original firmware except for flashing.

1 Like

Quick question, if you speak about MR8300ca, do you mean that you have a model that is targeted to the Canadian market?

For comparison, mine has the following product sticker

Yes, I bought it from Amazon Canada but really, I don't think it's any different (I have exactly the same sticker on the router but on the box there's the ca suffix).

BTW, here's my list of additional packages I use for the snapshot:

luci-app-firewall luci-app-opkg luci-app-uhttpd luci-proto-ipv6 luci-theme-openwrt-2020 luci-app-adblock tcpdump-mini curl block-mount e2fsprogs kmod-fs-ext4 kmod-fs-ntfs kmod-fs-vfat kmod-fs-exfat kmod-fs-f2fs kmod-usb-storage kmod-usb-storage-uas fdisk luci-app-ksmbd ksmbd-avahi-service wsdd2 luci-app-ddns ddns-scripts-noip luci-app-wireguard qrencode stubby bash luci-app-minidlna luci-app-sqm htop mc 
-kmod-ath10k-ct -ath10k-firmware-qca4019-ct -ath10k-firmware-qca9888-ct kmod-ath10k ath10k-firmware-qca4019 ath10k-firmware-qca9888 luci-app-advanced-reboot 
-wpad-basic-mbedtls wpad-mesh-mbedtls mesh11sd