Confusing USB device conflict

Mark Millard marklmi at yahoo.com
Tue Jun 9 00:08:05 UTC 2020


On 2020-Jun-8, at 16:03, bob prohaska <fbsd at www.zefox.net> wrote:

> On Sat, Jun 06, 2020 at 06:22:03PM -0700, Mark Millard wrote:
>> 
>> 
>> 
>> Does this happen with FreeBSD head? It looked like there
>> was a late 2019 check-in that was related to a context
>> that involved the above types of messages on a RPi*. If
>> you are lucky, may be there is something someone could
>> MFC back into 12 that would help. (I do not know the
>> details or if what I saw really would help if head
>> works okay.)
>> 
> [In sum, the new hub can't be hot-swapped. I thought that would
> be possible, but if not there's nothing wrong]

Interesting.

As I have my root file system for booting on the powered
hub, I do not ever hot-swap the powered hub. So I'd never
have noticed such behavior.

I can probably get access to another one at some point,
of the same type as is used at boot, and plug it in to
a separate port while the RPi3 is in operation.

> Now using a Pi3:
> 
> Head as of r361820 behaves differently than the Pi2 running 12.1, 
> but it does not seem better: Plugging the new hub and disk into 
> a running machine produces:
> 
> ugen0.6: <GenesysLogic USB2.0 Hub> at usbus0
> uhub2 on uhub1
> uhub2: <GenesysLogic USB2.0 Hub, class 9/0, rev 2.00/92.24, addr 6> on usbus0
> uhub2: MTT enabled
> uhub2: 4 ports with 4 removable, self powered
> usb_alloc_device: set address 8 failed (USB_ERR_IOERROR, ignored)
> usbd_setup_device_desc: getting device descriptor at addr 8 failed, USB_ERR_IOERROR
> usbd_req_re_enumerate: addr=8, set address failed! (USB_ERR_IOERROR, ignored)
> smsc0: warning: bulk read error, USB_ERR_IOERROR
> usbd_setup_device_desc: getting device descriptor at addr 8 failed, USB_ERR_IOERROR
> usbd_req_re_enumerate: addr=8, set address failed! (USB_ERR_IOERROR, ignored)
> smsc0: warning: Failed to read register 0x114
> smsc0: warning: MII is busy
> smsc0: warning: Failed to read register 0x114
> smsc0: warning: MII is busy
> smsc0: warning: Failed to read register 0x114
> smsc0: warning: MII is busy
> smsc0: warning: Failed to read register 0x114
> smsc0: warning: MII is busy
> usbd_setup_device_desc: getting device descriptor at addr 8 failed, USB_ERR_TIMEOUT
> smsc0: warning: Failed to read register 0x114
> smsc0: warning: MII is busy
> 
> The smsc0 complaints continued, so I unplugged the hub and disk .
> To my surprise the error messages didn't stop, but they did change:
> 
> usb_alloc_device: set address 2 failed (USB_ERR_TIMEOUT, ignored)
> usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_TIMEOUT
> usbd_req_re_enumerate: addr=2, set address failed! (USB_ERR_TIMEOUT, ignored)
> usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_TIMEOUT
> usbd_req_re_enumerate: addr=2, set address failed! (USB_ERR_TIMEOUT, ignored)
> usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_TIMEOUT
> usbd_req_re_enumerate: addr=2, set address failed! (USB_ERR_TIMEOUT, ignored)
> usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_TIMEOUT
> usbd_req_re_enumerate: addr=2, set address failed! (USB_ERR_TIMEOUT, ignored)
> usbd_setup_device_desc: getting device descriptor at addr 2 failed, USB_ERR_TIMEOUT
> ugen0.2: <Unknown > at usbus0 (disconnected)
> 
> This looked like an endless loop, so I rebooted.
> 
> Next, I tried the new 1TB disk with the old hub. worked fine.
> 
> Then I tried the new hub with the old 80GB disk. The console reported:
> uhub2: <GenesysLogic USB2.0 Hub, class 9/0, rev 2.00/92.24, addr 7> on usbus0
> uhub2: MTT enabled
> uhub2: 4 ports with 4 removable, self powered
> usb_alloc_device: set address 8 failed (USB_ERR_IOERROR, ignored)
> usbd_setup_device_desc: getting device descriptor at addr 8 failed, USB_ERR_IOERROR
> usbd_req_re_enumerate: addr=8, set address failed! (USB_ERR_STALLED, ignored)
> usbd_setup_device_desc: getting device descriptor at addr 8 failed, USB_ERR_STALLED
> usbd_req_re_enumerate: addr=8, set address failed! (USB_ERR_STALLED, ignored)
> usbd_setup_device_desc: getting device descriptor at addr 8 failed, USB_ERR_STALLED
> usbd_req_re_enumerate: addr=8, set address failed! (USB_ERR_STALLED, ignored)
> usbd_setup_device_desc: getting device descriptor at addr 8 failed, USB_ERR_STALLED
> usbd_req_re_enumerate: addr=8, set address failed! (USB_ERR_STALLED, ignored)
> usbd_setup_device_desc: getting device descriptor at addr 8 failed, USB_ERR_STALLED
> ugen0.8: <Unknown > at usbus0 (disconnected)
> uhub_reattach_port: could not allocate new device
> uhub_explore: illegal enable change, port 1
> 
> The error stream stopped, the disk didn't show up in /dev.
> Usbconfig reports 
> ugen0.7: <GenesysLogic USB2.0 Hub> at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=SAVE (100mA)
> Not sure how that gybes with address 8 in the console messages.
> 
> Finally, I tried leaving the new hub connected with the old disk
> and rebooting. Came up just fine. Unplugging the old disk and
> plugging the new disk in its place also works fine.
> 
> Likewise, with 12.1 the Pi3 works correctly provided the hub
> is connected before booting. Didn't try the other permutations.
> 
> So, if hot-swapping the hub isn't in the cards, things seem
> to work. 
> 
> The messages from smsc0 are still puzzling. I gather
> it's a network device, which I don't have.  

Yes you do: smsc0 is for the built-in Ethernet on
the RPi3:

# grep -ri smsc /usr/src/sys/conf/ | more
/usr/src/sys/conf/NOTES:device          smcphy          # SMSC LAN91C111
/usr/src/sys/conf/files:dev/mii/smscphy.c               optional miibus | smscphy
/usr/src/sys/conf/files:dev/usb/net/if_smsc.c           optional smsc
/usr/src/sys/conf/files:                                         rue | smsc | udav | ure | urndis | muge

Note that /usr/src/sys/conf/files has:

dev/usb/net/usb_ethernet.c      optional uether | aue | axe | axge | cdce | \
                                         cdceem | cue | ipheth | kue | mos | \
                                         rue | smsc | udav | ure | urndis | muge

# grep -ri smsc /usr/src/sys/*/conf/ | more
/usr/src/sys/arm/conf/GENERIC:device            smsc                    # SMSC LAN91C111
/usr/src/sys/arm/conf/RPI-B:device              smscphy
/usr/src/sys/arm/conf/RPI-B:device              smsc
/usr/src/sys/arm/conf/SOCFPGA:device            smsc
/usr/src/sys/arm/conf/SOCFPGA:device            smscphy
/usr/src/sys/arm64/conf/NOTES:device    smc             # SMSC LAN91C111
/usr/src/sys/arm64/conf/NOTES:device            smsc
/usr/src/sys/arm64/conf/GENERIC:device          smc             # SMSC LAN91C111
/usr/src/sys/arm64/conf/GENERIC:device          smsc

Note that /usr/src/sys/arm64/conf/GENERIC has:

# USB ethernet support
device          muge
device          smcphy
device          smsc

On a RPi3 (omitted text indicated with ". . ."):

# devinfo 
nexus0
 ofwbus0
   psci0
   simplebus0
     . . .
     bcm283x_dwcotg0
       usbus0
         uhub0
           uhub1
             smsc0
               miibus0
                 smscphy0
             uhub3
               umass0
             uhub2
               ukbd0
               uhid0
               ums0
     . . .
   ofw_clkbus0
   . . .
 cryptosoft0

(Context: head -r360311 based.)

So the RPi3's Ethernet is connected to the
internal uhub1. uhub3 is the external powered
hub and is connected to the same RPi3 internal
hub.

I expect that if you do a "devinfo" you will
see a similar arrangement for the smsc0 in your
context.


===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)



More information about the freebsd-arm mailing list