NetBSD Problem Report #60021

From mac@culver.net  Fri Feb 20 03:39:51 2026
Return-Path: <mac@culver.net>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256
	 client-signature RSA-PSS (2048 bits) client-digest SHA256)
	(Client CN "mail.netbsd.org", Issuer "R13" (verified OK))
	by mollari.NetBSD.org (Postfix) with ESMTPS id 734331A9239
	for <gnats-bugs@gnats.NetBSD.org>; Fri, 20 Feb 2026 03:39:51 +0000 (UTC)
Message-Id: <20260220033945.CEBAE17C4F33@ss.culver.net>
Date: Fri, 20 Feb 2026 03:39:45 +0000 (UTC)
From: mac@culver.net
Reply-To: mac@culver.net
To: gnats-bugs@NetBSD.org
Subject: USB-only boot: uhub0 attaches but uhub1 never appears, no hotplug events; SD-boot sees hub+umass fine
X-Send-Pr-Version: 3.95
X-From4GNATS: "mac@culver.net via gnats" <gnats-admin@NetBSD.org>

>Number:         60021
>Category:       port-arm
>Synopsis:       USB-only boot: uhub0 attaches but uhub1 never appears, no hotplug events; SD-boot sees hub+umass fi\
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    skrll
>State:          closed
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Feb 20 03:40:00 +0000 2026
>Closed-Date:    Fri Aug 21 06:36:49 +0000 2026
>Last-Modified:  Fri Aug 21 06:36:49 +0000 2026
>Originator:     mac@culver.net
>Release:        NetBSD 11_0_RC1
>Organization:

>Environment:
NetBSD arm64 11.0_RC1 NetBSD 11.0_RC1 (GENERIC64) #0: Fri Feb  6 08:24:25 UTC 2026  mkrepro@mkrepro.NetBSD.org:/usr\
/src/sys/arch/evbarm/compile/GENERIC64 evbarm

System: NetBSD arm64 11.0_RC1 NetBSD 11.0_RC1 (GENERIC64) #0: Fri Feb  6 08:24:25 UTC 2026  mkrepro@mkrepro.NetBSD.\
org:/usr/src/sys/arch/evbarm/compile/GENERIC64 evbarm

Architecture: arm64
Machine: RPi 3B
>Description:
        using either MBR or non-MBR image boots via sdcard just fine.  Same image on USB stick does not
>How-To-Repeat:
        Write generic arm64 image onto USB stick, insert into RPi 3B, power up

Here is the sdcard boot:

[     1.000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
[     1.000000]     2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,
[     1.000000]     2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023,
[     1.000000]     2024, 2025, 2026
[     1.000000]     The NetBSD Foundation, Inc.  All rights reserved.
[     1.000000] Copyright (c) 1982, 1986, 1989, 1991, 1993
[     1.000000]     The Regents of the University of California.  All rights reserved.

[     1.000000] NetBSD 11.0_RC1 (GENERIC64) #0: Fri Feb  6 08:24:25 UTC 2026
[     1.000000]         mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/evbarm/compile/GENERIC64
[     1.000000] total memory = 930 MB
[     1.000000] avail memory = 895 MB
[     1.000000] timecounter: Timecounters tick every 10.000 msec
[     1.000000] Kernelized RAIDframe activated
[     1.000000] armfdt0 (root)
[     1.000000] simplebus0 at armfdt0: Raspberry Pi 3 Model B Rev 1.2
[     1.000000] simplebus1 at simplebus0
[     1.000000] simplebus2 at simplebus0
[     1.000000] cpus0 at simplebus0
[     1.000000] simplebus3 at simplebus0
[     1.000000] cpu0 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x0
[     1.000000] cpu0: package 0, core 0, smt 0, numa 0
[     1.000000] cpu0: IC enabled, DC enabled, EL0/EL1 stack Alignment check enabled
[     1.000000] cpu0: Cache Writeback Granule 16B, Exclusives Reservation Granule 16B
[     1.000000] cpu0: Dcache line 64, Icache line 64, DIC=0, IDC=0, LoUU=1, LoC=2, LoUIS=1
[     1.000000] cpu0: L1 32KB/64B 2-way (256 set) VIPT Instruction cache
[     1.000000] cpu0: L1 32KB/64B 4-way (128 set) PIPT Data cache
[     1.000000] cpu0: L2 512KB/64B 16-way (512 set) PIPT Unified cache
[     1.000000] cpu0: revID=0x80, PMCv3, 4k table, 64k table, 16bit ASID
[     1.000000] cpu0: auxID=0x10000, FP, CRC32, NEON, rounding, NaN propagation, denormals, 32x64bitRegs, Fused Multiply-Add
[     1.000000] cpu1 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x1
[     1.000000] cpu1: package 0, core 1, smt 0, numa 0
[     1.000000] cpu1: IC enabled, DC enabled, EL0/EL1 stack Alignment check enabled
[     1.000000] cpu1: Cache Writeback Granule 16B, Exclusives Reservation Granule 16B
[     1.000000] cpu1: Dcache line 64, Icache line 64, DIC=0, IDC=0, LoUU=1, LoC=2, LoUIS=1
[     1.000000] cpu1: L1 32KB/64B 2-way (256 set) VIPT Instruction cache
[     1.000000] cpu1: L1 32KB/64B 4-way (128 set) PIPT Data cache
[     1.000000] cpu1: L2 512KB/64B 16-way (512 set) PIPT Unified cache
[     1.000000] cpu1: revID=0x80, PMCv3, 4k table, 64k table, 16bit ASID
[     1.000000] cpu1: auxID=0x10000, FP, CRC32, NEON, rounding, NaN propagation, denormals, 32x64bitRegs, Fused Multiply-Add
[     1.000000] cpu2 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x2
[     1.000000] cpu2: package 0, core 2, smt 0, numa 0
[     1.000000] cpu2: IC enabled, DC enabled, EL0/EL1 stack Alignment check enabled
[     1.000000] cpu2: Cache Writeback Granule 16B, Exclusives Reservation Granule 16B
[     1.000000] cpu2: Dcache line 64, Icache line 64, DIC=0, IDC=0, LoUU=1, LoC=2, LoUIS=1
[     1.000000] cpu2: L1 32KB/64B 2-way (256 set) VIPT Instruction cache
[     1.000000] cpu2: L1 32KB/64B 4-way (128 set) PIPT Data cache
[     1.000000] cpu2: L2 512KB/64B 16-way (512 set) PIPT Unified cache
[     1.000000] cpu2: revID=0x80, PMCv3, 4k table, 64k table, 16bit ASID
[     1.000000] cpu2: auxID=0x10000, FP, CRC32, NEON, rounding, NaN propagation, denormals, 32x64bitRegs, Fused Multiply-Add
[     1.000000] cpu3 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x3
[     1.000000] cpu3: package 0, core 3, smt 0, numa 0
[     1.000000] cpu3: IC enabled, DC enabled, EL0/EL1 stack Alignment check enabled
[     1.000000] cpu3: Cache Writeback Granule 16B, Exclusives Reservation Granule 16B
[     1.000000] cpu3: Dcache line 64, Icache line 64, DIC=0, IDC=0, LoUU=1, LoC=2, LoUIS=1
[     1.000000] cpu3: L1 32KB/64B 2-way (256 set) VIPT Instruction cache
[     1.000000] cpu3: L1 32KB/64B 4-way (128 set) PIPT Data cache
[     1.000000] cpu3: L2 512KB/64B 16-way (512 set) PIPT Unified cache
[     1.000000] cpu3: revID=0x80, PMCv3, 4k table, 64k table, 16bit ASID
[     1.000000] cpu3: auxID=0x10000, FP, CRC32, NEON, rounding, NaN propagation, denormals, 32x64bitRegs, Fused Multiply-Add
[     1.000000] bcmicu0 at simplebus1
[     1.000000] fclock0 at simplebus2: 19200000 Hz fixed clock (osc)
[     1.000000] bcmcprman0 at simplebus1: BCM283x Clock Controller
[     1.000000] syscon0 at simplebus1autoconfiguration error: : couldn't get registers
[     1.000000] bcmaux0 at simplebus1
[     1.000000] fclock1 at simplebus2: 480000000 Hz fixed clock (otg)
[     1.000000] bcmicu1 at simplebus1: Multiprocessor
[     1.000000] gtmr0 at simplebus0: Generic Timer
[     1.000000] gtmr0: interrupting on local_intc irq 3
[     1.000000] armgtmr0 at gtmr0: Generic Timer (19200 kHz, virtual)
[     1.000000] timecounter: Timecounter "armgtmr0" frequency 19200000 Hz quality 500
[     1.000004] bcmgpio0 at simplebus1: GPIO controller 2835
[     1.000004] bcmgpio0: pins 0..31 interrupting on icu irq 49
[     1.000004] bcmgpio0: pins 32..54 interrupting on icu irq 50
[     1.000004] gpio0 at bcmgpio0: 54 pins
[     1.000004] plcom0 at simplebus1: ARM PL011 UART
[     1.000004] plcom0: txfifo 16 bytes
[     1.000004] plcom0: interrupting on icu irq 57
[     1.000004] com0 at simplebus1: BCM AUX UART, 1-byte FIFO
[     1.000004] com0: console
[     1.000004] com0: interrupting on icu irq 29, clock 800000000 Hz
[     1.000004] mmcpwrseq0 at simplebus0autoconfiguration error: : couldn't get reset GPIOs
[     1.000004] /soc/thermal@7e212000 at simplebus1 not configured
[     1.000004] bcmdmac0 at simplebus1: DMA0 DMA2 DMA4 DMA5 DMA6 DMA7 DMA8 DMA9 DMA10 DMA11
[     1.000004] /soc/power at simplebus1 not configured
[     1.000004] /phy at simplebus0 not configured
[     1.000004] bsciic0 at simplebus1: Broadcom Serial Controller
[     1.000004] bsciic0: interrupting on icu irq 53
[     1.000004] iic0 at bsciic0: I2C bus
[     1.000004] bcmmbox0 at simplebus1: VC mailbox
[     1.000004] bcmmbox0: interrupting on icu irq 65
[     1.000004] vcmbox0 at bcmmbox0
[     1.000004] /soc/timer@7e003000 at simplebus1 not configured
[     1.000004] /soc/txp@7e004000 at simplebus1 not configured
[     1.000004] bcmsdhost0 at simplebus1: SD HOST controller
[     1.000004] bcmsdhost0: interrupting on icu irq 56
[     1.000004] bsciic1 at simplebus1: Broadcom Serial Controller
[     1.000004] bsciic1: interrupting on icu irq 53
[     1.000004] iic1 at bsciic1: I2C bus
[     1.000004] /soc/pwm@7e20c000 at simplebus1 not configured
[     1.000004] sdhc0 at simplebus1: SDHC controller
[     1.000004] sdhc0: interrupting on icu irq 62
[     1.000004] bsciic2 at simplebus1: Broadcom Serial Controller
[     1.000004] bsciic2: interrupting on icu irq 53
[     1.000004] iic2 at bsciic2: I2C bus
[     1.000004] dwctwo0 at simplebus1: USB controller
[     1.000004] dwctwo0: interrupting on icu irq 9
[     1.000004] bcmpmwdog0 at simplebus1: Power management, Reset and Watchdog controller
[     1.000004] /soc/vec@7e806000 at simplebus1 not configured
[     1.000004] /soc/hdmi@7e902000 at simplebus1 not configured
[     1.000004] /soc/gpu at simplebus1 not configured
[     1.000004] genfb0 at simplebus1: switching to framebuffer console
[     1.000004] genfb0: framebuffer at 0xfe876000, size 1280x720, depth 32, stride 5120
[     1.000004] wsdisplay0 at genfb0 kbdmux 1: console (default, vt100 emulation)
[     1.000004] wsmux1: connecting to wsdisplay0
[     1.000004] wsdisplay0: screen 1-3 added (default, vt100 emulation)
[     1.000004] vchiq0 at simplebus1: BCM2835 VCHIQ
[     1.000004] armpmu0 at simplebus0: Performance Monitor Unit
[     1.000004] gpioleds0 at simplebus0:
[     1.000004] bcmrng0 at simplebus1: RNG
[     1.000004] entropy: ready
[     1.000004] timecounter: Timecounter "clockinterrupt" frequency 100 Hz quality 0
[     1.324135] sdmmc0 at bcmsdhost0
[     1.334137] sdhc0: SDHC 3.0, rev 153, caps <01610000/00000000>, platform DMA, 200000 kHz, HS 3.3V, re-tuning mode 1, 1024 byte blocks
[     1.344137] sdmmc1 at sdhc0 slot 0
[     1.354139] dwctwo0: Core Release: 2.80a (snpsid=4f54280a)
[     1.354139] usb0 at dwctwo0: USB revision 2.0
[     1.374142] armpmu0: interrupting on local_intc irq 9
[     1.374142] uhub0 at usb0: NetBSD (0x0000) DWC2 root hub (0x0000), class 9/0, rev 2.00/1.00, addr 1
[     1.384144] uhub0: 1 port with 1 removable, self powered
[     1.394149] IPsec: Initialized Security Association Processing.
[     1.464150] sdmmc0: direct I/O error 5, r=6 p=0xffffc000b14fce5c write
[     1.484151] sdmmc0: SD card status: 4-bit, C10, U1
[     1.494154] ld0 at sdmmc0: <0x1b:0x534d:EB1QT:0x30:0x5c8b610b:0x126>
[     1.504159] ld0: 30528 MB, 7753 cyl, 128 head, 63 sec, 512 bytes/sect x 62521344 sectors (0 bytes/physsect)
[     1.514156] ld0: GPT GUID: 3efb4280-0335-11f1-8000-000000000000
[     1.514156] dk0 at ld0: "EFI", 163840 blocks at 32768, type: msdos
[     1.514156] dk1 at ld0: "netbsd-root", 62316544 blocks at 196608, type: ffs
[     1.529851] ld0: 4-bit width, High-Speed/SDR25, 50.000 MHz
[     1.624164] sdmmc1: 4-bit width, 50.000 MHz
[     1.624164] bwfm0 at sdmmc1 function 1
[     1.634164] (manufacturer 0x2d0, product 0xa9a6) at sdmmc1 function 2 not configured
[     2.034193] uhub1 at uhub0 port 1: vendor 0424 (0x0424) product 9514 (0x9514), class 9/0, rev 2.00/2.00, addr 2
[     2.044194] uhub1: multiple transaction translators
[     2.054195] uhub1: 5 ports with 4 removable, self powered
[     2.894256] usmsc0 at uhub1 port 1
[     2.904256] usmsc0: vendor 0424 (0x0424) product ec00 (0xec00), rev 2.00/2.00, addr 3
[     2.914257] smscphy0 at usmsc0 phy 1: SMSC LAN8700 10/100 Ethernet Transceiver, rev. 3
[     2.924257] smscphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
[     2.934259] usmsc0: Ethernet address b8:27:eb:6a:20:4b
[     3.444293] umass0 at uhub1 port 4 configuration 1 interface 0
[     3.454294] umass0: Samsung (0x04e8) Flash Drive (0x6300), rev 2.10/11.00, addr 4
[     3.464294] umass0: using SCSI over Bulk-Only
[     3.514298] scsibus0 at umass0: 2 targets, 1 lun per target
[     3.514298] uhub0: autoconfiguration error: illegal enable change, port 1
[     4.184346] sd0 at scsibus0 target 0 lun 0: <Samsung, Flash Drive, 1100> disk removable
[     4.194351] sd0: fabricating a geometry
[     4.194351] sd0: 61188 MB, 61188 cyl, 64 head, 32 sec, 512 bytes/sect x 125313283 sectors
[     4.204348] sd0: fabricating a geometry
[     4.214350] swwdog0: software watchdog initialized
[     4.224349] WARNING: 3 errors while detecting hardware; check system log.
[     4.234351] boot device: ld0
[     4.234351] root on dk1
[     4.244351] root file system type: ffs
[     4.254352] kern.module.path=/stand/evbarm/11.0/modules
[     4.264352] WARNING: no TOD clock present
[     4.264352] vchiq0: interrupting on icu irq 66
[     4.264352] WARNING: using filesystem time
[     4.264352] vchiq: vchiq_init_state: slot_zero = 0xffffc000b1608000, is_master = 0
[     4.277456] WARNING: CHECK AND RESET THE DATE!
[     4.277499] vchiq: local ver 8 (min 3), remote ver 8.
[     4.277499] vcaudio0 at vchiq0: auds
[     4.284987] bwfm0: Firmware file default:    brcmfmac43430-sdio.bin
[     4.284987] bwfm0: Firmware file model-spec: brcmfmac43430-sdio.raspberrypi,3-model-b.bin
[     4.284987] audio0 at vcaudio0: playback
[     4.284987] audio0: slinear_le:16 -> slinear_le:16 2ch 48000Hz, blk 7680 bytes (40ms) for playback
[     4.303157] spkr0 at audio0: PC Speaker (synthesized)
[     4.303157] wsbell at spkr0 not configured
[     4.323156] bwfm0: Found Firmware file: brcmfmac43430-sdio.bin
[     4.343157] bwfm0: NVRAM file default:    brcmfmac43430-sdio.txt
[     4.343157] bwfm0: NVRAM file model-spec: brcmfmac43430-sdio.raspberrypi,3-model-b.txt
[     4.343157] bwfm0: Found NVRAM file: brcmfmac43430-sdio.raspberrypi,3-model-b.txt
[     4.343157] bwfm0: CLM file default:    brcmfmac43430-sdio.clm_blob
[     4.343157] bwfm0: CLM file model-spec: brcmfmac43430-sdio.raspberrypi,3-model-b.clm_blob
[     5.663257] bwfm0: CHIPACTIVE
[     5.763264] bwfm0: address b8:27:eb:3f:75:1e
[     5.773265] bwfm0: wl0: Oct 23 2017 03:55:53 version 7.45.98.38 (r674442 CY) FWID 01-e58d219f
[    40.166083] wsdisplay0: screen 4 added (default, vt100 emulation)


dmesg from FAILED usb stick boot attempt:


[ 1.0000000] NetBSD/evbarm (fdt) booting ... 
[ 1.0000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 
[ 1.0000000] 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, [ 1.0000000] 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 
[ 1.0000000] 2024, 2025, 2026 [ 1.0000000] The NetBSD Foundation, Inc. All rights reserved. 
[ 1.0000000] Copyright (c) 1982, 1986, 1989, 1991, 1993 
[ 1.0000000] The Regents of the University of California. All rights reserved. 
[ 1.0000000] NetBSD 11.0_RC1 (GENERIC64) #0: Fri Feb 6 08:24:25 UTC 2026 [ 1.0000000] mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/evbarm/compile/GENERIC64 
[ 1.0000000] total memory = 930 MB [ 1.0000000] avail memory = 895 MB [ 1.0000000] armfdt0 (root) 
[ 1.0000000] simplebus0 at armfdt0: Raspberry Pi 3 Model B Rev 1.2 
[ 1.0000000] simplebus1 at simplebus0 [ 1.0000000] simplebus2 at simplebus0 
[ 1.0000000] cpus0 at simplebus0 [ 1.0000000] simplebus3 at simplebus0 [ 1.0000000] cpu0 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x0 
[ 1.0000000] cpu0: package 0, core 0, smt 0, numa 0 [ 1.0000000] cpu1 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x1 
[ 1.0000000] cpu1: package 0, core 1, smt 0, numa 0 
[ 1.0000000] cpu2 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x2 
[ 1.0000000] cpu2: package 0, core 2, smt 0, numa 0 [ 1.0000000] cpu3 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x3 
[ 1.0000000] cpu3: package 0, core 3, smt 0, numa 0 
[ 1.0000000] bcmicu0 at simplebus1 [ 1.0000000] fclock0 at simplebus2: 19200000 Hz fixed clock (osc) 
[ 1.0000000] bcmcprman0 at simplebus1: BCM283x Clock Controller 
[ 1.0000000] syscon0 at simplebus1: couldn't get registers [ 1.0000000] bcmaux0 at simplebus1 
[ 1.0000000] fclock1 at simplebus2: 480000000 Hz fixed clock (otg) 
[ 1.0000000] bcmicu1 at simplebus1: Multiprocessor [ 1.0000000] gtmr0 at simplebus0: Generic Timer 
[ 1.0000000] gtmr0: interrupting on local_intc irq 3 
[ 1.0000000] armgtmr0 at gtmr0: Generic Timer (19200 kHz, virtual) 
[ 1.0000040] bcmgpio0 at simplebus1: GPIO controller 2835 [ 1.0000040] bcmgpio0: pins 0..31 interrupting on icu irq 49 
[ 1.0000040] bcmgpio0: pins 32..54 interrupting on icu irq 50 
[ 1.0000040] gpio0 at bcmgpio0: 54 pins [ 1.0000040] plcom0 at simplebus1: ARM PL011 UART 
[ 1.0000040] plcom0: txfifo 16 bytes 
[ 1.0000040] plcom0: interrupting on icu irq 57 
[ 1.0000040] com0 at simplebus1: BCM AUX UART, 1-byte FIFO 
[ 1.0000040] com0: console [ 1.0000040] com0: interrupting on icu irq 29, clock 800000000 Hz 
[ 1.0000040] mmcpwrseq0 at simplebus0: couldn't get reset GPIOs 
[ 1.0000040] /soc/thermal@7e212000 at simplebus1 not configured [ 1.0000040] bcmdmac0 at simplebus1: DMA0 DMA2 DMA4 DMA5 DMA6 DMA7 DMA8 DMA9 DMA10 DMA11 
[ 1.0000040] /soc/power at simplebus1 not configured [ 1.0000040] /phy at simplebus0 not configured 
[ 1.0000040] bsciic0 at simplebus1: Broadcom Serial Controller 
[ 1.0000040] bsciic0: interrupting on icu irq 53 [ 1.0000040] iic0 at bsciic0: I2C bus 
[ 1.0000040] bcmmbox0 at simplebus1: VC mailbox 
[ 1.0000040] bcmmbox0: interrupting on icu irq 65 
[ 1.0000040] vcmbox0 at bcmmbox0 [ 1.0000040] /soc/timer@7e003000 at simplebus1 not configured 
[ 1.0000040] /soc/txp@7e004000 at simplebus1 not configured 
[ 1.0000040] bcmsdhost0 at simplebus1: SD HOST controller [ 1.0000040] bcmsdhost0: interrupting on icu irq 56 
[ 1.0000040] bsciic1 at simplebus1: Broadcom Serial Controller 
[ 1.0000040] bsciic1: interrupting on icu irq 53 [ 1.0000040] iic1 at bsciic1: I2C bus 
[ 1.0000040] /soc/pwm@7e20c000 at simplebus1 not configured 
[ 1.0000040] sdhc0 at simplebus1: SDHC controller [ 1.0000040] sdhc0: interrupting on icu irq 62 
[ 1.0000040] bsciic2 at simplebus1: Broadcom Serial Controller 
[ 1.0000040] bsciic2: interrupting on icu irq 53 [ 1.0000040] iic2 at bsciic2: I2C bus 
[ 1.0000040] dwctwo0 at simplebus1: USB controller 
[ 1.0000040] dwctwo0: interrupting on icu irq 9 [ 1.0000040] bcmpmwdog0 at simplebus1: Power management, Reset and Watchdog controller 
[ 1.0000040] /soc/vec@7e806000 at simplebus1 not configured 
[ 1.0000040] /soc/hdmi@7e902000 at simplebus1 not configured [ 1.0000040] /soc/gpu at simplebus1 not configured 
[ 1.0000040] genfb0 at simplebus1: switching to framebuffer console 
[ 1.0000040] wsdisplay0 at genfb0 kbdmux 1: console (default, vt100 emulation) 
[ 1.0000040] vchiq0 at simplebus1: BCM2835 VCHIQ [ 1.0000040] armpmu0 at simplebus0: Performance Monitor Unit 
[ 1.0000040] gpioleds0 at simplebus0: 
[ 1.0000040] bcmrng0 at simplebus1: RNG 
[ 1.0000040] entropy: ready [ 1.3276864] sdmmc0 at bcmsdhost0 
[ 1.3376880] sdhc0: SDHC 3.0, rev 153, platform DMA, 200000 kHz, HS 3.3V, re-tuning mode 1, 1024 byte blocks 
[ 1.3476881] sdmmc1 at sdhc0 slot 0 
[ 1.3676894] usb0 at dwctwo0: USB revision 2.0 
[ 1.3876912] armpmu0: interrupting on local_intc irq 9 
[ 1.3876912] uhub0 at usb0: NetBSD (0x0000) DWC2 root hub (0x0000), class 9/0, rev 2.00/1.00, addr 1 
[ 1.4776999] sdmmc0: direct I/O error 5, r=6 p=0xffffc000b14fce5c write 
[ 1.4877014] sdmmc0: couldn't enable card: 5 [ 1.5977105] sdmmc1: 4-bit width, 50.000 MHz 
[ 1.5977105] bwfm0 at sdmmc1 function 1 
[ 1.6077105] (manufacturer 0x2d0, product 0xa9a6) at sdmmc1 function 2 not configured 
[ 1.6177115] swwdog0: software watchdog initialized 
[ 1.6177115] WARNING: 3 errors while detecting hardware; check system log. 
[ 1.6277118] boot device: <unknown> 
[ 1.6277118] unknown device major 0xffffffffffffffff 
[ 2.6277792] unknown device major 0xffffffffffffffff 
[ 3.6278463] unknown device major 0xffffffffffffffff 
[ 4.6279139] unknown device major 0xffffffffffffffff 
[ 5.6279809] unknown device major 0xffffffffffffffff 
[ 6.6280471] unknown device major 0xffffffffffffffff 
[ 7.6281136] unknown device major 0xffffffffffffffff 
[ 8.6281796] unknown device major 0xffffffffffffffff 
[ 9.6282456] unknown device major 0xffffffffffffffff 
[ 10.6283119] unknown device major 0xffffffffffffffff 
[ 11.6283785] unknown device major 0xffffffffffffffff 
[ 12.6284449] unknown device major 0xffffffffffffffff 
[ 13.6285113] unknown device major 0xffffffffffffffff 
[ 14.6285777] unknown device major 0xffffffffffffffff 
[ 15.6286439] unknown device major 0xffffffffffffffff 
[ 16.6287103] unknown device major 0xffffffffffffffff 
[ 17.6287768] unknown device major 0xffffffffffffffff 
[ 18.6288429] unknown device major 0xffffffffffffffff 
[ 19.6289094] unknown device major 0xffffffffffffffff 
[ 20.6289757] unknown device major 0xffffffffffffffff 
[ 21.6290416] unknown device major 0xffffffffffffffff 
[ 21.6290416] root device:


>Fix:

Unknown
>Release-Note:

>Audit-Trail:
From: Nick Hudson <nick.hudson@gmx.co.uk>
To: gnats-bugs@netbsd.org, port-arm-maintainer@netbsd.org,
 gnats-admin@netbsd.org, netbsd-bugs@netbsd.org
Cc: 
Subject: Re: port-arm/60021: USB-only boot: uhub0 attaches but uhub1 never
 appears, no hotplug events; SD-boot sees hub+umass fine
Date: Sat, 21 Feb 2026 10:39:41 +0000

 [...]

 > [ 1.0000040] dwctwo0 at simplebus1: USB controller
 > [ 1.0000040] dwctwo0: interrupting on icu irq 9 [ 1.0000040] bcmpmwdog0 at simplebus1: Power management, Reset and Watchdog controller
 [...]
 > [ 1.3676894] usb0 at dwctwo0: USB revision 2.0
 > [ 1.3876912] armpmu0: interrupting on local_intc irq 9
 > [ 1.3876912] uhub0 at usb0: NetBSD (0x0000) DWC2 root hub (0x0000), class 9/0, rev 2.00/1.00, addr 1
 > [ 1.4776999] sdmmc0: direct I/O error 5, r=6 p=0xffffc000b14fce5c write
 > [ 1.4877014] sdmmc0: couldn't enable card: 5 [ 1.5977105] sdmmc1: 4-bit width, 50.000 MHz
 > [ 1.5977105] bwfm0 at sdmmc1 function 1
 > [ 1.6077105] (manufacturer 0x2d0, product 0xa9a6) at sdmmc1 function 2 not configured
 > [ 1.6177115] swwdog0: software watchdog initialized
 > [ 1.6177115] WARNING: 3 errors while detecting hardware; check system log.
 > [ 1.6277118] boot device: <unknown>
 > [ 1.6277118] unknown device major 0xffffffffffffffff
 > [ 2.6277792] unknown device major 0xffffffffffffffff
 > [ 3.6278463] unknown device major 0xffffffffffffffff
 > [ 4.6279139] unknown device major 0xffffffffffffffff
 > [ 5.6279809] unknown device major 0xffffffffffffffff
 > [ 6.6280471] unknown device major 0xffffffffffffffff
 > [ 7.6281136] unknown device major 0xffffffffffffffff
 > [ 8.6281796] unknown device major 0xffffffffffffffff
 > [ 9.6282456] unknown device major 0xffffffffffffffff
 > [ 10.6283119] unknown device major 0xffffffffffffffff
 > [ 11.6283785] unknown device major 0xffffffffffffffff
 > [ 12.6284449] unknown device major 0xffffffffffffffff
 > [ 13.6285113] unknown device major 0xffffffffffffffff
 > [ 14.6285777] unknown device major 0xffffffffffffffff
 > [ 15.6286439] unknown device major 0xffffffffffffffff
 > [ 16.6287103] unknown device major 0xffffffffffffffff
 > [ 17.6287768] unknown device major 0xffffffffffffffff
 > [ 18.6288429] unknown device major 0xffffffffffffffff
 > [ 19.6289094] unknown device major 0xffffffffffffffff
 > [ 20.6289757] unknown device major 0xffffffffffffffff
 > [ 21.6290416] unknown device major 0xffffffffffffffff
 > [ 21.6290416] root device:

 This is almost certainly that autoconf doesn't wait (long enough) for sub-ordintate hubs

 https://nxr.netbsd.org/xref/src/sys/dev/usb/uhub.c#880

      880 	mutex_enter(&sc->sc_lock);
      881 	sc->sc_explorepending = false;
      882 	for (int i = 0; i < sc->sc_statuslen; i++) {
      883 		if (sc->sc_statuspend[i] != 0) {
      884 			memcpy(sc->sc_status, sc->sc_statuspend,
      885 			    sc->sc_statuslen);
      886 			memset(sc->sc_statuspend, 0, sc->sc_statuslen);
      887 			usb_needs_explore(sc->sc_hub);
      888 			break;
      889 		}
      890 	}
      891 	mutex_exit(&sc->sc_lock);
      892 	if (sc->sc_first_explore) {
      893 		config_pending_decr(sc->sc_dev);
      894 		sc->sc_first_explore = false;
      895 	}
      896

From: Taylor R Campbell <riastradh@NetBSD.org>
To: Nick Hudson <nick.hudson@gmx.co.uk>
Cc: mac@culver.net, gnats-bugs@NetBSD.org, netbsd-bugs@NetBSD.org
Subject: Re: port-arm/60021: USB-only boot: uhub0 attaches but uhub1 never
	appears, no hotplug events; SD-boot sees hub+umass fine
Date: Tue, 4 Aug 2026 13:34:02 +0000

 > Date: Sat, 21 Feb 2026 10:39:41 +0000
 > From: Nick Hudson <nick.hudson@gmx.co.uk>
 >=20
 > This is almost certainly that autoconf doesn't wait (long enough) for
 > sub-ordintate hubs
 >=20
 > https://nxr.netbsd.org/xref/src/sys/dev/usb/uhub.c#880
 >=20
 >      880 	mutex_enter(&sc->sc_lock);
 >      881 	sc->sc_explorepending =3D false;
 >      882 	for (int i =3D 0; i < sc->sc_statuslen; i++) {
 >      883 		if (sc->sc_statuspend[i] !=3D 0) {
 >      884 			memcpy(sc->sc_status, sc->sc_statuspend,
 >      885 			    sc->sc_statuslen);
 >      886 			memset(sc->sc_statuspend, 0, sc->sc_statuslen);
 >      887 			usb_needs_explore(sc->sc_hub);
 >      888 			break;
 >      889 		}
 >      890 	}
 >      891 	mutex_exit(&sc->sc_lock);
 >      892 	if (sc->sc_first_explore) {
 >      893 		config_pending_decr(sc->sc_dev);
 >      894 		sc->sc_first_explore =3D false;
 >      895 	}

 I don't understand, doesn't it wait for subordinate hubs?  Maybe the
 USB hub just doesn't report the device ready at first?

 Here's a fuller picture of the logic -- note that uhub_explore will
 _synchronously_ attach autoconf drivers for the devices it finds on
 the hub, and then uhub_attach will _also_ config_pending_incr:

     529 usbd_status
     530 uhub_explore(struct usbd_device *dev)
     531 {
 ...
     598 	for (port =3D 1; port <=3D hd->bNbrPorts; port++) {
     599 		up =3D &dev->ud_hub->uh_ports[port - 1];
 ...
     848 		/* Get device info and set its address. */
     849 		err =3D usbd_new_device(sc->sc_dev, dev->ud_bus,
     850 			  dev->ud_depth + 1, speed, port, up);
 ...
     858 		if (err) {
 ...
     872 		} else {
 ...
     878 			if (up->up_dev->ud_hub)
     879 				up->up_dev->ud_hub->uh_explore(up->up_dev);
     880 		}
     881 	}
     882 	mutex_enter(&sc->sc_lock);
     883 	sc->sc_explorepending =3D false;
     884 	for (int i =3D 0; i < sc->sc_statuslen; i++) {
     885 		if (sc->sc_statuspend[i] !=3D 0) {
     886 			memcpy(sc->sc_status, sc->sc_statuspend,
     887 			    sc->sc_statuslen);
     888 			memset(sc->sc_statuspend, 0, sc->sc_statuslen);
     889 			usb_needs_explore(sc->sc_hub);
     890 			break;
     891 		}
     892 	}
     893 	mutex_exit(&sc->sc_lock);
     894 	if (sc->sc_first_explore) {
     895 		config_pending_decr(sc->sc_dev);
     896 		sc->sc_first_explore =3D false;
     897 	}

 https://nxr.netbsd.org/xref/src/sys/dev/usb/uhub.c?r=3D1.163#529

 usbd_new_device synchronously attaches autoconf drivers:

    1394 usbd_status
    1395 usbd_new_device(device_t parent, struct usbd_bus *bus, int depth, i=
 nt speed,
    1396     int port, struct usbd_port *up)
    1397 {
 ...
    1606 	if (port =3D=3D 0) { /* root hub */
    1607 		KASSERT(addr =3D=3D 1);
    1608 		usbd_attach_roothub(parent, dev);
    1609 		return USBD_NORMAL_COMPLETION;
    1610 	}
    1611=20
    1612 	err =3D usbd_probe_and_attach(parent, dev, port, addr);
    1613 	if (err) {
    1614 		usbd_remove_device(dev, up);
    1615 		return err;
    1616 	}
    1617=20
    1618 	return USBD_NORMAL_COMPLETION;
    1619 }

 https://nxr.netbsd.org/xref/src/sys/dev/usb/usb_subr.c?r=3D1.281#1388

    1047 usbd_status
    1048 usbd_attach_roothub(device_t parent, struct usbd_device *dev)
    1049 {
 ...
    1065 	dv =3D config_found(parent, &uaa, NULL,
    1066 	    CFARGS(.iattr =3D "usbroothubif"));

 https://nxr.netbsd.org/xref/src/sys/dev/usb/usb_subr.c?r=3D1.281#1047

    1270 usbd_status
    1271 usbd_probe_and_attach(device_t parent, struct usbd_device *dev,
    1272     int port, int addr)
    1273 {
 ...
    1283 	err =3D usbd_attachwholedevice(parent, dev, port, 0);
    1284 	if (dev->ud_nifaces_claimed || err)
    1285 		return err;
 ...
    1290 	for (confi =3D 0; confi < dd->bNumConfigurations; confi++) {
 ...
    1305 		err =3D usbd_attachinterfaces(parent, dev, port, NULL);
 ...
    1313 		if (dev->ud_nifaces_claimed || err)
    1314 			return err;
    1315 	}
 ...
    1324 	err =3D usbd_attachwholedevice(parent, dev, port, 1);

 https://nxr.netbsd.org/xref/src/sys/dev/usb/usb_subr.c?r=3D1.281#1270

    1129 static usbd_status
    1130 usbd_attachwholedevice(device_t parent, struct usbd_device *dev, in=
 t port,
    1131     int usegeneric)
    1132 {
 ...
    1161 	dv =3D config_found(parent, &uaa, usbd_print,
    1162 			  CFARGS(.submatch =3D config_stdsubmatch,
    1163 				 .iattr =3D "usbdevif",
    1164 				 .locators =3D dlocs));
 ...

 https://nxr.netbsd.org/xref/src/sys/dev/usb/usb_subr.c?r=3D1.281#1129

    1177 static usbd_status
    1178 usbd_attachinterfaces(device_t parent, struct usbd_device *dev,
    1179     int port, const int *locators)
    1180 {
 ...
    1242 		dv =3D config_found(parent, &uiaa, usbd_ifprint,
    1243 				  CFARGS(.submatch =3D config_stdsubmatch,
    1244 					 .iattr =3D "usbifif",
    1245 					 .locators =3D ilocs));

 uhub is only at one of these (usbdevif or usbifif), but the point is
 the attach happens synchronously for subordinate hubs, before
 uhub_explore gets to config_pending_decr.

 And in uhub_attach, pretty much the first thing it does is
 config_pending_incr -- and it also sets the hub of the USB device to
 be the one it just created, so uhub_attach's call to uh_explore should
 take care of this:

     299 static void
     300 uhub_attach(device_t parent, device_t self, void *aux)
     301 {
 ...
     318 	config_pending_incr(self);
 ...
     371 	hub =3D kmem_alloc(sizeof(*hub) + (nports-1) * sizeof(struct usbd_=
 port),
     372 	    KM_SLEEP);
     373 	dev->ud_hub =3D hub;
     374 	dev->ud_hub->uh_hubsoftc =3D sc;
     375 	hub->uh_explore =3D uhub_explore;
     376 	hub->uh_hubdesc =3D hubdesc;

 https://nxr.netbsd.org/xref/src/sys/dev/usb/uhub.c?r=3D1.163#529

 As noted above, uhub_explore even explores the subordinate hubs
 synchronously too by calling uh_explore!

 So, does the USB device not appear to be connected at the time of the
 initial probe, perhaps?

 Building with USB_DEBUG and enabling usb_debug=3D1 so you can drop into
 ddb and `show kernhist usbhist' might help.

From: Michael Cheponis <michael.cheponis@gmail.com>
To: gnats-bugs@netbsd.org
Cc: port-arm-maintainer@netbsd.org, gnats-admin@netbsd.org, 
	netbsd-bugs@netbsd.org, mac@culver.net
Subject: Re: port-arm/60021: USB-only boot: uhub0 attaches but uhub1 never
 appears, no hotplug events; SD-boot sees hub+umass fine
Date: Tue, 4 Aug 2026 08:45:14 -0700

 --0000000000009c2a8506583a8c4e
 Content-Type: text/plain; charset="UTF-8"
 Content-Transfer-Encoding: quoted-printable

 I will give it a go (build /wUSB_DEBUG), and report.  I also have an RPi3B
 (not +), and will try there, too.

 LLMs say not waiting long enough for the attach, probably.

 On Tue, Aug 4, 2026 at 6:35=E2=80=AFAM Taylor R Campbell via gnats <
 gnats-admin@netbsd.org> wrote:

 > The following reply was made to PR port-arm/60021; it has been noted by
 > GNATS.
 >
 > From: Taylor R Campbell <riastradh@NetBSD.org>
 > To: Nick Hudson <nick.hudson@gmx.co.uk>
 > Cc: mac@culver.net, gnats-bugs@NetBSD.org, netbsd-bugs@NetBSD.org
 > Subject: Re: port-arm/60021: USB-only boot: uhub0 attaches but uhub1 neve=
 r
 >         appears, no hotplug events; SD-boot sees hub+umass fine
 > Date: Tue, 4 Aug 2026 13:34:02 +0000
 >
 >  > Date: Sat, 21 Feb 2026 10:39:41 +0000
 >  > From: Nick Hudson <nick.hudson@gmx.co.uk>
 >  >=3D20
 >  > This is almost certainly that autoconf doesn't wait (long enough) for
 >  > sub-ordintate hubs
 >  >=3D20
 >  > https://nxr.netbsd.org/xref/src/sys/dev/usb/uhub.c#880
 >  >=3D20
 >  >      880     mutex_enter(&sc->sc_lock);
 >  >      881     sc->sc_explorepending =3D3D false;
 >  >      882     for (int i =3D3D 0; i < sc->sc_statuslen; i++) {
 >  >      883             if (sc->sc_statuspend[i] !=3D3D 0) {
 >  >      884                     memcpy(sc->sc_status, sc->sc_statuspend,
 >  >      885                         sc->sc_statuslen);
 >  >      886                     memset(sc->sc_statuspend, 0,
 > sc->sc_statuslen);
 >  >      887                     usb_needs_explore(sc->sc_hub);
 >  >      888                     break;
 >  >      889             }
 >  >      890     }
 >  >      891     mutex_exit(&sc->sc_lock);
 >  >      892     if (sc->sc_first_explore) {
 >  >      893             config_pending_decr(sc->sc_dev);
 >  >      894             sc->sc_first_explore =3D3D false;
 >  >      895     }
 >
 >  I don't understand, doesn't it wait for subordinate hubs?  Maybe the
 >  USB hub just doesn't report the device ready at first?
 >
 >  Here's a fuller picture of the logic -- note that uhub_explore will
 >  _synchronously_ attach autoconf drivers for the devices it finds on
 >  the hub, and then uhub_attach will _also_ config_pending_incr:
 >
 >      529 usbd_status
 >      530 uhub_explore(struct usbd_device *dev)
 >      531 {
 >  ...
 >      598        for (port =3D3D 1; port <=3D3D hd->bNbrPorts; port++) {
 >      599                up =3D3D &dev->ud_hub->uh_ports[port - 1];
 >  ...
 >      848                /* Get device info and set its address. */
 >      849                err =3D3D usbd_new_device(sc->sc_dev, dev->ud_bus=
 ,
 >      850                          dev->ud_depth + 1, speed, port, up);
 >  ...
 >      858                if (err) {
 >  ...
 >      872                } else {
 >  ...
 >      878                        if (up->up_dev->ud_hub)
 >      879
 > up->up_dev->ud_hub->uh_explore(up->up_dev);
 >      880                }
 >      881        }
 >      882        mutex_enter(&sc->sc_lock);
 >      883        sc->sc_explorepending =3D3D false;
 >      884        for (int i =3D3D 0; i < sc->sc_statuslen; i++) {
 >      885                if (sc->sc_statuspend[i] !=3D3D 0) {
 >      886                        memcpy(sc->sc_status, sc->sc_statuspend,
 >      887                            sc->sc_statuslen);
 >      888                        memset(sc->sc_statuspend, 0,
 > sc->sc_statuslen);
 >      889                        usb_needs_explore(sc->sc_hub);
 >      890                        break;
 >      891                }
 >      892        }
 >      893        mutex_exit(&sc->sc_lock);
 >      894        if (sc->sc_first_explore) {
 >      895                config_pending_decr(sc->sc_dev);
 >      896                sc->sc_first_explore =3D3D false;
 >      897        }
 >
 >  https://nxr.netbsd.org/xref/src/sys/dev/usb/uhub.c?r=3D3D1.163#529
 >
 >  usbd_new_device synchronously attaches autoconf drivers:
 >
 >     1394 usbd_status
 >     1395 usbd_new_device(device_t parent, struct usbd_bus *bus, int depth=
 ,
 > i=3D
 >  nt speed,
 >     1396     int port, struct usbd_port *up)
 >     1397 {
 >  ...
 >     1606        if (port =3D3D=3D3D 0) { /* root hub */
 >     1607                KASSERT(addr =3D3D=3D3D 1);
 >     1608                usbd_attach_roothub(parent, dev);
 >     1609                return USBD_NORMAL_COMPLETION;
 >     1610        }
 >     1611=3D20
 >     1612        err =3D3D usbd_probe_and_attach(parent, dev, port, addr);
 >     1613        if (err) {
 >     1614                usbd_remove_device(dev, up);
 >     1615                return err;
 >     1616        }
 >     1617=3D20
 >     1618        return USBD_NORMAL_COMPLETION;
 >     1619 }
 >
 >  https://nxr.netbsd.org/xref/src/sys/dev/usb/usb_subr.c?r=3D3D1.281#1388
 >
 >     1047 usbd_status
 >     1048 usbd_attach_roothub(device_t parent, struct usbd_device *dev)
 >     1049 {
 >  ...
 >     1065        dv =3D3D config_found(parent, &uaa, NULL,
 >     1066            CFARGS(.iattr =3D3D "usbroothubif"));
 >
 >  https://nxr.netbsd.org/xref/src/sys/dev/usb/usb_subr.c?r=3D3D1.281#1047
 >
 >     1270 usbd_status
 >     1271 usbd_probe_and_attach(device_t parent, struct usbd_device *dev,
 >     1272     int port, int addr)
 >     1273 {
 >  ...
 >     1283        err =3D3D usbd_attachwholedevice(parent, dev, port, 0);
 >     1284        if (dev->ud_nifaces_claimed || err)
 >     1285                return err;
 >  ...
 >     1290        for (confi =3D3D 0; confi < dd->bNumConfigurations; confi=
 ++)
 > {
 >  ...
 >     1305                err =3D3D usbd_attachinterfaces(parent, dev, port=
 ,
 > NULL);
 >  ...
 >     1313                if (dev->ud_nifaces_claimed || err)
 >     1314                        return err;
 >     1315        }
 >  ...
 >     1324        err =3D3D usbd_attachwholedevice(parent, dev, port, 1);
 >
 >  https://nxr.netbsd.org/xref/src/sys/dev/usb/usb_subr.c?r=3D3D1.281#1270
 >
 >     1129 static usbd_status
 >     1130 usbd_attachwholedevice(device_t parent, struct usbd_device *dev,
 > in=3D
 >  t port,
 >     1131     int usegeneric)
 >     1132 {
 >  ...
 >     1161        dv =3D3D config_found(parent, &uaa, usbd_print,
 >     1162                          CFARGS(.submatch =3D3D config_stdsubmat=
 ch,
 >     1163                                 .iattr =3D3D "usbdevif",
 >     1164                                 .locators =3D3D dlocs));
 >  ...
 >
 >  https://nxr.netbsd.org/xref/src/sys/dev/usb/usb_subr.c?r=3D3D1.281#1129
 >
 >     1177 static usbd_status
 >     1178 usbd_attachinterfaces(device_t parent, struct usbd_device *dev,
 >     1179     int port, const int *locators)
 >     1180 {
 >  ...
 >     1242                dv =3D3D config_found(parent, &uiaa, usbd_ifprint=
 ,
 >     1243                                  CFARGS(.submatch =3D3D
 > config_stdsubmatch,
 >     1244                                         .iattr =3D3D "usbifif",
 >     1245                                         .locators =3D3D ilocs));
 >
 >  uhub is only at one of these (usbdevif or usbifif), but the point is
 >  the attach happens synchronously for subordinate hubs, before
 >  uhub_explore gets to config_pending_decr.
 >
 >  And in uhub_attach, pretty much the first thing it does is
 >  config_pending_incr -- and it also sets the hub of the USB device to
 >  be the one it just created, so uhub_attach's call to uh_explore should
 >  take care of this:
 >
 >      299 static void
 >      300 uhub_attach(device_t parent, device_t self, void *aux)
 >      301 {
 >  ...
 >      318        config_pending_incr(self);
 >  ...
 >      371        hub =3D3D kmem_alloc(sizeof(*hub) + (nports-1) *
 > sizeof(struct usbd_=3D
 >  port),
 >      372            KM_SLEEP);
 >      373        dev->ud_hub =3D3D hub;
 >      374        dev->ud_hub->uh_hubsoftc =3D3D sc;
 >      375        hub->uh_explore =3D3D uhub_explore;
 >      376        hub->uh_hubdesc =3D3D hubdesc;
 >
 >  https://nxr.netbsd.org/xref/src/sys/dev/usb/uhub.c?r=3D3D1.163#529
 >
 >  As noted above, uhub_explore even explores the subordinate hubs
 >  synchronously too by calling uh_explore!
 >
 >  So, does the USB device not appear to be connected at the time of the
 >  initial probe, perhaps?
 >
 >  Building with USB_DEBUG and enabling usb_debug=3D3D1 so you can drop int=
 o
 >  ddb and `show kernhist usbhist' might help.
 >
 >

 --0000000000009c2a8506583a8c4e
 Content-Type: text/html; charset="UTF-8"
 Content-Transfer-Encoding: quoted-printable

 <div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:arial,he=
 lvetica,sans-serif;font-size:small">I will give it a go (build /wUSB_DEBUG)=
 , and report.=C2=A0 I also have an RPi3B=C2=A0 (not=C2=A0+), and will try t=
 here, too.</div><div class=3D"gmail_default" style=3D"font-family:arial,hel=
 vetica,sans-serif;font-size:small"><br></div><div class=3D"gmail_default" s=
 tyle=3D"font-family:arial,helvetica,sans-serif;font-size:small">LLMs say no=
 t waiting long enough for the attach, probably.</div></div><br><div class=
 =3D"gmail_quote gmail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr=
 ">On Tue, Aug 4, 2026 at 6:35=E2=80=AFAM Taylor R Campbell via gnats &lt;<a=
  href=3D"mailto:gnats-admin@netbsd.org">gnats-admin@netbsd.org</a>&gt; wrot=
 e:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0=
 .8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">The following=
  reply was made to PR port-arm/60021; it has been noted by GNATS.<br>
 <br>
 From: Taylor R Campbell &lt;riastradh@NetBSD.org&gt;<br>
 To: Nick Hudson &lt;<a href=3D"mailto:nick.hudson@gmx.co.uk" target=3D"_bla=
 nk">nick.hudson@gmx.co.uk</a>&gt;<br>
 Cc: <a href=3D"mailto:mac@culver.net" target=3D"_blank">mac@culver.net</a>,=
  gnats-bugs@NetBSD.org, netbsd-bugs@NetBSD.org<br>
 Subject: Re: port-arm/60021: USB-only boot: uhub0 attaches but uhub1 never<=
 br>
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 appears, no hotplug events; SD-boot sees hub+um=
 ass fine<br>
 Date: Tue, 4 Aug 2026 13:34:02 +0000<br>
 <br>
 =C2=A0&gt; Date: Sat, 21 Feb 2026 10:39:41 +0000<br>
 =C2=A0&gt; From: Nick Hudson &lt;<a href=3D"mailto:nick.hudson@gmx.co.uk" t=
 arget=3D"_blank">nick.hudson@gmx.co.uk</a>&gt;<br>
 =C2=A0&gt;=3D20<br>
 =C2=A0&gt; This is almost certainly that autoconf doesn&#39;t wait (long en=
 ough) for<br>
 =C2=A0&gt; sub-ordintate hubs<br>
 =C2=A0&gt;=3D20<br>
 =C2=A0&gt; <a href=3D"https://nxr.netbsd.org/xref/src/sys/dev/usb/uhub.c#88=
 0" rel=3D"noreferrer" target=3D"_blank">https://nxr.netbsd.org/xref/src/sys=
 /dev/usb/uhub.c#880</a><br>
 =C2=A0&gt;=3D20<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 880=C2=A0 =C2=A0 =C2=A0mutex_enter(&amp;sc-&=
 gt;sc_lock);<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 881=C2=A0 =C2=A0 =C2=A0sc-&gt;sc_explorepend=
 ing =3D3D false;<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 882=C2=A0 =C2=A0 =C2=A0for (int i =3D3D 0; i=
  &lt; sc-&gt;sc_statuslen; i++) {<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 883=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0if (sc-&gt;sc_statuspend[i] !=3D3D 0) {<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 884=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0memcpy(sc-&gt;sc_status, sc-&gt;sc_statu=
 spend,<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 885=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0sc-&gt;sc_statuslen);<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 886=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0memset(sc-&gt;sc_statuspend, 0, sc-&gt;s=
 c_statuslen);<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 887=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0usb_needs_explore(sc-&gt;sc_hub);<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 888=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 889=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0}<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 890=C2=A0 =C2=A0 =C2=A0}<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 891=C2=A0 =C2=A0 =C2=A0mutex_exit(&amp;sc-&g=
 t;sc_lock);<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 892=C2=A0 =C2=A0 =C2=A0if (sc-&gt;sc_first_e=
 xplore) {<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 893=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0config_pending_decr(sc-&gt;sc_dev);<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 894=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
  =C2=A0sc-&gt;sc_first_explore =3D3D false;<br>
 =C2=A0&gt;=C2=A0 =C2=A0 =C2=A0 895=C2=A0 =C2=A0 =C2=A0}<br>
 <br>
 =C2=A0I don&#39;t understand, doesn&#39;t it wait for subordinate hubs?=C2=
 =A0 Maybe the<br>
 =C2=A0USB hub just doesn&#39;t report the device ready at first?<br>
 <br>
 =C2=A0Here&#39;s a fuller picture of the logic -- note that uhub_explore wi=
 ll<br>
 =C2=A0_synchronously_ attach autoconf drivers for the devices it finds on<b=
 r>
 =C2=A0the hub, and then uhub_attach will _also_ config_pending_incr:<br>
 <br>
 =C2=A0 =C2=A0 =C2=A0529 usbd_status<br>
 =C2=A0 =C2=A0 =C2=A0530 uhub_explore(struct usbd_device *dev)<br>
 =C2=A0 =C2=A0 =C2=A0531 {<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 =C2=A0598=C2=A0 =C2=A0 =C2=A0 =C2=A0 for (port =3D3D 1; port =
 &lt;=3D3D hd-&gt;bNbrPorts; port++) {<br>
 =C2=A0 =C2=A0 =C2=A0599=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 up =3D3D &amp;dev-&gt;ud_hub-&gt;uh_ports[port - 1];<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 =C2=A0848=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 /* Get device info and set its address. */<br>
 =C2=A0 =C2=A0 =C2=A0849=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 err =3D3D usbd_new_device(sc-&gt;sc_dev, dev-&gt;ud_bus,<br>
 =C2=A0 =C2=A0 =C2=A0850=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 dev-&gt;ud_depth + 1, speed, port, u=
 p);<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 =C2=A0858=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 if (err) {<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 =C2=A0872=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 } else {<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 =C2=A0878=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (up-&gt;up_dev-&gt;ud_hub)<br>
 =C2=A0 =C2=A0 =C2=A0879=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 up-&gt;up_dev-&=
 gt;ud_hub-&gt;uh_explore(up-&gt;up_dev);<br>
 =C2=A0 =C2=A0 =C2=A0880=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 }<br>
 =C2=A0 =C2=A0 =C2=A0881=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>
 =C2=A0 =C2=A0 =C2=A0882=C2=A0 =C2=A0 =C2=A0 =C2=A0 mutex_enter(&amp;sc-&gt;=
 sc_lock);<br>
 =C2=A0 =C2=A0 =C2=A0883=C2=A0 =C2=A0 =C2=A0 =C2=A0 sc-&gt;sc_explorepending=
  =3D3D false;<br>
 =C2=A0 =C2=A0 =C2=A0884=C2=A0 =C2=A0 =C2=A0 =C2=A0 for (int i =3D3D 0; i &l=
 t; sc-&gt;sc_statuslen; i++) {<br>
 =C2=A0 =C2=A0 =C2=A0885=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 if (sc-&gt;sc_statuspend[i] !=3D3D 0) {<br>
 =C2=A0 =C2=A0 =C2=A0886=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 memcpy(sc-&gt;sc_status, sc-&gt;sc_statuspe=
 nd,<br>
 =C2=A0 =C2=A0 =C2=A0887=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sc-&gt;sc_statuslen);<br>
 =C2=A0 =C2=A0 =C2=A0888=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 memset(sc-&gt;sc_statuspend, 0, sc-&gt;sc_s=
 tatuslen);<br>
 =C2=A0 =C2=A0 =C2=A0889=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 usb_needs_explore(sc-&gt;sc_hub);<br>
 =C2=A0 =C2=A0 =C2=A0890=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 break;<br>
 =C2=A0 =C2=A0 =C2=A0891=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 }<br>
 =C2=A0 =C2=A0 =C2=A0892=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>
 =C2=A0 =C2=A0 =C2=A0893=C2=A0 =C2=A0 =C2=A0 =C2=A0 mutex_exit(&amp;sc-&gt;s=
 c_lock);<br>
 =C2=A0 =C2=A0 =C2=A0894=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (sc-&gt;sc_first_expl=
 ore) {<br>
 =C2=A0 =C2=A0 =C2=A0895=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 config_pending_decr(sc-&gt;sc_dev);<br>
 =C2=A0 =C2=A0 =C2=A0896=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 sc-&gt;sc_first_explore =3D3D false;<br>
 =C2=A0 =C2=A0 =C2=A0897=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>
 <br>
 =C2=A0<a href=3D"https://nxr.netbsd.org/xref/src/sys/dev/usb/uhub.c?r=3D3D1=
 .163#529" rel=3D"noreferrer" target=3D"_blank">https://nxr.netbsd.org/xref/=
 src/sys/dev/usb/uhub.c?r=3D3D1.163#529</a><br>
 <br>
 =C2=A0usbd_new_device synchronously attaches autoconf drivers:<br>
 <br>
 =C2=A0 =C2=A0 1394 usbd_status<br>
 =C2=A0 =C2=A0 1395 usbd_new_device(device_t parent, struct usbd_bus *bus, i=
 nt depth, i=3D<br>
 =C2=A0nt speed,<br>
 =C2=A0 =C2=A0 1396=C2=A0 =C2=A0 =C2=A0int port, struct usbd_port *up)<br>
 =C2=A0 =C2=A0 1397 {<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 1606=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (port =3D3D=3D3D 0) { /* r=
 oot hub */<br>
 =C2=A0 =C2=A0 1607=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 K=
 ASSERT(addr =3D3D=3D3D 1);<br>
 =C2=A0 =C2=A0 1608=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 u=
 sbd_attach_roothub(parent, dev);<br>
 =C2=A0 =C2=A0 1609=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 r=
 eturn USBD_NORMAL_COMPLETION;<br>
 =C2=A0 =C2=A0 1610=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>
 =C2=A0 =C2=A0 1611=3D20<br>
 =C2=A0 =C2=A0 1612=C2=A0 =C2=A0 =C2=A0 =C2=A0 err =3D3D usbd_probe_and_atta=
 ch(parent, dev, port, addr);<br>
 =C2=A0 =C2=A0 1613=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (err) {<br>
 =C2=A0 =C2=A0 1614=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 u=
 sbd_remove_device(dev, up);<br>
 =C2=A0 =C2=A0 1615=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 r=
 eturn err;<br>
 =C2=A0 =C2=A0 1616=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>
 =C2=A0 =C2=A0 1617=3D20<br>
 =C2=A0 =C2=A0 1618=C2=A0 =C2=A0 =C2=A0 =C2=A0 return USBD_NORMAL_COMPLETION=
 ;<br>
 =C2=A0 =C2=A0 1619 }<br>
 <br>
 =C2=A0<a href=3D"https://nxr.netbsd.org/xref/src/sys/dev/usb/usb_subr.c?r=
 =3D3D1.281#1388" rel=3D"noreferrer" target=3D"_blank">https://nxr.netbsd.or=
 g/xref/src/sys/dev/usb/usb_subr.c?r=3D3D1.281#1388</a><br>
 <br>
 =C2=A0 =C2=A0 1047 usbd_status<br>
 =C2=A0 =C2=A0 1048 usbd_attach_roothub(device_t parent, struct usbd_device =
 *dev)<br>
 =C2=A0 =C2=A0 1049 {<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 1065=C2=A0 =C2=A0 =C2=A0 =C2=A0 dv =3D3D config_found(parent,=
  &amp;uaa, NULL,<br>
 =C2=A0 =C2=A0 1066=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 CFARGS(.iattr =
 =3D3D &quot;usbroothubif&quot;));<br>
 <br>
 =C2=A0<a href=3D"https://nxr.netbsd.org/xref/src/sys/dev/usb/usb_subr.c?r=
 =3D3D1.281#1047" rel=3D"noreferrer" target=3D"_blank">https://nxr.netbsd.or=
 g/xref/src/sys/dev/usb/usb_subr.c?r=3D3D1.281#1047</a><br>
 <br>
 =C2=A0 =C2=A0 1270 usbd_status<br>
 =C2=A0 =C2=A0 1271 usbd_probe_and_attach(device_t parent, struct usbd_devic=
 e *dev,<br>
 =C2=A0 =C2=A0 1272=C2=A0 =C2=A0 =C2=A0int port, int addr)<br>
 =C2=A0 =C2=A0 1273 {<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 1283=C2=A0 =C2=A0 =C2=A0 =C2=A0 err =3D3D usbd_attachwholedev=
 ice(parent, dev, port, 0);<br>
 =C2=A0 =C2=A0 1284=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (dev-&gt;ud_nifaces_claime=
 d || err)<br>
 =C2=A0 =C2=A0 1285=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 r=
 eturn err;<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 1290=C2=A0 =C2=A0 =C2=A0 =C2=A0 for (confi =3D3D 0; confi &lt=
 ; dd-&gt;bNumConfigurations; confi++) {<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 1305=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 e=
 rr =3D3D usbd_attachinterfaces(parent, dev, port, NULL);<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 1313=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 i=
 f (dev-&gt;ud_nifaces_claimed || err)<br>
 =C2=A0 =C2=A0 1314=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return err;<br>
 =C2=A0 =C2=A0 1315=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 1324=C2=A0 =C2=A0 =C2=A0 =C2=A0 err =3D3D usbd_attachwholedev=
 ice(parent, dev, port, 1);<br>
 <br>
 =C2=A0<a href=3D"https://nxr.netbsd.org/xref/src/sys/dev/usb/usb_subr.c?r=
 =3D3D1.281#1270" rel=3D"noreferrer" target=3D"_blank">https://nxr.netbsd.or=
 g/xref/src/sys/dev/usb/usb_subr.c?r=3D3D1.281#1270</a><br>
 <br>
 =C2=A0 =C2=A0 1129 static usbd_status<br>
 =C2=A0 =C2=A0 1130 usbd_attachwholedevice(device_t parent, struct usbd_devi=
 ce *dev, in=3D<br>
 =C2=A0t port,<br>
 =C2=A0 =C2=A0 1131=C2=A0 =C2=A0 =C2=A0int usegeneric)<br>
 =C2=A0 =C2=A0 1132 {<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 1161=C2=A0 =C2=A0 =C2=A0 =C2=A0 dv =3D3D config_found(parent,=
  &amp;uaa, usbd_print,<br>
 =C2=A0 =C2=A0 1162=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 CFARGS(.submatch =3D3D config_stdsubmatc=
 h,<br>
 =C2=A0 =C2=A0 1163=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0.iattr =3D3D =
 &quot;usbdevif&quot;,<br>
 =C2=A0 =C2=A0 1164=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0.locators =3D=
 3D dlocs));<br>
 =C2=A0...<br>
 <br>
 =C2=A0<a href=3D"https://nxr.netbsd.org/xref/src/sys/dev/usb/usb_subr.c?r=
 =3D3D1.281#1129" rel=3D"noreferrer" target=3D"_blank">https://nxr.netbsd.or=
 g/xref/src/sys/dev/usb/usb_subr.c?r=3D3D1.281#1129</a><br>
 <br>
 =C2=A0 =C2=A0 1177 static usbd_status<br>
 =C2=A0 =C2=A0 1178 usbd_attachinterfaces(device_t parent, struct usbd_devic=
 e *dev,<br>
 =C2=A0 =C2=A0 1179=C2=A0 =C2=A0 =C2=A0int port, const int *locators)<br>
 =C2=A0 =C2=A0 1180 {<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 1242=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 d=
 v =3D3D config_found(parent, &amp;uiaa, usbd_ifprint,<br>
 =C2=A0 =C2=A0 1243=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 CFARGS(.subm=
 atch =3D3D config_stdsubmatch,<br>
 =C2=A0 =C2=A0 1244=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0 =C2=A0.iattr =3D3D &quot;usbifif&quot;,<br>
 =C2=A0 =C2=A0 1245=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0 =C2=A0.locators =3D3D ilocs));<br>
 <br>
 =C2=A0uhub is only at one of these (usbdevif or usbifif), but the point is<=
 br>
 =C2=A0the attach happens synchronously for subordinate hubs, before<br>
 =C2=A0uhub_explore gets to config_pending_decr.<br>
 <br>
 =C2=A0And in uhub_attach, pretty much the first thing it does is<br>
 =C2=A0config_pending_incr -- and it also sets the hub of the USB device to<=
 br>
 =C2=A0be the one it just created, so uhub_attach&#39;s call to uh_explore s=
 hould<br>
 =C2=A0take care of this:<br>
 <br>
 =C2=A0 =C2=A0 =C2=A0299 static void<br>
 =C2=A0 =C2=A0 =C2=A0300 uhub_attach(device_t parent, device_t self, void *a=
 ux)<br>
 =C2=A0 =C2=A0 =C2=A0301 {<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 =C2=A0318=C2=A0 =C2=A0 =C2=A0 =C2=A0 config_pending_incr(self=
 );<br>
 =C2=A0...<br>
 =C2=A0 =C2=A0 =C2=A0371=C2=A0 =C2=A0 =C2=A0 =C2=A0 hub =3D3D kmem_alloc(siz=
 eof(*hub) + (nports-1) * sizeof(struct usbd_=3D<br>
 =C2=A0port),<br>
 =C2=A0 =C2=A0 =C2=A0372=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 KM_SLEEP);=
 <br>
 =C2=A0 =C2=A0 =C2=A0373=C2=A0 =C2=A0 =C2=A0 =C2=A0 dev-&gt;ud_hub =3D3D hub=
 ;<br>
 =C2=A0 =C2=A0 =C2=A0374=C2=A0 =C2=A0 =C2=A0 =C2=A0 dev-&gt;ud_hub-&gt;uh_hu=
 bsoftc =3D3D sc;<br>
 =C2=A0 =C2=A0 =C2=A0375=C2=A0 =C2=A0 =C2=A0 =C2=A0 hub-&gt;uh_explore =3D3D=
  uhub_explore;<br>
 =C2=A0 =C2=A0 =C2=A0376=C2=A0 =C2=A0 =C2=A0 =C2=A0 hub-&gt;uh_hubdesc =3D3D=
  hubdesc;<br>
 <br>
 =C2=A0<a href=3D"https://nxr.netbsd.org/xref/src/sys/dev/usb/uhub.c?r=3D3D1=
 .163#529" rel=3D"noreferrer" target=3D"_blank">https://nxr.netbsd.org/xref/=
 src/sys/dev/usb/uhub.c?r=3D3D1.163#529</a><br>
 <br>
 =C2=A0As noted above, uhub_explore even explores the subordinate hubs<br>
 =C2=A0synchronously too by calling uh_explore!<br>
 <br>
 =C2=A0So, does the USB device not appear to be connected at the time of the=
 <br>
 =C2=A0initial probe, perhaps?<br>
 <br>
 =C2=A0Building with USB_DEBUG and enabling usb_debug=3D3D1 so you can drop =
 into<br>
 =C2=A0ddb and `show kernhist usbhist&#39; might help.<br>
 <br>
 </blockquote></div>

 --0000000000009c2a8506583a8c4e--

From: Nick Hudson <nick.hudson@gmx.co.uk>
To: Taylor R Campbell <riastradh@NetBSD.org>
Cc: mac@culver.net,
 "gnats-bugs@netbsd.org" <gnats-bugs@NetBSD.org>,
 "netbsd-bugs@netbsd.org" <netbsd-bugs@NetBSD.org>
Subject: Re: port-arm/60021: USB-only boot: uhub0 attaches but uhub1 never
 appears, no hotplug events; SD-boot sees hub+umass fine
Date: Tue, 4 Aug 2026 19:32:12 +0100

 > On 4 Aug 2026, at 14:34, Taylor R Campbell <riastradh@NetBSD.org> =
 wrote:
 >=20
 >> Date: Sat, 21 Feb 2026 10:39:41 +0000
 >> From: Nick Hudson <nick.hudson@gmx.co.uk>
 >>=20
 >> This is almost certainly that autoconf doesn't wait (long enough) for
 >> sub-ordintate hubs
 >>=20
 >> https://nxr.netbsd.org/xref/src/sys/dev/usb/uhub.c#880
 >>=20
 >>     880 mutex_enter(&sc->sc_lock);
 >>     881 sc->sc_explorepending =3D false;
 >>     882 for (int i =3D 0; i < sc->sc_statuslen; i++) {
 >>     883 if (sc->sc_statuspend[i] !=3D 0) {
 >>     884 memcpy(sc->sc_status, sc->sc_statuspend,
 >>     885    sc->sc_statuslen);
 >>     886 memset(sc->sc_statuspend, 0, sc->sc_statuslen);
 >>     887 usb_needs_explore(sc->sc_hub);
 >>     888 break;
 >>     889 }
 >>     890 }
 >>     891 mutex_exit(&sc->sc_lock);
 >>     892 if (sc->sc_first_explore) {
 >>     893 config_pending_decr(sc->sc_dev);
 >>     894 sc->sc_first_explore =3D false;
 >>     895 }
 >=20
 > I don't understand, doesn't it wait for subordinate hubs?

 Sure, but not long enough...

 > ... Maybe the
 > USB hub just doesn't report the device ready at first?

 Because there=E2=80=99s no guarantee (afaik) that the root hub will see =
 the built-in hub immediately.

From: Michael Cheponis <michael.cheponis@gmail.com>
To: gnats-bugs@netbsd.org
Cc: port-arm-maintainer@netbsd.org, gnats-admin@netbsd.org, 
	netbsd-bugs@netbsd.org, mac@culver.net
Subject: Re: port-arm/60021: USB-only boot: uhub0 attaches but uhub1 never
 appears, no hotplug events; SD-boot sees hub+umass fine
Date: Wed, 5 Aug 2026 19:55:22 -0700

 --0000000000001c50be0658580742
 Content-Type: text/plain; charset="UTF-8"
 Content-Transfer-Encoding: quoted-printable

 Here is the output with usb debug:


 RPi3B+ USB boot diagnostic kernel

 Wed Aug  5 20:44:41 UTC 2026

 NetBSD SS.Culver.Net 11.0_RC5 NetBSD 11.0_RC5 (GENERIC) #0: Tue Jun 16
 15:48:07 UTC 2026
 mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/amd64/compile/GENERIC
 amd64

 Target: MACHINE=3Devbarm MACHINE_ARCH=3Daarch64
 Source branch: netbsd-11
 Kernel configuration: GENERIC64_USBDEBUG

 Kernel hashes:
 SHA256
 (/root/obj-rpi3b-usbdebug/sys/arch/evbarm/compile/GENERIC64_USBDEBUG/netbsd=
 )
 =3D 96bdfcf491362c83a1eedd251c5de5bb44f9f8a565a351a6ee58e652cbfea91d
 SHA256
 (/root/obj-rpi3b-usbdebug/sys/arch/evbarm/compile/GENERIC64_USBDEBUG/netbsd=
 .img)
 =3D 6b0a14b4faf31249a9fd583c2e8ead68cf3fe4501484d9cb688992630a2f9773

 Relevant CVS revisions:
 File: usb.c             Status: Up-to-date
    Working revision:    1.203
    Sticky Tag:          netbsd-11 (branch: 1.203.4)
 File: uhub.c            Status: Up-to-date
    Working revision:    1.162
    Sticky Tag:          netbsd-11 (branch: 1.162.4)
 File: usb_subr.c        Status: Up-to-date
    Working revision:    1.279.4.1
    Sticky Tag:          netbsd-11 (branch: 1.279.4)

 =E2=96=92[   1.0000000] NetBSD/evbarm (fdt) booting ...
 [   1.0000000] Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003=
 ,
 [   1.0000000]     2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
 2013,
 [   1.0000000]     2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022,
 2023,
 [   1.0000000]     2024, 2025, 2026
 [   1.0000000]     The NetBSD Foundation, Inc.  All rights reserved.
 [   1.0000000] Copyright (c) 1982, 1986, 1989, 1991, 1993
 [   1.0000000]     The Regents of the University of California.  All rights
 reserved.

 [   1.0000000] NetBSD 11.0_STABLE (GENERIC64_USBDEBUG) #0: Wed Aug  5
 19:49:20 UTC 2026
 [   1.0000000]  root@SS.Culver.Net:
 /root/obj-rpi3b-usbdebug/sys/arch/evbarm/compile/GENERIC64_USBDEBUG
 [   1.0000000] total memory =3D 925 MB
 [   1.0000000] avail memory =3D 890 MB
 [   1.0000000] armfdt0 (root)
 [   1.0000000] simplebus0 at armfdt0: Raspberry Pi 3 Model B Plus Rev 1.4
 [   1.0000000] simplebus1 at simplebus0
 [   1.0000000] simplebus2 at simplebus0
 [   1.0000000] cpus0 at simplebus0
 [   1.0000000] simplebus3 at simplebus0
 [   1.0000000] cpu0 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x0
 [   1.0000000] cpu0: package 0, core 0, smt 0, numa 0
 [   1.0000000] cpu1 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x1
 [   1.0000000] cpu1: package 0, core 1, smt 0, numa 0
 [   1.0000000] cpu2 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x2
 [   1.0000000] cpu2: package 0, core 2, smt 0, numa 0
 [   1.0000000] cpu3 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x3
 [   1.0000000] cpu3: package 0, core 3, smt 0, numa 0
 [   1.0000000] bcmicu0 at simplebus1
 [   1.0000000] fclock0 at simplebus2: 19200000 Hz fixed clock (osc)
 [   1.0000000] bcmcprman0 at simplebus1: BCM283x Clock Controller
 [   1.0000000] syscon0 at simplebus1: couldn't get registers
 [   1.0000000] bcmaux0 at simplebus1
 [   1.0000000] fclock1 at simplebus2: 480000000 Hz fixed clock (otg)
 [   1.0000000] bcmicu1 at simplebus1: Multiprocessor
 [   1.0000000] gtmr0 at simplebus0: Generic Timer
 [   1.0000000] gtmr0: interrupting on local_intc irq 3
 [   1.0000000] armgtmr0 at gtmr0: Generic Timer (19200 kHz, virtual)
 [   1.0000040] bcmgpio0 at simplebus1: GPIO controller 2835
 [   1.0000040] bcmgpio0: pins 0..31 interrupting on icu irq 49
 [   1.0000040] bcmgpio0: pins 32..54 interrupting on icu irq 50
 [   1.0000040] gpio0 at bcmgpio0: 54 pins
 [   1.0000040] plcom0 at simplebus1: ARM PL011 UART
 [   1.0000040] plcom0: txfifo 16 bytes
 [   1.0000040] plcom0: interrupting on icu irq 57
 [   1.0000040] com0 at simplebus1: BCM AUX UART, 1-byte FIFO
 [   1.0000040] com0: console
 [   1.0000040] com0: interrupting on icu irq 29, clock 800000000 Hz
 [   1.0000040] mmcpwrseq0 at simplebus0: couldn't get reset GPIOs
 [   1.0000040] /soc/thermal@7e212000 at simplebus1 not configured
 [   1.0000040] bcmdmac0 at simplebus1: DMA0 DMA2 DMA4 DMA5 DMA6 DMA7 DMA8
 DMA9 DMA10 DMA11
 [   1.0000040] /soc/power at simplebus1 not configured
 [   1.0000040] /phy at simplebus0 not configured
 [   1.0000040] bsciic0 at simplebus1: Broadcom Serial Controller
 [   1.0000040] bsciic0: interrupting on icu irq 53
 [   1.0000040] iic0 at bsciic0: I2C bus
 [   1.0000040] bcmmbox0 at simplebus1: VC mailbox
 [   1.0000040] bcmmbox0: interrupting on icu irq 65
 [   1.0000040] vcmbox0 at bcmmbox0
 [   1.0000040] /soc/timer@7e003000 at simplebus1 not configured
 [   1.0000040] /soc/txp@7e004000 at simplebus1 not configured
 [   1.0000040] bcmsdhost0 at simplebus1: SD HOST controller
 [   1.0000040] bcmsdhost0: interrupting on icu irq 56
 [   1.0000040] bsciic1 at simplebus1: Broadcom Serial Controller
 [   1.0000040] bsciic1: interrupting on icu irq 53
 [   1.0000040] iic1 at bsciic1: I2C bus
 [   1.0000040] /soc/pwm@7e20c000 at simplebus1 not configured
 [   1.0000040] sdhc0 at simplebus1: SDHC controller
 [   1.0000040] sdhc0: interrupting on icu irq 62
 [   1.0000040] bsciic2 at simplebus1: Broadcom Serial Controller
 [   1.0000040] bsciic2: interrupting on icu irq 53
 [   1.0000040] iic2 at bsciic2: I2C bus
 [   1.0000040] dwctwo0 at simplebus1: USB controller
 [   1.0000040] dwctwo0: interrupting on icu irq 9
 [   1.0000040] bcmpmwdog0 at simplebus1: Power management, Reset and
 Watchdog controller
 [   1.0000040] /soc/vec@7e806000 at simplebus1 not configured
 [   1.0000040] /soc/hdmi@7e902000 at simplebus1 not configured
 [   1.0000040] /soc/gpu at simplebus1 not configured
 [   1.0000040] genfb0 at simplebus1
 [   1.0000040] wsdisplay0 at genfb0 kbdmux 1
 [   1.0000040] vchiq0 at simplebus1: BCM2835 VCHIQ
 [   1.0000040] armpmu0 at simplebus0: Performance Monitor Unit
 [   1.0000040] gpioleds0 at simplebus0: ACT
 [   1.0000040] bcmrng0 at simplebus1: RNG
 [   1.0000040] entropy: ready
 [   1.4296116] sdmmc0 at bcmsdhost0
 [   1.4296116] sdhc0: SDHC 3.0, rev 153, platform DMA, 200000 kHz, HS 3.3V,
 re-tuning mode 1, 1024 byte blocks
 [   1.4396132] sdmmc1 at sdhc0 slot 0
 [   1.4596145] usb0 at dwctwo0: USB revision 2.0
 [   1.4696151] armpmu0: interrupting on local_intc irq 9
 [   1.4796185] uhub0 at usb0: NetBSD (0x0000) DWC2 root hub (0x0000), class
 9/0, rev 2.00/1.00, addr 1
 [   1.5596215] sdmmc0: direct I/O error 5, r=3D6 p=3D0xffffc000b0fe3e5c wri=
 te
 [   1.5696218] sdmmc0: couldn't enable card: 5
 [   1.6396270] sdmmc1: 4-bit width, 50.000 MHz
 [   1.6496270] sdmmc1: SDIO function
 [   1.6496270] bwfm0 at sdmmc1 function 1
 [   1.6596295] (manufacturer 0x2d0, product 0xa9a6) at sdmmc1 function 2
 not configured
 [   1.6696310] (manufacturer 0x2d0, product 0xa9a6, standard function
 interface code 0x2) at sdmmc1 function 3 not configured
 [   1.6807857] swwdog0: software watchdog initialized
 [   1.6807857] WARNING: 3 errors while detecting hardware; check system log=
 .
 [   1.6896315] boot device: <unknown>
 [   1.6896315] unknown device major 0xffffffffffffffff
 [   2.6896969] unknown device major 0xffffffffffffffff
 [   3.6897623] unknown device major 0xffffffffffffffff
 [   4.6898281] unknown device major 0xffffffffffffffff
 [   5.6898932] unknown device major 0xffffffffffffffff
 [   6.6899576] unknown device major 0xffffffffffffffff
 [   7.6900234] unknown device major 0xffffffffffffffff
 [   8.6900887] unknown device major 0xffffffffffffffff
 [   9.6901540] unknown device major 0xffffffffffffffff
 [  10.6902196] unknown device major 0xffffffffffffffff
 [  11.6902858] unknown device major 0xffffffffffffffff
 [  12.6903514] unknown device major 0xffffffffffffffff
 [  13.6904171] unknown device major 0xffffffffffffffff
 [  14.6904828] unknown device major 0xffffffffffffffff
 [  15.6905485] unknown device major 0xffffffffffffffff
 [  16.6906144] unknown device major 0xffffffffffffffff
 [  17.6906794] unknown device major 0xffffffffffffffff
 [  18.6907446] unknown device major 0xffffffffffffffff
 [  19.6908105] unknown device major 0xffffffffffffffff
 [  20.6908759] unknown device major 0xffffffffffffffff
 [  21.6909417] unknown device major 0xffffffffffffffff
 [  21.7009432] root device:
 [  62.5036280] use one of: bwfm0 ddb halt reboot
 [  62.5036280] root device: ddb
 Stopped in pid 0.0 (system) at  netbsd:cpu_Debugger+0xc:        ldp
 x29, x30
 , [sp],#16
 db{2}> set $lines =3D 0
 $lines          18 =3D 0
 db{2}> set $maxwidth =3D 0
 $maxwidth               50 =3D 0
 db{2}> show kernhist/i
 kernhist 'usbhist': at 0xffffc00000d0e058 total 50000 next free 366
 db{2}> show kernhist usbhist
 000001.451787 usb_allocmem#1@1: called!
 000001.451789 usb_allocmem#1@1: adding fragments
 000001.451791 usb_block_allocmem#1@1: called: size=3D8192 align=3D128 flags=
 =3D0x2
 000001.462478 usb_match#1@1: called!
 000001.466272 usb_doattach#1@1: called!
 000001.466282 usb_add_event#1@1: called!
 000001.466285 usbd_new_device#1@1: called: bus=3D0xffff00003ac0b830 port=3D=
 0
 depth=3D0 speed=3D3
 000001.466290 usbd_setup_pipe_flags#1@1: called: dev=3D0xffff00003a984f00
 addr=3D0 iface=3D0 ep=3D0xffff00003a984f38
 000001.466295 usbd_setup_pipe_flags#1@1: pipe=3D0xffff00003a918000
 000001.466297 usbd_setup_pipe_flags#1@1: pipe=3D0xffff00003a918000
 000001.466298 usbd_get_initial_ddesc#1@1: called: dev 0xffff00003a984f00
 000001.466300 usbd_do_request_len#1@1: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa3c48 flags=3D4 len=3D8
 000001.466308 usbd_alloc_xfer#1@1: called: returns 0xffff00003a981040
 000001.466309 usb_allocmem#2@1: called!
 000001.466312 usbd_transfer#1@1: called: xfer =3D 0xffff00003a981040, flags=
  =3D
 0x6, pipe =3D 0xffff00003a918000, running =3D 0
 000001.466314 roothub_ctrl_start#1@1: called: type=3D0x80 request=3D0x6 len=
 =3D0x8
 value=3D0x100
 000001.466315 roothub_ctrl_start#1@1: wValue=3D0x100
 000001.466318 roothub_ctrl_start#1@1: xfer 0xffff00003a981040 buflen 8
 actlen 8 err 0
 000001.466319 usb_transfer_complete#1@1: called: pipe =3D 0xffff00003a91800=
 0
 xfer =3D 0xffff00003a981040 status =3D 0 actlen =3D 8
 000001.466320 usb_transfer_complete#1@1: xfer 0xffff00003a981040: repeat 0
 new head =3D 0
 000001.466321 usb_transfer_complete#1@1: xfer 0xffff00003a981040 doing done
 0xffffc00000240980
 000001.466323 usb_transfer_complete#1@1: xfer 0xffff00003a981040 doing
 callback 0 status 0
 000001.466323 usb_transfer_complete#1@1: <- done xfer 0xffff00003a981040,
 wakeup
 000001.466324 usbd_start_next#1@1: called: pipe =3D 0xffff00003a918000, xfe=
 r
 =3D 0
 000001.466326 usbd_transfer#1@1: <- done xfer 0xffff00003a981040, sync (err
 0)
 000001.466327 usbd_free_xfer#1@1: called: 0xffff00003a981040
 000001.466329 usb_freemem#1@1: called!
 000001.466332 usb_rem_task_wait#1@1: called!
 000001.466339 usbd_new_device#1@1: adding unit addr=3D1, rev=3D200, class=
 =3D9,
 subclass=3D0
 000001.466341 usbd_new_device#1@1: protocol=3D1, maxpacket=3D64, len=3D18, =
 speed=3D3
 000001.466346 usbd_ar_pipe#1@1: called: pipe =3D 0xffff00003a918000
 000001.466348 usbd_close_pipe#1@1: called!
 000001.466349 usb_rem_task_wait#2@1: called!
 000001.466352 usbd_setup_pipe_flags#2@1: called: dev=3D0xffff00003a984f00
 addr=3D0 iface=3D0 ep=3D0xffff00003a984f38
 000001.466353 usbd_setup_pipe_flags#2@1: pipe=3D0xffff00003a918000
 000001.466354 usbd_setup_pipe_flags#2@1: pipe=3D0xffff00003a918000
 000001.466355 usbd_set_address#1@1: called: dev 0xffff00003a984f00 addr 1
 000001.466356 usbd_do_request_len#2@1: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa3c88 flags=3D0 len=3D0
 000001.466359 usbd_alloc_xfer#2@1: called: returns 0xffff00003a981040
 000001.466359 usbd_transfer#2@1: called: xfer =3D 0xffff00003a981040, flags=
  =3D
 0x2, pipe =3D 0xffff00003a918000, running =3D 0
 000001.466360 roothub_ctrl_start#2@1: called: type=3D0 request=3D0x5 len=3D=
 0
 value=3D0x1
 000001.466361 roothub_ctrl_start#2@1: UR_SET_ADDRESS, UT_WRITE_DEVICE: addr
 1
 000001.466362 roothub_ctrl_start#2@1: xfer 0xffff00003a981040 buflen 0
 actlen 0 err 0
 000001.466362 usb_transfer_complete#2@1: called: pipe =3D 0xffff00003a91800=
 0
 xfer =3D 0xffff00003a981040 status =3D 0 actlen =3D 0
 000001.466363 usb_transfer_complete#2@1: xfer 0xffff00003a981040: repeat 0
 new head =3D 0
 000001.466363 usb_transfer_complete#2@1: xfer 0xffff00003a981040 doing done
 0xffffc00000240980
 000001.466364 usb_transfer_complete#2@1: xfer 0xffff00003a981040 doing
 callback 0 status 0
 000001.466365 usb_transfer_complete#2@1: <- done xfer 0xffff00003a981040,
 wakeup
 000001.466365 usbd_start_next#2@1: called: pipe =3D 0xffff00003a918000, xfe=
 r
 =3D 0
 000001.466366 usbd_transfer#2@1: <- done xfer 0xffff00003a981040, sync (err
 0)
 000001.466366 usbd_free_xfer#2@1: called: 0xffff00003a981040
 000001.466368 usb_rem_task_wait#3@1: called!
 000001.476865 usb_task_thread#1@2: called: start taskq 0xffffc0000113be68
 000001.476871 usb_task_thread#2@2: called: start taskq 0xffffc0000113bea8
 000001.484200 usbd_ar_pipe#2@2: called: pipe =3D 0xffff00003a918000
 000001.484201 usbd_close_pipe#2@2: called!
 000001.484202 usb_rem_task_wait#4@2: called!
 000001.484204 usbd_setup_pipe_flags#3@2: called: dev=3D0xffff00003a984f00
 addr=3D1 iface=3D0 ep=3D0xffff00003a984f38
 000001.484205 usbd_setup_pipe_flags#3@2: pipe=3D0xffff00003a918000
 000001.484207 usbd_setup_pipe_flags#3@2: pipe=3D0xffff00003a918000
 000001.484209 usbd_reload_device_desc#1@2: called!
 000001.484210 usbd_get_device_desc#1@2: called!
 000001.484212 usbd_get_desc#1@2: called: type=3D1, index=3D0, len=3D18
 000001.484212 usbd_do_request_len#3@2: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa3c28 flags=3D0 len=3D12
 000001.484218 usbd_alloc_xfer#3@2: called: returns 0xffff00003a981190
 000001.484219 usb_allocmem#3@2: called!
 000001.484221 usbd_transfer#3@2: called: xfer =3D 0xffff00003a981190, flags=
  =3D
 0x2, pipe =3D 0xffff00003a918000, running =3D 0
 000001.484222 roothub_ctrl_start#3@2: called: type=3D0x80 request=3D0x6
 len=3D0x12 value=3D0x100
 000001.484223 roothub_ctrl_start#3@2: wValue=3D0x100
 000001.484224 roothub_ctrl_start#3@2: xfer 0xffff00003a981190 buflen 18
 actlen 18 err 0
 000001.484225 usb_transfer_complete#3@2: called: pipe =3D 0xffff00003a91800=
 0
 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 18
 000001.484226 usb_transfer_complete#3@2: xfer 0xffff00003a981190: repeat 0
 new head =3D 0
 000001.484226 usb_transfer_complete#3@2: xfer 0xffff00003a981190 doing done
 0xffffc00000240980
 000001.484227 usb_transfer_complete#3@2: xfer 0xffff00003a981190 doing
 callback 0 status 0
 000001.484228 usb_transfer_complete#3@2: <- done xfer 0xffff00003a981190,
 wakeup
 000001.484229 usbd_start_next#3@2: called: pipe =3D 0xffff00003a918000, xfe=
 r
 =3D 0
 000001.484229 usbd_transfer#3@2: <- done xfer 0xffff00003a981190, sync (err
 0)
 000001.484230 usbd_free_xfer#3@2: called: 0xffff00003a981190
 000001.484231 usb_freemem#2@2: called!
 000001.484233 usb_rem_task_wait#5@2: called!
 000001.484240 usbd_new_device#1@2: new dev (addr 1),
 dev=3D0xffff00003a984f00, parent=3D0xffff00003a94c400
 000001.484244 usbd_get_string0#1@2: called!
 000001.484245 usbd_get_string_desc#1@2: called!
 000001.484246 usbd_do_request_len#4@2: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa3ad8 flags=3D4 len=3Dfe
 000001.484248 usbd_alloc_xfer#4@2: called: returns 0xffff00003a981190
 000001.484249 usb_allocmem#4@2: called!
 000001.484250 usb_allocmem#4@2: large alloc 254
 000001.484250 usb_block_allocmem#2@2: called: size=3D8192 align=3D0 flags=
 =3D0
 000001.484273 usbd_transfer#4@2: called: xfer =3D 0xffff00003a981190, flags=
  =3D
 0x6, pipe =3D 0xffff00003a918000, running =3D 0
 000001.484274 roothub_ctrl_start#4@2: called: type=3D0x80 request=3D0x6 len=
 =3D0x2
 value=3D0x300
 000001.484275 roothub_ctrl_start#4@2: wValue=3D0x300
 000001.484276 roothub_ctrl_start#4@2: xfer 0xffff00003a981190 buflen 2
 actlen 2 err 0
 000001.484277 usb_transfer_complete#4@2: called: pipe =3D 0xffff00003a91800=
 0
 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 2
 000001.484277 usb_transfer_complete#4@2: xfer 0xffff00003a981190: repeat 0
 new head =3D 0
 000001.484278 usb_transfer_complete#4@2: xfer 0xffff00003a981190 doing done
 0xffffc00000240980
 000001.484278 usb_transfer_complete#4@2: xfer 0xffff00003a981190 doing
 callback 0 status 0
 000001.484279 usb_transfer_complete#4@2: <- done xfer 0xffff00003a981190,
 wakeup
 000001.484279 usbd_start_next#4@2: called: pipe =3D 0xffff00003a918000, xfe=
 r
 =3D 0
 000001.484280 usbd_transfer#4@2: <- done xfer 0xffff00003a981190, sync (err
 0)
 000001.484281 usbd_free_xfer#4@2: called: 0xffff00003a981190
 000001.484281 usb_freemem#3@2: called!
 000001.484282 usb_freemem#3@2: large free
 000001.484283 usb_block_freemem#1@2: called: size=3D8192
 000001.484284 usb_rem_task_wait#6@2: called!
 000001.484287 usbd_do_request_len#5@2: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa3ad8 flags=3D4 len=3Dfe
 000001.484290 usbd_alloc_xfer#5@2: called: returns 0xffff00003a981190
 000001.484290 usb_allocmem#5@2: called!
 000001.484291 usb_allocmem#5@2: large alloc 254
 000001.484292 usb_block_allocmem#3@2: called: size=3D8192 align=3D0 flags=
 =3D0
 000001.484293 usbd_transfer#5@2: called: xfer =3D 0xffff00003a981190, flags=
  =3D
 0x6, pipe =3D 0xffff00003a918000, running =3D 0
 000001.484293 roothub_ctrl_start#5@2: called: type=3D0x80 request=3D0x6 len=
 =3D0x4
 value=3D0x300
 000001.484294 roothub_ctrl_start#5@2: wValue=3D0x300
 000001.484295 roothub_ctrl_start#5@2: xfer 0xffff00003a981190 buflen 4
 actlen 4 err 0
 000001.484295 usb_transfer_complete#5@2: called: pipe =3D 0xffff00003a91800=
 0
 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 4
 000001.484296 usb_transfer_complete#5@2: xfer 0xffff00003a981190: repeat 0
 new head =3D 0
 000001.484297 usb_transfer_complete#5@2: xfer 0xffff00003a981190 doing done
 0xffffc00000240980
 000001.484297 usb_transfer_complete#5@2: xfer 0xffff00003a981190 doing
 callback 0 status 0
 000001.484298 usb_transfer_complete#5@2: <- done xfer 0xffff00003a981190,
 wakeup
 000001.484298 usbd_start_next#5@2: called: pipe =3D 0xffff00003a918000, xfe=
 r
 =3D 0
 000001.484299 usbd_transfer#5@2: <- done xfer 0xffff00003a981190, sync (err
 0)
 000001.484300 usbd_free_xfer#5@2: called: 0xffff00003a981190
 000001.484300 usb_freemem#4@2: called!
 000001.484301 usb_freemem#4@2: large free
 000001.484302 usb_block_freemem#2@2: called: size=3D8192
 000001.484303 usb_rem_task_wait#7@2: called!
 000001.484305 usbd_get_string_desc#2@2: called!
 000001.484306 usbd_do_request_len#6@2: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa3ad8 flags=3D4 len=3Dfe
 000001.484309 usbd_alloc_xfer#6@2: called: returns 0xffff00003a981190
 000001.484309 usb_allocmem#6@2: called!
 000001.484310 usb_allocmem#6@2: large alloc 254
 000001.484310 usb_block_allocmem#4@2: called: size=3D8192 align=3D0 flags=
 =3D0
 000001.484311 usbd_transfer#6@2: called: xfer =3D 0xffff00003a981190, flags=
  =3D
 0x6, pipe =3D 0xffff00003a918000, running =3D 0
 000001.484312 roothub_ctrl_start#6@2: called: type=3D0x80 request=3D0x6 len=
 =3D0x2
 value=3D0x301
 000001.484313 roothub_ctrl_start#6@2: wValue=3D0x301
 000001.484314 roothub_ctrl_start#6@2: xfer 0xffff00003a981190 buflen 2
 actlen 2 err 0
 000001.484314 usb_transfer_complete#6@2: called: pipe =3D 0xffff00003a91800=
 0
 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 2
 000001.484315 usb_transfer_complete#6@2: xfer 0xffff00003a981190: repeat 0
 new head =3D 0
 000001.484315 usb_transfer_complete#6@2: xfer 0xffff00003a981190 doing done
 0xffffc00000240980
 000001.484316 usb_transfer_complete#6@2: xfer 0xffff00003a981190 doing
 callback 0 status 0
 000001.484317 usb_transfer_complete#6@2: <- done xfer 0xffff00003a981190,
 wakeup
 000001.484317 usbd_start_next#6@2: called: pipe =3D 0xffff00003a918000, xfe=
 r
 =3D 0
 000001.484318 usbd_transfer#6@2: <- done xfer 0xffff00003a981190, sync (err
 0)
 000001.484318 usbd_free_xfer#6@2: called: 0xffff00003a981190
 000001.484319 usb_freemem#5@2: called!
 000001.484320 usb_freemem#5@2: large free
 000001.484320 usb_block_freemem#3@2: called: size=3D8192
 000001.484321 usb_rem_task_wait#8@2: called!
 000001.484324 usbd_do_request_len#7@2: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa3ad8 flags=3D4 len=3Dfe
 000001.484326 usbd_alloc_xfer#7@2: called: returns 0xffff00003a981190
 000001.484327 usb_allocmem#7@2: called!
 000001.484327 usb_allocmem#7@2: large alloc 254
 000001.484328 usb_block_allocmem#5@2: called: size=3D8192 align=3D0 flags=
 =3D0
 000001.484329 usbd_transfer#7@2: called: xfer =3D 0xffff00003a981190, flags=
  =3D
 0x6, pipe =3D 0xffff00003a918000, running =3D 0
 000001.484329 roothub_ctrl_start#7@2: called: type=3D0x80 request=3D0x6 len=
 =3D0xe
 value=3D0x301
 000001.484330 roothub_ctrl_start#7@2: wValue=3D0x301
 000001.484331 roothub_ctrl_start#7@2: xfer 0xffff00003a981190 buflen 14
 actlen 14 err 0
 000001.484331 usb_transfer_complete#7@2: called: pipe =3D 0xffff00003a91800=
 0
 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 14
 000001.484332 usb_transfer_complete#7@2: xfer 0xffff00003a981190: repeat 0
 new head =3D 0
 000001.484332 usb_transfer_complete#7@2: xfer 0xffff00003a981190 doing done
 0xffffc00000240980
 000001.484333 usb_transfer_complete#7@2: xfer 0xffff00003a981190 doing
 callback 0 status 0
 000001.484334 usb_transfer_complete#7@2: <- done xfer 0xffff00003a981190,
 wakeup
 000001.484334 usbd_start_next#7@2: called: pipe =3D 0xffff00003a918000, xfe=
 r
 =3D 0
 000001.484335 usbd_transfer#7@2: <- done xfer 0xffff00003a981190, sync (err
 0)
 000001.484335 usbd_free_xfer#7@2: called: 0xffff00003a981190
 000001.484336 usb_freemem#6@2: called!
 000001.484337 usb_freemem#6@2: large free
 000001.484337 usb_block_freemem#4@2: called: size=3D8192
 000001.484338 usb_rem_task_wait#9@2: called!
 000001.484343 usbd_get_string0#2@2: called!
 000001.484344 usbd_get_string_desc#3@2: called!
 000001.484344 usbd_do_request_len#8@2: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa3ad8 flags=3D4 len=3Dfe
 000001.484347 usbd_alloc_xfer#8@2: called: returns 0xffff00003a981190
 000001.484348 usb_allocmem#8@2: called!
 000001.484348 usb_allocmem#8@2: large alloc 254
 000001.484349 usb_block_allocmem#6@2: called: size=3D8192 align=3D0 flags=
 =3D0
 000001.484350 usbd_transfer#8@2: called: xfer =3D 0xffff00003a981190, flags=
  =3D
 0x6, pipe =3D 0xffff00003a918000, running =3D 0
 000001.484350 roothub_ctrl_start#8@2: called: type=3D0x80 request=3D0x6 len=
 =3D0x2
 value=3D0x302
 000001.484351 roothub_ctrl_start#8@2: wValue=3D0x302
 000001.484352 roothub_ctrl_start#8@2: xfer 0xffff00003a981190 buflen 2
 actlen 2 err 0
 000001.484353 usb_transfer_complete#8@2: called: pipe =3D 0xffff00003a91800=
 0
 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 2
 000001.484353 usb_transfer_complete#8@2: xfer 0xffff00003a981190: repeat 0
 new head =3D 0
 000001.484354 usb_transfer_complete#8@2: xfer 0xffff00003a981190 doing done
 0xffffc00000240980
 000001.484355 usb_transfer_complete#8@2: xfer 0xffff00003a981190 doing
 callback 0 status 0
 000001.484355 usb_transfer_complete#8@2: <- done xfer 0xffff00003a981190,
 wakeup
 000001.484356 usbd_start_next#8@2: called: pipe =3D 0xffff00003a918000, xfe=
 r
 =3D 0
 000001.484356 usbd_transfer#8@2: <- done xfer 0xffff00003a981190, sync (err
 0)
 000001.484357 usbd_free_xfer#8@2: called: 0xffff00003a981190
 000001.484358 usb_freemem#7@2: called!
 000001.484358 usb_freemem#7@2: large free
 000001.484359 usb_block_freemem#5@2: called: size=3D8192
 000001.484360 usb_rem_task_wait#10@2: called!
 000001.484363 usbd_do_request_len#9@2: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa3ad8 flags=3D4 len=3Dfe
 000001.484365 usbd_alloc_xfer#9@2: called: returns 0xffff00003a981190
 000001.484365 usb_allocmem#9@2: called!
 000001.484366 usb_allocmem#9@2: large alloc 254
 000001.484367 usb_block_allocmem#7@2: called: size=3D8192 align=3D0 flags=
 =3D0
 000001.484367 usbd_transfer#9@2: called: xfer =3D 0xffff00003a981190, flags=
  =3D
 0x6, pipe =3D 0xffff00003a918000, running =3D 0
 000001.484368 roothub_ctrl_start#9@2: called: type=3D0x80 request=3D0x6
 len=3D0x1c value=3D0x302
 000001.484368 roothub_ctrl_start#9@2: wValue=3D0x302
 000001.484370 roothub_ctrl_start#9@2: xfer 0xffff00003a981190 buflen 18
 actlen 28 err 0
 000001.484370 usb_transfer_complete#9@2: called: pipe =3D 0xffff00003a91800=
 0
 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 28
 000001.484371 usb_transfer_complete#9@2: xfer 0xffff00003a981190: repeat 0
 new head =3D 0
 000001.484372 usb_transfer_complete#9@2: xfer 0xffff00003a981190 doing done
 0xffffc00000240980
 000001.484372 usb_transfer_complete#9@2: xfer 0xffff00003a981190 doing
 callback 0 status 0
 000001.484373 usb_transfer_complete#9@2: <- done xfer 0xffff00003a981190,
 wakeup
 000001.484373 usbd_start_next#9@2: called: pipe =3D 0xffff00003a918000, xfe=
 r
 =3D 0
 000001.484374 usbd_transfer#9@2: <- done xfer 0xffff00003a981190, sync (err
 0)
 000001.484375 usbd_free_xfer#9@2: called: 0xffff00003a981190
 000001.484375 usb_freemem#8@2: called!
 000001.484376 usb_freemem#8@2: large free
 000001.484376 usb_block_freemem#6@2: called: size=3D8192
 000001.484378 usb_rem_task_wait#11@2: called!
 000001.484385 usbd_get_string0#3@2: called!
 000001.484409 usb_add_event#2@2: called!
 000001.492995 usbd_set_config_index#1@2: called: dev=3D0xffff00003a984f00
 index=3D0
 000001.492997 usbd_get_config_desc#1@2: called: confidx=3D0
 000001.492998 usbd_get_desc#2@2: called: type=3D2, index=3D0, len=3D9
 000001.492998 usbd_do_request_len#10@2: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa3978 flags=3D0 len=3D9
 000001.493003 usbd_alloc_xfer#10@2: called: returns 0xffff00003a981190
 000001.493003 usb_allocmem#10@2: called!
 000001.493006 usbd_transfer#10@2: called: xfer =3D 0xffff00003a981190, flag=
 s
 =3D 0x2, pipe =3D 0xffff00003a918000, running =3D 0
 000001.493007 roothub_ctrl_start#10@2: called: type=3D0x80 request=3D0x6
 len=3D0x9 value=3D0x200
 000001.493007 roothub_ctrl_start#10@2: wValue=3D0x200
 000001.493008 roothub_ctrl_start#10@2: xfer 0xffff00003a981190 buflen 9
 actlen 9 err 0
 000001.493009 usb_transfer_complete#10@2: called: pipe =3D 0xffff00003a9180=
 00
 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 9
 000001.493009 usb_transfer_complete#10@2: xfer 0xffff00003a981190: repeat 0
 new head =3D 0
 000001.493010 usb_transfer_complete#10@2: xfer 0xffff00003a981190 doing
 done 0xffffc00000240980
 000001.493011 usb_transfer_complete#10@2: xfer 0xffff00003a981190 doing
 callback 0 status 0
 000001.493011 usb_transfer_complete#10@2: <- done xfer 0xffff00003a981190,
 wakeup
 000001.493012 usbd_start_next#10@2: called: pipe =3D 0xffff00003a918000, xf=
 er
 =3D 0
 000001.493013 usbd_transfer#10@2: <- done xfer 0xffff00003a981190, sync
 (err 0)
 000001.493013 usbd_free_xfer#10@2: called: 0xffff00003a981190
 000001.493014 usb_freemem#9@2: called!
 000001.493015 usb_rem_task_wait#12@2: called!
 000001.493019 usbd_get_desc#3@2: called: type=3D2, index=3D0, len=3D25
 000001.493019 usbd_do_request_len#11@2: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa39c8 flags=3D0 len=3D19
 000001.493022 usbd_alloc_xfer#11@2: called: returns 0xffff00003a981190
 000001.493022 usb_allocmem#11@2: called!
 000001.493024 usbd_transfer#11@2: called: xfer =3D 0xffff00003a981190, flag=
 s
 =3D 0x2, pipe =3D 0xffff00003a918000, running =3D 0
 000001.493025 roothub_ctrl_start#11@2: called: type=3D0x80 request=3D0x6
 len=3D0x19 value=3D0x200
 000001.493026 roothub_ctrl_start#11@2: wValue=3D0x200
 000001.493026 roothub_ctrl_start#11@2: xfer 0xffff00003a981190 buflen 25
 actlen 25 err 0
 000001.493027 usb_transfer_complete#11@2: called: pipe =3D 0xffff00003a9180=
 00
 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 25
 000001.493028 usb_transfer_complete#11@2: xfer 0xffff00003a981190: repeat 0
 new head =3D 0
 000001.493028 usb_transfer_complete#11@2: xfer 0xffff00003a981190 doing
 done 0xffffc00000240980
 000001.493029 usb_transfer_complete#11@2: xfer 0xffff00003a981190 doing
 callback 0 status 0
 000001.493030 usb_transfer_complete#11@2: <- done xfer 0xffff00003a981190,
 wakeup
 000001.493030 usbd_start_next#11@2: called: pipe =3D 0xffff00003a918000, xf=
 er
 =3D 0
 000001.493031 usbd_transfer#11@2: <- done xfer 0xffff00003a981190, sync
 (err 0)
 000001.493033 usbd_free_xfer#11@2: called: 0xffff00003a981190
 000001.493034 usb_freemem#10@2: called!
 000001.493037 usb_rem_task_wait#13@2: called!
 000001.493041 usbd_set_config_index#1@2: addr 1 cno=3D1 attr=3D0xc0,
 selfpowered=3D1
 000001.493041 usbd_set_config_index#1@2: max power=3D0
 000001.493042 usbd_set_config_index#1@2: set config 1
 000001.493043 usbd_set_config#1@2: called: dev 0xffff00003a984f00 conf 1
 000001.493044 usbd_do_request_len#12@2: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa39c8 flags=3D0 len=3D0
 000001.493046 usbd_alloc_xfer#12@2: called: returns 0xffff00003a981190
 000001.493047 usbd_transfer#12@2: called: xfer =3D 0xffff00003a981190, flag=
 s
 =3D 0x2, pipe =3D 0xffff00003a918000, running =3D 0
 000001.493048 roothub_ctrl_start#12@2: called: type=3D0 request=3D0x9 len=
 =3D0
 value=3D0x1
 000001.493048 roothub_ctrl_start#12@2: xfer 0xffff00003a981190 buflen 0
 actlen 0 err 0
 000001.493049 usb_transfer_complete#12@2: called: pipe =3D 0xffff00003a9180=
 00
 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 0
 000001.493049 usb_transfer_complete#12@2: xfer 0xffff00003a981190: repeat 0
 new head =3D 0
 000001.493050 usb_transfer_complete#12@2: xfer 0xffff00003a981190 doing
 done 0xffffc00000240980
 000001.493050 usb_transfer_complete#12@2: xfer 0xffff00003a981190 doing
 callback 0 status 0
 000001.493051 usb_transfer_complete#12@2: <- done xfer 0xffff00003a981190,
 wakeup
 000001.493052 usbd_start_next#12@2: called: pipe =3D 0xffff00003a918000, xf=
 er
 =3D 0
 000001.493052 usbd_transfer#12@2: <- done xfer 0xffff00003a981190, sync
 (err 0)
 000001.493053 usbd_free_xfer#12@2: called: 0xffff00003a981190
 000001.493054 usb_rem_task_wait#14@2: called!
 000001.493059 usbd_fill_iface_data#1@2: called: ifaceidx=3D0 altidx=3D0
 000001.493060 usbd_find_idesc#1@2: called: iface/alt idx 0/0
 000001.493064 usbd_do_request_len#13@2: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa3ad0 flags=3D0 len=3D9
 000001.493066 usbd_alloc_xfer#13@2: called: returns 0xffff00003a981190
 000001.493067 usb_allocmem#12@2: called!
 000001.493069 usbd_transfer#13@2: called: xfer =3D 0xffff00003a981190, flag=
 s
 =3D 0x2, pipe =3D 0xffff00003a918000, running =3D 0
 000001.493070 roothub_ctrl_start#13@2: called: type=3D0xa0 request=3D0x6
 len=3D0x9 value=3D0x2900
 000001.493071 roothub_ctrl_start#13@2: xfer 0xffff00003a981190 buflen 9
 actlen 9 err 0
 000001.493072 usb_transfer_complete#13@2: called: pipe =3D 0xffff00003a9180=
 00
 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 9
 000001.493072 usb_transfer_complete#13@2: xfer 0xffff00003a981190: repeat 0
 new head =3D 0
 000001.493073 usb_transfer_complete#13@2: xfer 0xffff00003a981190 doing
 done 0xffffc00000240980
 000001.493074 usb_transfer_complete#13@2: xfer 0xffff00003a981190 doing
 callback 0 status 0
 000001.493074 usb_transfer_complete#13@2: <- done xfer 0xffff00003a981190,
 wakeup
 000001.493075 usbd_start_next#13@2: called: pipe =3D 0xffff00003a918000, xf=
 er
 =3D 0
 000001.493075 usbd_transfer#13@2: <- done xfer 0xffff00003a981190, sync
 (err 0)
 000001.493076 usbd_free_xfer#13@2: called: 0xffff00003a981190
 000001.493077 usb_freemem#11@2: called!
 000001.493078 usb_rem_task_wait#15@2: called!
 000001.493122 usbd_open_pipe_intr#1@2: called: address =3D 0x81 flags =3D 0=
 x84
 len =3D 1
 000001.493123 usbd_open_pipe_ival#1@2: called: iface =3D 0xffff00003aaed8c0
 address =3D 0x81 flags =3D 0x81
 000001.493125 usbd_setup_pipe_flags#4@2: called: dev=3D0xffff00003a984f00
 addr=3D1 iface=3D0xffff00003aaed8c0 ep=3D0xffff00003afde3b0
 000001.493127 usbd_setup_pipe_flags#4@2: pipe=3D0xffff00003a918700
 000001.493128 usbd_setup_pipe_flags#4@2: pipe=3D0xffff00003a918700
 000001.493132 usbd_alloc_xfer#14@2: called: returns 0xffff00003a981190
 000001.493132 usb_allocmem#13@2: called!
 000001.493135 usbd_transfer#14@2: called: xfer =3D 0xffff00003a981190, flag=
 s
 =3D 0x84, pipe =3D 0xffff00003a918700, running =3D 0
 000001.493136 usbd_transfer#14@2: <- done xfer 0xffff00003a981190, not sync
 (err 1)
 000001.493144 usb_add_event#3@2: called!
 000001.493148 usbd_set_port_feature#1@2: called: dev 0xffff00003a984f00
 port 8 sel
 000001.493148 usbd_do_request_len#14@2: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fa3a68 flags=3D0 len=3D0
 000001.493153 usbd_alloc_xfer#15@2: called: returns 0xffff00003a9812e0
 000001.493154 usbd_transfer#15@2: called: xfer =3D 0xffff00003a9812e0, flag=
 s
 =3D 0x2, pipe =3D 0xffff00003a918000, running =3D 0
 000001.493155 roothub_ctrl_start#14@2: called: type=3D0x23 request=3D0x3 le=
 n=3D0
 value=3D0x8
 000001.493155 roothub_ctrl_start#14@2: xfer 0xffff00003a9812e0 buflen -1
 actlen 0 err 0
 000001.493156 usb_transfer_complete#14@2: called: pipe =3D 0xffff00003a9180=
 00
 xfer =3D 0xffff00003a9812e0 status =3D 0 actlen =3D 0
 000001.493157 usb_transfer_complete#14@2: xfer 0xffff00003a9812e0: repeat 0
 new head =3D 0
 000001.493157 usb_transfer_complete#14@2: xfer 0xffff00003a9812e0 doing
 done 0xffffc00000240980
 000001.493158 usb_transfer_complete#14@2: xfer 0xffff00003a982e0 doing
 callback 0 status 0
 000001.493159 usb_transfer_complete#14@2: <- done xfer 0xffff00003a9812e0,
 wakeup
 000001.493161 usbd_start_next#14@2: called: pipe =3D 0xffff00003a918000, xf=
 er
 =3D 0
 000001.493162 usbd_transfer#15@2: <- done xfer 0xffff00003a9812e0, sync
 (err 0)
 000001.493163 usbd_free_xfer#14@2: called: 0xffff00003a9812e0
 000001.493165 usb_rem_task_wait#16@2: called!
 000001.493195 usb_event_thread#1@0: called!
 000001.493197 usb_discover#1@0: called!
 000001.493199 usbd_get_hub_status#1@0: called: dev 0xffff00003a984f00
 000001.493200 usbd_do_request_len#15@0: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fbbd78 flags=3D0 len=3D4
 000001.493207 usbd_alloc_xfer#16@0: called: returns 0xffff00003a981430
 000001.493207 usb_allocmem#14@0: called!
 000001.493210 usbd_transfer#16@0: called: xfer =3D 0xffff00003a981430, flag=
 s
 =3D 0x2, pipe =3D 0xffff00003a918000, running =3D 0
 000001.493211 roothub_ctrl_start#15@0: called: type=3D0xa0 request=3D0 len=
 =3D0x4
 value=3D0
 000001.493212 roothub_ctrl_start#15@0: xfer 0xffff00003a981430 buflen -1
 actlen 4 err 0
 000001.493213 usb_transfer_complete#15@0: called: pipe =3D 0xffff00003a9180=
 00
 xfer =3D 0xffff00003a981430 status =3D 0 actlen =3D 4
 000001.493213 usb_transfer_complete#15@0: xfer 0xffff00003a981430: repeat 0
 new head =3D 0
 000001.493214 usb_transfer_complete#15@0: xfer 0xffff00003a981430 doing
 done 0xffffc00000240980
 000001.493215 usb_transfer_complete#15@0: xfer 0xffff00003a981430 dong
 callback 0 status 0
 000001.493215 usb_transfer_complete#15@0: <- done xfer 0xffff00003a981430,
 wakeup
 000001.493216 usbd_start_next#15@0: called: pipe =3D 0xffff00003a918000, xf=
 er
 =3D 0
 000001.493217 usbd_transfer#16@0: <- done xfer 0xffff00003a981430, sync
 (err 0)
 000001.493218 usbd_free_xfer#15@0: called: 0xffff00003a981430
 000001.493218 usb_freemem#12@0: called!
 000001.493220 usb_rem_task_wait#17@0: called!
 000001.493229 usbd_get_port_status#1@0: called: dev 0xffff00003a984f00 port
 1
 000001.493230 usbd_do_request_len#16@0: called: dev=3D0xffff00003a984f00
 req=3Dffffc000b0fbbd78 flags=3D0 len=3D4
 000001.493233 usbd_alloc_xfer#17@0: called: returns 0xffff00003a981430
 000001.493233 usb_allocmem#15@0: called!
 000001.493235 usbd_transfer#17@0: called: xfer =3D 0xffff00003a981430, flag=
 s
 =3D 0x2, pipe =3D 0xffff00003a918000, running =3D 0
 000001.493236 roothub_ctrl_start#16@0: called: type=3D0xa3 request=3D0 len=
 =3D0x4
 value=3D0
 000001.493237 roothub_ctrl_start#16@0: xfer 0xffff00003a981430 buflen -1
 actlen 4 err 0
 00000.493237 usb_transfer_complete#16@0: called: pipe =3D 0xffff00003a91800=
 0
 xfer =3D 0xffff00003a981430 status =3D 0 actlen =3D 4
 000001.493238 usb_transfer_complete#16@0: xfer 0xffff00003a981430: repeat 0
 new head =3D 0
 000001.493239 usb_transfer_complete#16@0: xfer 0xffff00003a981430 doing
 done 0xffffc00000240980
 000001.493240 usb_transfer_complete#16@0: xfer 0xffff00003a981430 doing
 callback 0 stats 0
 000001.493241 usb_transfer_complete#16@0: <- done xfer 0xffff00003a981430,
 wakeup
 000001.493241 usbd_start_next#16@0: called: pipe =3D 0xffff00003a918000, xf=
 er
 =3D 0
 000001.493242 usbd_transfer#17@0: <- done xfer 0xffff00003a981430, sync
 (err 0)
 000001.493242 usbd_free_xfer#16@0: called: 0xffff00003a981430
 000001.493243 usb_freemem#13@0: called!
 000001.493245 usb_rem_task_wait#18@0: called!
 000001.493249 usb_discover#2@0: called!
 000061.493583 usb_discover#3@0: called!
 000121.497526 usb_discover#4@0: called!
 000181.501472 usb_discover#5@0: called!
 000241.505422 usb_discover#6@0: called!
 000301.509371 usb_discover#7@0: called!
 000361.513318 usb_discover#8@0: called!
 000421.517263 usb_discover#9@0: called!
 000481.521199 usb_discover#10@0: called!
 000541.525142 usb_discover#11@0: called!
 000601.529086 usb_discover#12@0: called!
 000661.533028 usb_discover#13@0: called!
 000721.536973 usb_discover#14@0: called!
 000781.540918 usb_discover#15@0: called!
 000841.544863 usb_discover#16@0: called!
 000901.548806 usb_discover#17@0: called!
 000961.552748 usb_discover#18@0: called!
 db{2}>

 On Tue, Aug 4, 2026 at 11:35=E2=80=AFAM Nick Hudson via gnats <
 gnats-admin@netbsd.org> wrote:
 >
 > The following reply was made to PR port-arm/60021; it has been noted by
 GNATS.
 >
 > From: Nick Hudson <nick.hudson@gmx.co.uk>
 > To: Taylor R Campbell <riastradh@NetBSD.org>
 > Cc: mac@culver.net,
 >  "gnats-bugs@netbsd.org" <gnats-bugs@NetBSD.org>,
 >  "netbsd-bugs@netbsd.org" <netbsd-bugs@NetBSD.org>
 > Subject: Re: port-arm/60021: USB-only boot: uhub0 attaches but uhub1 neve=
 r
 >  appears, no hotplug events; SD-boot sees hub+umass fine
 > Date: Tue, 4 Aug 2026 19:32:12 +0100
 >
 >  > On 4 Aug 2026, at 14:34, Taylor R Campbell <riastradh@NetBSD.org> =3D
 >  wrote:
 >  >=3D20
 >  >> Date: Sat, 21 Feb 2026 10:39:41 +0000
 >  >> From: Nick Hudson <nick.hudson@gmx.co.uk>
 >  >>=3D20
 >  >> This is almost certainly that autoconf doesn't wait (long enough) for
 >  >> sub-ordintate hubs
 >  >>=3D20
 >  >> https://nxr.netbsd.org/xref/src/sys/dev/usb/uhub.c#880
 >  >>=3D20
 >  >>     880 mutex_enter(&sc->sc_lock);
 >  >>     881 sc->sc_explorepending =3D3D false;
 >  >>     882 for (int i =3D3D 0; i < sc->sc_statuslen; i++) {
 >  >>     883 if (sc->sc_statuspend[i] !=3D3D 0) {
 >  >>     884 memcpy(sc->sc_status, sc->sc_statuspend,
 >  >>     885    sc->sc_statuslen);
 >  >>     886 memset(sc->sc_statuspend, 0, sc->sc_statuslen);
 >  >>     887 usb_needs_explore(sc->sc_hub);
 >  >>     888 break;
 >  >>     889 }
 >  >>     890 }
 >  >>     891 mutex_exit(&sc->sc_lock);
 >  >>     892 if (sc->sc_first_explore) {
 >  >>     893 config_pending_decr(sc->sc_dev);
 >  >>     894 sc->sc_first_explore =3D3D false;
 >  >>     895 }
 >  >=3D20
 >  > I don't understand, doesn't it wait for subordinate hubs?
 >
 >  Sure, but not long enough...
 >
 >  > ... Maybe the
 >  > USB hub just doesn't report the device ready at first?
 >
 >  Because there=3DE2=3D80=3D99s no guarantee (afaik) that the root hub wil=
 l see =3D
 >  the built-in hub immediately.

 --0000000000001c50be0658580742
 Content-Type: text/html; charset="UTF-8"
 Content-Transfer-Encoding: quoted-printable

 <div dir=3D"ltr"><span class=3D"gmail_default" style=3D"font-family:arial,h=
 elvetica,sans-serif;font-size:small"></span>Here is the output with usb deb=
 ug:<br><br><br>RPi3B+ USB boot diagnostic kernel<br><br>Wed Aug =C2=A05 20:=
 44:41 UTC 2026<br><br>NetBSD <a href=3D"http://SS.Culver.Net">SS.Culver.Net=
 </a> 11.0_RC5 NetBSD 11.0_RC5 (GENERIC) #0: Tue Jun 16 15:48:07 UTC 2026 =
 =C2=A0mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/amd64/compile/GENERIC am=
 d64<br><br>Target: MACHINE=3Devbarm MACHINE_ARCH=3Daarch64<br>Source branch=
 : netbsd-11<br>Kernel configuration: GENERIC64_USBDEBUG<br><br>Kernel hashe=
 s:<br>SHA256 (/root/obj-rpi3b-usbdebug/sys/arch/evbarm/compile/GENERIC64_US=
 BDEBUG/netbsd) =3D 96bdfcf491362c83a1eedd251c5de5bb44f9f8a565a351a6ee58e652=
 cbfea91d<br>SHA256 (/root/obj-rpi3b-usbdebug/sys/arch/evbarm/compile/GENERI=
 C64_USBDEBUG/netbsd.img) =3D 6b0a14b4faf31249a9fd583c2e8ead68cf3fe4501484d9=
 cb688992630a2f9773<br><br>Relevant CVS revisions:<br>File: usb.c =C2=A0 =C2=
 =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Status: Up-to-date<br>=C2=A0 =C2=A0Working =
 revision: =C2=A0 =C2=A01.203<br>=C2=A0 =C2=A0Sticky Tag: =C2=A0 =C2=A0 =C2=
 =A0 =C2=A0 =C2=A0netbsd-11 (branch: 1.203.4)<br>File: uhub.c =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A0Status: Up-to-date<br>=C2=A0 =C2=A0Working revis=
 ion: =C2=A0 =C2=A01.162<br>=C2=A0 =C2=A0Sticky Tag: =C2=A0 =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0netbsd-11 (branch: 1.162.4)<br>File: usb_subr.c =C2=A0 =C2=A0 =
 =C2=A0 =C2=A0Status: Up-to-date<br>=C2=A0 =C2=A0Working revision: =C2=A0 =
 =C2=A01.279.4.1<br>=C2=A0 =C2=A0Sticky Tag: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
 =A0netbsd-11 (branch: 1.279.4)<br><br>=E2=96=92[ =C2=A0 1.0000000] NetBSD/e=
 vbarm (fdt) booting ...<br>[ =C2=A0 1.0000000] Copyright (c) 1996, 1997, 19=
 98, 1999, 2000, 2001, 2002, 2003,<br>[ =C2=A0 1.0000000] =C2=A0 =C2=A0 2004=
 , 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013,<br>[ =C2=A0 1.00000=
 00] =C2=A0 =C2=A0 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 202=
 3,<br>[ =C2=A0 1.0000000] =C2=A0 =C2=A0 2024, 2025, 2026<br>[ =C2=A0 1.0000=
 000] =C2=A0 =C2=A0 The NetBSD Foundation, Inc.=C2=A0 All rights reserved.<b=
 r>[ =C2=A0 1.0000000] Copyright (c) 1982, 1986, 1989, 1991, 1993<br>[ =C2=
 =A0 1.0000000] =C2=A0 =C2=A0 The Regents of the University of California.=
 =C2=A0 All rights reserved.<br><br>[ =C2=A0 1.0000000] NetBSD 11.0_STABLE (=
 GENERIC64_USBDEBUG) #0: Wed Aug =C2=A05 19:49:20 UTC 2026<br>[ =C2=A0 1.000=
 0000] =C2=A0root@SS.Culver.Net:/root/obj-rpi3b-usbdebug/sys/arch/evbarm/com=
 pile/GENERIC64_USBDEBUG<br>[ =C2=A0 1.0000000] total memory =3D 925 MB<br>[=
  =C2=A0 1.0000000] avail memory =3D 890 MB<br>[ =C2=A0 1.0000000] armfdt0 (=
 root)<br>[ =C2=A0 1.0000000] simplebus0 at armfdt0: Raspberry Pi 3 Model B =
 Plus Rev 1.4<br>[ =C2=A0 1.0000000] simplebus1 at simplebus0<br>[ =C2=A0 1.=
 0000000] simplebus2 at simplebus0<br>[ =C2=A0 1.0000000] cpus0 at simplebus=
 0<br>[ =C2=A0 1.0000000] simplebus3 at simplebus0<br>[ =C2=A0 1.0000000] cp=
 u0 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0x0<br>[ =C2=A0 1.0000000] cpu0=
 : package 0, core 0, smt 0, numa 0<br>[ =C2=A0 1.0000000] cpu1 at cpus0: Ar=
 m Cortex-A53 r0p4 (v8-A), id 0x1<br>[ =C2=A0 1.0000000] cpu1: package 0, co=
 re 1, smt 0, numa 0<br>[ =C2=A0 1.0000000] cpu2 at cpus0: Arm Cortex-A53 r0=
 p4 (v8-A), id 0x2<br>[ =C2=A0 1.0000000] cpu2: package 0, core 2, smt 0, nu=
 ma 0<br>[ =C2=A0 1.0000000] cpu3 at cpus0: Arm Cortex-A53 r0p4 (v8-A), id 0=
 x3<br>[ =C2=A0 1.0000000] cpu3: package 0, core 3, smt 0, numa 0<br>[ =C2=
 =A0 1.0000000] bcmicu0 at simplebus1<br>[ =C2=A0 1.0000000] fclock0 at simp=
 lebus2: 19200000 Hz fixed clock (osc)<br>[ =C2=A0 1.0000000] bcmcprman0 at =
 simplebus1: BCM283x Clock Controller<br>[ =C2=A0 1.0000000] syscon0 at simp=
 lebus1: couldn&#39;t get registers<br>[ =C2=A0 1.0000000] bcmaux0 at simple=
 bus1<br>[ =C2=A0 1.0000000] fclock1 at simplebus2: 480000000 Hz fixed clock=
  (otg)<br>[ =C2=A0 1.0000000] bcmicu1 at simplebus1: Multiprocessor<br>[ =
 =C2=A0 1.0000000] gtmr0 at simplebus0: Generic Timer<br>[ =C2=A0 1.0000000]=
  gtmr0: interrupting on local_intc irq 3<br>[ =C2=A0 1.0000000] armgtmr0 at=
  gtmr0: Generic Timer (19200 kHz, virtual)<br>[ =C2=A0 1.0000040] bcmgpio0 =
 at simplebus1: GPIO controller 2835<br>[ =C2=A0 1.0000040] bcmgpio0: pins 0=
 ..31 interrupting on icu irq 49<br>[ =C2=A0 1.0000040] bcmgpio0: pins 32..5=
 4 interrupting on icu irq 50<br>[ =C2=A0 1.0000040] gpio0 at bcmgpio0: 54 p=
 ins<br>[ =C2=A0 1.0000040] plcom0 at simplebus1: ARM PL011 UART<br>[ =C2=A0=
  1.0000040] plcom0: txfifo 16 bytes<br>[ =C2=A0 1.0000040] plcom0: interrup=
 ting on icu irq 57<br>[ =C2=A0 1.0000040] com0 at simplebus1: BCM AUX UART,=
  1-byte FIFO<br>[ =C2=A0 1.0000040] com0: console<br>[ =C2=A0 1.0000040] co=
 m0: interrupting on icu irq 29, clock 800000000 Hz<br>[ =C2=A0 1.0000040] m=
 mcpwrseq0 at simplebus0: couldn&#39;t get reset GPIOs<br>[ =C2=A0 1.0000040=
 ] /soc/thermal@7e212000 at simplebus1 not configured<br>[ =C2=A0 1.0000040]=
  bcmdmac0 at simplebus1: DMA0 DMA2 DMA4 DMA5 DMA6 DMA7 DMA8 DMA9 DMA10 DMA1=
 1<br>[ =C2=A0 1.0000040] /soc/power at simplebus1 not configured<br>[ =C2=
 =A0 1.0000040] /phy at simplebus0 not configured<br>[ =C2=A0 1.0000040] bsc=
 iic0 at simplebus1: Broadcom Serial Controller<br>[ =C2=A0 1.0000040] bscii=
 c0: interrupting on icu irq 53<br>[ =C2=A0 1.0000040] iic0 at bsciic0: I2C =
 bus<br>[ =C2=A0 1.0000040] bcmmbox0 at simplebus1: VC mailbox<br>[ =C2=A0 1=
 .0000040] bcmmbox0: interrupting on icu irq 65<br>[ =C2=A0 1.0000040] vcmbo=
 x0 at bcmmbox0<br>[ =C2=A0 1.0000040] /soc/timer@7e003000 at simplebus1 not=
  configured<br>[ =C2=A0 1.0000040] /soc/txp@7e004000 at simplebus1 not conf=
 igured<br>[ =C2=A0 1.0000040] bcmsdhost0 at simplebus1: SD HOST controller<=
 br>[ =C2=A0 1.0000040] bcmsdhost0: interrupting on icu irq 56<br>[ =C2=A0 1=
 .0000040] bsciic1 at simplebus1: Broadcom Serial Controller<br>[ =C2=A0 1.0=
 000040] bsciic1: interrupting on icu irq 53<br>[ =C2=A0 1.0000040] iic1 at =
 bsciic1: I2C bus<br>[ =C2=A0 1.0000040] /soc/pwm@7e20c000 at simplebus1 not=
  configured<br>[ =C2=A0 1.0000040] sdhc0 at simplebus1: SDHC controller<br>=
 [ =C2=A0 1.0000040] sdhc0: interrupting on icu irq 62<br>[ =C2=A0 1.0000040=
 ] bsciic2 at simplebus1: Broadcom Serial Controller<br>[ =C2=A0 1.0000040] =
 bsciic2: interrupting on icu irq 53<br>[ =C2=A0 1.0000040] iic2 at bsciic2:=
  I2C bus<br>[ =C2=A0 1.0000040] dwctwo0 at simplebus1: USB controller<br>[ =
 =C2=A0 1.0000040] dwctwo0: interrupting on icu irq 9<br>[ =C2=A0 1.0000040]=
  bcmpmwdog0 at simplebus1: Power management, Reset and Watchdog controller<=
 br>[ =C2=A0 1.0000040] /soc/vec@7e806000 at simplebus1 not configured<br>[ =
 =C2=A0 1.0000040] /soc/hdmi@7e902000 at simplebus1 not configured<br>[ =C2=
 =A0 1.0000040] /soc/gpu at simplebus1 not configured<br>[ =C2=A0 1.0000040]=
  genfb0 at simplebus1<br>[ =C2=A0 1.0000040] wsdisplay0 at genfb0 kbdmux 1<=
 br>[ =C2=A0 1.0000040] vchiq0 at simplebus1: BCM2835 VCHIQ<br>[ =C2=A0 1.00=
 00040] armpmu0 at simplebus0: Performance Monitor Unit<br>[ =C2=A0 1.000004=
 0] gpioleds0 at simplebus0: ACT<br>[ =C2=A0 1.0000040] bcmrng0 at simplebus=
 1: RNG<br>[ =C2=A0 1.0000040] entropy: ready<br>[ =C2=A0 1.4296116] sdmmc0 =
 at bcmsdhost0<br>[ =C2=A0 1.4296116] sdhc0: SDHC 3.0, rev 153, platform DMA=
 , 200000 kHz, HS 3.3V, re-tuning mode 1, 1024 byte blocks<br>[ =C2=A0 1.439=
 6132] sdmmc1 at sdhc0 slot 0<br>[ =C2=A0 1.4596145] usb0 at dwctwo0: USB re=
 vision 2.0<br>[ =C2=A0 1.4696151] armpmu0: interrupting on local_intc irq 9=
 <br>[ =C2=A0 1.4796185] uhub0 at usb0: NetBSD (0x0000) DWC2 root hub (0x000=
 0), class 9/0, rev 2.00/1.00, addr 1<br>[ =C2=A0 1.5596215] sdmmc0: direct =
 I/O error 5, r=3D6 p=3D0xffffc000b0fe3e5c write<br>[ =C2=A0 1.5696218] sdmm=
 c0: couldn&#39;t enable card: 5<br>[ =C2=A0 1.6396270] sdmmc1: 4-bit width,=
  50.000 MHz<br>[ =C2=A0 1.6496270] sdmmc1: SDIO function<br>[ =C2=A0 1.6496=
 270] bwfm0 at sdmmc1 function 1<br>[ =C2=A0 1.6596295] (manufacturer 0x2d0,=
  product 0xa9a6) at sdmmc1 function 2 not configured<br>[ =C2=A0 1.6696310]=
  (manufacturer 0x2d0, product 0xa9a6, standard function interface code 0x2)=
  at sdmmc1 function 3 not configured<br>[ =C2=A0 1.6807857] swwdog0: softwa=
 re watchdog initialized<br>[ =C2=A0 1.6807857] WARNING: 3 errors while dete=
 cting hardware; check system log.<br>[ =C2=A0 1.6896315] boot device: &lt;u=
 nknown&gt;<br>[ =C2=A0 1.6896315] unknown device major 0xffffffffffffffff<b=
 r>[ =C2=A0 2.6896969] unknown device major 0xffffffffffffffff<br>[ =C2=A0 3=
 .6897623] unknown device major 0xffffffffffffffff<br>[ =C2=A0 4.6898281] un=
 known device major 0xffffffffffffffff<br>[ =C2=A0 5.6898932] unknown device=
  major 0xffffffffffffffff<br>[ =C2=A0 6.6899576] unknown device major 0xfff=
 fffffffffffff<br>[ =C2=A0 7.6900234] unknown device major 0xfffffffffffffff=
 f<br>[ =C2=A0 8.6900887] unknown device major 0xffffffffffffffff<br>[ =C2=
 =A0 9.6901540] unknown device major 0xffffffffffffffff<br>[ =C2=A010.690219=
 6] unknown device major 0xffffffffffffffff<br>[ =C2=A011.6902858] unknown d=
 evice major 0xffffffffffffffff<br>[ =C2=A012.6903514] unknown device major =
 0xffffffffffffffff<br>[ =C2=A013.6904171] unknown device major 0xffffffffff=
 ffffff<br>[ =C2=A014.6904828] unknown device major 0xffffffffffffffff<br>[ =
 =C2=A015.6905485] unknown device major 0xffffffffffffffff<br>[ =C2=A016.690=
 6144] unknown device major 0xffffffffffffffff<br>[ =C2=A017.6906794] unknow=
 n device major 0xffffffffffffffff<br>[ =C2=A018.6907446] unknown device maj=
 or 0xffffffffffffffff<br>[ =C2=A019.6908105] unknown device major 0xfffffff=
 fffffffff<br>[ =C2=A020.6908759] unknown device major 0xffffffffffffffff<br=
 >[ =C2=A021.6909417] unknown device major 0xffffffffffffffff<br>[ =C2=A021.=
 7009432] root device:<br>[ =C2=A062.5036280] use one of: bwfm0 ddb halt reb=
 oot<br>[ =C2=A062.5036280] root device: ddb<br>Stopped in pid 0.0 (system) =
 at =C2=A0netbsd:cpu_Debugger+0xc: =C2=A0 =C2=A0 =C2=A0 =C2=A0ldp =C2=A0 =C2=
 =A0 x29, x30<br>, [sp],#16<br>db{2}&gt; set $lines =3D 0<br>$lines =C2=A0 =
 =C2=A0 =C2=A0 =C2=A0 =C2=A018 =3D 0<br>db{2}&gt; set $maxwidth =3D 0<br>$ma=
 xwidth =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 50 =3D 0<br>db{2}&g=
 t; show kernhist/i<br>kernhist &#39;usbhist&#39;: at 0xffffc00000d0e058 tot=
 al 50000 next free 366<br>db{2}&gt; show kernhist usbhist<br>000001.451787 =
 usb_allocmem#1@1: called!<br>000001.451789 usb_allocmem#1@1: adding fragmen=
 ts<br>000001.451791 usb_block_allocmem#1@1: called: size=3D8192 align=3D128=
  flags=3D0x2<br>000001.462478 usb_match#1@1: called!<br>000001.466272 usb_d=
 oattach#1@1: called!<br>000001.466282 usb_add_event#1@1: called!<br>000001.=
 466285 usbd_new_device#1@1: called: bus=3D0xffff00003ac0b830 port=3D0 depth=
 =3D0 speed=3D3<br>000001.466290 usbd_setup_pipe_flags#1@1: called: dev=3D0x=
 ffff00003a984f00 addr=3D0 iface=3D0 ep=3D0xffff00003a984f38<br>000001.46629=
 5 usbd_setup_pipe_flags#1@1: pipe=3D0xffff00003a918000<br>000001.466297 usb=
 d_setup_pipe_flags#1@1: pipe=3D0xffff00003a918000<br>000001.466298 usbd_get=
 _initial_ddesc#1@1: called: dev 0xffff00003a984f00<br>000001.466300 usbd_do=
 _request_len#1@1: called: dev=3D0xffff00003a984f00 req=3Dffffc000b0fa3c48 f=
 lags=3D4 len=3D8<br>000001.466308 usbd_alloc_xfer#1@1: called: returns 0xff=
 ff00003a981040<br>000001.466309 usb_allocmem#2@1: called!<br>000001.466312 =
 usbd_transfer#1@1: called: xfer =3D 0xffff00003a981040, flags =3D 0x6, pipe=
  =3D 0xffff00003a918000, running =3D 0<br>000001.466314 roothub_ctrl_start#=
 1@1: called: type=3D0x80 request=3D0x6 len=3D0x8 value=3D0x100<br>000001.46=
 6315 roothub_ctrl_start#1@1: wValue=3D0x100<br>000001.466318 roothub_ctrl_s=
 tart#1@1: xfer 0xffff00003a981040 buflen 8 actlen 8 err 0<br>000001.466319 =
 usb_transfer_complete#1@1: called: pipe =3D 0xffff00003a918000 xfer =3D 0xf=
 fff00003a981040 status =3D 0 actlen =3D 8<br>000001.466320 usb_transfer_com=
 plete#1@1: xfer 0xffff00003a981040: repeat 0 new head =3D 0<br>000001.46632=
 1 usb_transfer_complete#1@1: xfer 0xffff00003a981040 doing done 0xffffc0000=
 0240980<br>000001.466323 usb_transfer_complete#1@1: xfer 0xffff00003a981040=
  doing callback 0 status 0<br>000001.466323 usb_transfer_complete#1@1: &lt;=
 - done xfer 0xffff00003a981040, wakeup<br>000001.466324 usbd_start_next#1@1=
 : called: pipe =3D 0xffff00003a918000, xfer =3D 0<br>000001.466326 usbd_tra=
 nsfer#1@1: &lt;- done xfer 0xffff00003a981040, sync (err 0)<br>000001.46632=
 7 usbd_free_xfer#1@1: called: 0xffff00003a981040<br>000001.466329 usb_freem=
 em#1@1: called!<br>000001.466332 usb_rem_task_wait#1@1: called!<br>000001.4=
 66339 usbd_new_device#1@1: adding unit addr=3D1, rev=3D200, class=3D9, subc=
 lass=3D0<br>000001.466341 usbd_new_device#1@1: protocol=3D1, maxpacket=3D64=
 , len=3D18, speed=3D3<br>000001.466346 usbd_ar_pipe#1@1: called: pipe =3D 0=
 xffff00003a918000<br>000001.466348 usbd_close_pipe#1@1: called!<br>000001.4=
 66349 usb_rem_task_wait#2@1: called!<br>000001.466352 usbd_setup_pipe_flags=
 #2@1: called: dev=3D0xffff00003a984f00 addr=3D0 iface=3D0 ep=3D0xffff00003a=
 984f38<br>000001.466353 usbd_setup_pipe_flags#2@1: pipe=3D0xffff00003a91800=
 0<br>000001.466354 usbd_setup_pipe_flags#2@1: pipe=3D0xffff00003a918000<br>=
 000001.466355 usbd_set_address#1@1: called: dev 0xffff00003a984f00 addr 1<b=
 r>000001.466356 usbd_do_request_len#2@1: called: dev=3D0xffff00003a984f00 r=
 eq=3Dffffc000b0fa3c88 flags=3D0 len=3D0<br>000001.466359 usbd_alloc_xfer#2@=
 1: called: returns 0xffff00003a981040<br>000001.466359 usbd_transfer#2@1: c=
 alled: xfer =3D 0xffff00003a981040, flags =3D 0x2, pipe =3D 0xffff00003a918=
 000, running =3D 0<br>000001.466360 roothub_ctrl_start#2@1: called: type=3D=
 0 request=3D0x5 len=3D0 value=3D0x1<br>000001.466361 roothub_ctrl_start#2@1=
 : UR_SET_ADDRESS, UT_WRITE_DEVICE: addr 1<br>000001.466362 roothub_ctrl_sta=
 rt#2@1: xfer 0xffff00003a981040 buflen 0 actlen 0 err 0<br>000001.466362 us=
 b_transfer_complete#2@1: called: pipe =3D 0xffff00003a918000 xfer =3D 0xfff=
 f00003a981040 status =3D 0 actlen =3D 0<br>000001.466363 usb_transfer_compl=
 ete#2@1: xfer 0xffff00003a981040: repeat 0 new head =3D 0<br>000001.466363 =
 usb_transfer_complete#2@1: xfer 0xffff00003a981040 doing done 0xffffc000002=
 40980<br>000001.466364 usb_transfer_complete#2@1: xfer 0xffff00003a981040 d=
 oing callback 0 status 0<br>000001.466365 usb_transfer_complete#2@1: &lt;- =
 done xfer 0xffff00003a981040, wakeup<br>000001.466365 usbd_start_next#2@1: =
 called: pipe =3D 0xffff00003a918000, xfer =3D 0<br>000001.466366 usbd_trans=
 fer#2@1: &lt;- done xfer 0xffff00003a981040, sync (err 0)<br>000001.466366 =
 usbd_free_xfer#2@1: called: 0xffff00003a981040<br>000001.466368 usb_rem_tas=
 k_wait#3@1: called!<br>000001.476865 usb_task_thread#1@2: called: start tas=
 kq 0xffffc0000113be68<br>000001.476871 usb_task_thread#2@2: called: start t=
 askq 0xffffc0000113bea8<br>000001.484200 usbd_ar_pipe#2@2: called: pipe =3D=
  0xffff00003a918000<br>000001.484201 usbd_close_pipe#2@2: called!<br>000001=
 .484202 usb_rem_task_wait#4@2: called!<br>000001.484204 usbd_setup_pipe_fla=
 gs#3@2: called: dev=3D0xffff00003a984f00 addr=3D1 iface=3D0 ep=3D0xffff0000=
 3a984f38<br>000001.484205 usbd_setup_pipe_flags#3@2: pipe=3D0xffff00003a918=
 000<br>000001.484207 usbd_setup_pipe_flags#3@2: pipe=3D0xffff00003a918000<b=
 r>000001.484209 usbd_reload_device_desc#1@2: called!<br>000001.484210 usbd_=
 get_device_desc#1@2: called!<br>000001.484212 usbd_get_desc#1@2: called: ty=
 pe=3D1, index=3D0, len=3D18<br>000001.484212 usbd_do_request_len#3@2: calle=
 d: dev=3D0xffff00003a984f00 req=3Dffffc000b0fa3c28 flags=3D0 len=3D12<br>00=
 0001.484218 usbd_alloc_xfer#3@2: called: returns 0xffff00003a981190<br>0000=
 01.484219 usb_allocmem#3@2: called!<br>000001.484221 usbd_transfer#3@2: cal=
 led: xfer =3D 0xffff00003a981190, flags =3D 0x2, pipe =3D 0xffff00003a91800=
 0, running =3D 0<br>000001.484222 roothub_ctrl_start#3@2: called: type=3D0x=
 80 request=3D0x6 len=3D0x12 value=3D0x100<br>000001.484223 roothub_ctrl_sta=
 rt#3@2: wValue=3D0x100<br>000001.484224 roothub_ctrl_start#3@2: xfer 0xffff=
 00003a981190 buflen 18 actlen 18 err 0<br>000001.484225 usb_transfer_comple=
 te#3@2: called: pipe =3D 0xffff00003a918000 xfer =3D 0xffff00003a981190 sta=
 tus =3D 0 actlen =3D 18<br>000001.484226 usb_transfer_complete#3@2: xfer 0x=
 ffff00003a981190: repeat 0 new head =3D 0<br>000001.484226 usb_transfer_com=
 plete#3@2: xfer 0xffff00003a981190 doing done 0xffffc00000240980<br>000001.=
 484227 usb_transfer_complete#3@2: xfer 0xffff00003a981190 doing callback 0 =
 status 0<br>000001.484228 usb_transfer_complete#3@2: &lt;- done xfer 0xffff=
 00003a981190, wakeup<br>000001.484229 usbd_start_next#3@2: called: pipe =3D=
  0xffff00003a918000, xfer =3D 0<br>000001.484229 usbd_transfer#3@2: &lt;- d=
 one xfer 0xffff00003a981190, sync (err 0)<br>000001.484230 usbd_free_xfer#3=
 @2: called: 0xffff00003a981190<br>000001.484231 usb_freemem#2@2: called!<br=
 >000001.484233 usb_rem_task_wait#5@2: called!<br>000001.484240 usbd_new_dev=
 ice#1@2: new dev (addr 1), dev=3D0xffff00003a984f00, parent=3D0xffff00003a9=
 4c400<br>000001.484244 usbd_get_string0#1@2: called!<br>000001.484245 usbd_=
 get_string_desc#1@2: called!<br>000001.484246 usbd_do_request_len#4@2: call=
 ed: dev=3D0xffff00003a984f00 req=3Dffffc000b0fa3ad8 flags=3D4 len=3Dfe<br>0=
 00001.484248 usbd_alloc_xfer#4@2: called: returns 0xffff00003a981190<br>000=
 001.484249 usb_allocmem#4@2: called!<br>000001.484250 usb_allocmem#4@2: lar=
 ge alloc 254<br>000001.484250 usb_block_allocmem#2@2: called: size=3D8192 a=
 lign=3D0 flags=3D0<br>000001.484273 usbd_transfer#4@2: called: xfer =3D 0xf=
 fff00003a981190, flags =3D 0x6, pipe =3D 0xffff00003a918000, running =3D 0<=
 br>000001.484274 roothub_ctrl_start#4@2: called: type=3D0x80 request=3D0x6 =
 len=3D0x2 value=3D0x300<br>000001.484275 roothub_ctrl_start#4@2: wValue=3D0=
 x300<br>000001.484276 roothub_ctrl_start#4@2: xfer 0xffff00003a981190 bufle=
 n 2 actlen 2 err 0<br>000001.484277 usb_transfer_complete#4@2: called: pipe=
  =3D 0xffff00003a918000 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D=
  2<br>000001.484277 usb_transfer_complete#4@2: xfer 0xffff00003a981190: rep=
 eat 0 new head =3D 0<br>000001.484278 usb_transfer_complete#4@2: xfer 0xfff=
 f00003a981190 doing done 0xffffc00000240980<br>000001.484278 usb_transfer_c=
 omplete#4@2: xfer 0xffff00003a981190 doing callback 0 status 0<br>000001.48=
 4279 usb_transfer_complete#4@2: &lt;- done xfer 0xffff00003a981190, wakeup<=
 br>000001.484279 usbd_start_next#4@2: called: pipe =3D 0xffff00003a918000, =
 xfer =3D 0<br>000001.484280 usbd_transfer#4@2: &lt;- done xfer 0xffff00003a=
 981190, sync (err 0)<br>000001.484281 usbd_free_xfer#4@2: called: 0xffff000=
 03a981190<br>000001.484281 usb_freemem#3@2: called!<br>000001.484282 usb_fr=
 eemem#3@2: large free<br>000001.484283 usb_block_freemem#1@2: called: size=
 =3D8192<br>000001.484284 usb_rem_task_wait#6@2: called!<br>000001.484287 us=
 bd_do_request_len#5@2: called: dev=3D0xffff00003a984f00 req=3Dffffc000b0fa3=
 ad8 flags=3D4 len=3Dfe<br>000001.484290 usbd_alloc_xfer#5@2: called: return=
 s 0xffff00003a981190<br>000001.484290 usb_allocmem#5@2: called!<br>000001.4=
 84291 usb_allocmem#5@2: large alloc 254<br>000001.484292 usb_block_allocmem=
 #3@2: called: size=3D8192 align=3D0 flags=3D0<br>000001.484293 usbd_transfe=
 r#5@2: called: xfer =3D 0xffff00003a981190, flags =3D 0x6, pipe =3D 0xffff0=
 0003a918000, running =3D 0<br>000001.484293 roothub_ctrl_start#5@2: called:=
  type=3D0x80 request=3D0x6 len=3D0x4 value=3D0x300<br>000001.484294 roothub=
 _ctrl_start#5@2: wValue=3D0x300<br>000001.484295 roothub_ctrl_start#5@2: xf=
 er 0xffff00003a981190 buflen 4 actlen 4 err 0<br>000001.484295 usb_transfer=
 _complete#5@2: called: pipe =3D 0xffff00003a918000 xfer =3D 0xffff00003a981=
 190 status =3D 0 actlen =3D 4<br>000001.484296 usb_transfer_complete#5@2: x=
 fer 0xffff00003a981190: repeat 0 new head =3D 0<br>000001.484297 usb_transf=
 er_complete#5@2: xfer 0xffff00003a981190 doing done 0xffffc00000240980<br>0=
 00001.484297 usb_transfer_complete#5@2: xfer 0xffff00003a981190 doing callb=
 ack 0 status 0<br>000001.484298 usb_transfer_complete#5@2: &lt;- done xfer =
 0xffff00003a981190, wakeup<br>000001.484298 usbd_start_next#5@2: called: pi=
 pe =3D 0xffff00003a918000, xfer =3D 0<br>000001.484299 usbd_transfer#5@2: &=
 lt;- done xfer 0xffff00003a981190, sync (err 0)<br>000001.484300 usbd_free_=
 xfer#5@2: called: 0xffff00003a981190<br>000001.484300 usb_freemem#4@2: call=
 ed!<br>000001.484301 usb_freemem#4@2: large free<br>000001.484302 usb_block=
 _freemem#2@2: called: size=3D8192<br>000001.484303 usb_rem_task_wait#7@2: c=
 alled!<br>000001.484305 usbd_get_string_desc#2@2: called!<br>000001.484306 =
 usbd_do_request_len#6@2: called: dev=3D0xffff00003a984f00 req=3Dffffc000b0f=
 a3ad8 flags=3D4 len=3Dfe<br>000001.484309 usbd_alloc_xfer#6@2: called: retu=
 rns 0xffff00003a981190<br>000001.484309 usb_allocmem#6@2: called!<br>000001=
 .484310 usb_allocmem#6@2: large alloc 254<br>000001.484310 usb_block_allocm=
 em#4@2: called: size=3D8192 align=3D0 flags=3D0<br>000001.484311 usbd_trans=
 fer#6@2: called: xfer =3D 0xffff00003a981190, flags =3D 0x6, pipe =3D 0xfff=
 f00003a918000, running =3D 0<br>000001.484312 roothub_ctrl_start#6@2: calle=
 d: type=3D0x80 request=3D0x6 len=3D0x2 value=3D0x301<br>000001.484313 rooth=
 ub_ctrl_start#6@2: wValue=3D0x301<br>000001.484314 roothub_ctrl_start#6@2: =
 xfer 0xffff00003a981190 buflen 2 actlen 2 err 0<br>000001.484314 usb_transf=
 er_complete#6@2: called: pipe =3D 0xffff00003a918000 xfer =3D 0xffff00003a9=
 81190 status =3D 0 actlen =3D 2<br>000001.484315 usb_transfer_complete#6@2:=
  xfer 0xffff00003a981190: repeat 0 new head =3D 0<br>000001.484315 usb_tran=
 sfer_complete#6@2: xfer 0xffff00003a981190 doing done 0xffffc00000240980<br=
 >000001.484316 usb_transfer_complete#6@2: xfer 0xffff00003a981190 doing cal=
 lback 0 status 0<br>000001.484317 usb_transfer_complete#6@2: &lt;- done xfe=
 r 0xffff00003a981190, wakeup<br>000001.484317 usbd_start_next#6@2: called: =
 pipe =3D 0xffff00003a918000, xfer =3D 0<br>000001.484318 usbd_transfer#6@2:=
  &lt;- done xfer 0xffff00003a981190, sync (err 0)<br>000001.484318 usbd_fre=
 e_xfer#6@2: called: 0xffff00003a981190<br>000001.484319 usb_freemem#5@2: ca=
 lled!<br>000001.484320 usb_freemem#5@2: large free<br>000001.484320 usb_blo=
 ck_freemem#3@2: called: size=3D8192<br>000001.484321 usb_rem_task_wait#8@2:=
  called!<br>000001.484324 usbd_do_request_len#7@2: called: dev=3D0xffff0000=
 3a984f00 req=3Dffffc000b0fa3ad8 flags=3D4 len=3Dfe<br>000001.484326 usbd_al=
 loc_xfer#7@2: called: returns 0xffff00003a981190<br>000001.484327 usb_alloc=
 mem#7@2: called!<br>000001.484327 usb_allocmem#7@2: large alloc 254<br>0000=
 01.484328 usb_block_allocmem#5@2: called: size=3D8192 align=3D0 flags=3D0<b=
 r>000001.484329 usbd_transfer#7@2: called: xfer =3D 0xffff00003a981190, fla=
 gs =3D 0x6, pipe =3D 0xffff00003a918000, running =3D 0<br>000001.484329 roo=
 thub_ctrl_start#7@2: called: type=3D0x80 request=3D0x6 len=3D0xe value=3D0x=
 301<br>000001.484330 roothub_ctrl_start#7@2: wValue=3D0x301<br>000001.48433=
 1 roothub_ctrl_start#7@2: xfer 0xffff00003a981190 buflen 14 actlen 14 err 0=
 <br>000001.484331 usb_transfer_complete#7@2: called: pipe =3D 0xffff00003a9=
 18000 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 14<br>000001.4843=
 32 usb_transfer_complete#7@2: xfer 0xffff00003a981190: repeat 0 new head =
 =3D 0<br>000001.484332 usb_transfer_complete#7@2: xfer 0xffff00003a981190 d=
 oing done 0xffffc00000240980<br>000001.484333 usb_transfer_complete#7@2: xf=
 er 0xffff00003a981190 doing callback 0 status 0<br>000001.484334 usb_transf=
 er_complete#7@2: &lt;- done xfer 0xffff00003a981190, wakeup<br>000001.48433=
 4 usbd_start_next#7@2: called: pipe =3D 0xffff00003a918000, xfer =3D 0<br>0=
 00001.484335 usbd_transfer#7@2: &lt;- done xfer 0xffff00003a981190, sync (e=
 rr 0)<br>000001.484335 usbd_free_xfer#7@2: called: 0xffff00003a981190<br>00=
 0001.484336 usb_freemem#6@2: called!<br>000001.484337 usb_freemem#6@2: larg=
 e free<br>000001.484337 usb_block_freemem#4@2: called: size=3D8192<br>00000=
 1.484338 usb_rem_task_wait#9@2: called!<br>000001.484343 usbd_get_string0#2=
 @2: called!<br>000001.484344 usbd_get_string_desc#3@2: called!<br>000001.48=
 4344 usbd_do_request_len#8@2: called: dev=3D0xffff00003a984f00 req=3Dffffc0=
 00b0fa3ad8 flags=3D4 len=3Dfe<br>000001.484347 usbd_alloc_xfer#8@2: called:=
  returns 0xffff00003a981190<br>000001.484348 usb_allocmem#8@2: called!<br>0=
 00001.484348 usb_allocmem#8@2: large alloc 254<br>000001.484349 usb_block_a=
 llocmem#6@2: called: size=3D8192 align=3D0 flags=3D0<br>000001.484350 usbd_=
 transfer#8@2: called: xfer =3D 0xffff00003a981190, flags =3D 0x6, pipe =3D =
 0xffff00003a918000, running =3D 0<br>000001.484350 roothub_ctrl_start#8@2: =
 called: type=3D0x80 request=3D0x6 len=3D0x2 value=3D0x302<br>000001.484351 =
 roothub_ctrl_start#8@2: wValue=3D0x302<br>000001.484352 roothub_ctrl_start#=
 8@2: xfer 0xffff00003a981190 buflen 2 actlen 2 err 0<br>000001.484353 usb_t=
 ransfer_complete#8@2: called: pipe =3D 0xffff00003a918000 xfer =3D 0xffff00=
 003a981190 status =3D 0 actlen =3D 2<br>000001.484353 usb_transfer_complete=
 #8@2: xfer 0xffff00003a981190: repeat 0 new head =3D 0<br>000001.484354 usb=
 _transfer_complete#8@2: xfer 0xffff00003a981190 doing done 0xffffc000002409=
 80<br>000001.484355 usb_transfer_complete#8@2: xfer 0xffff00003a981190 doin=
 g callback 0 status 0<br>000001.484355 usb_transfer_complete#8@2: &lt;- don=
 e xfer 0xffff00003a981190, wakeup<br>000001.484356 usbd_start_next#8@2: cal=
 led: pipe =3D 0xffff00003a918000, xfer =3D 0<br>000001.484356 usbd_transfer=
 #8@2: &lt;- done xfer 0xffff00003a981190, sync (err 0)<br>000001.484357 usb=
 d_free_xfer#8@2: called: 0xffff00003a981190<br>000001.484358 usb_freemem#7@=
 2: called!<br>000001.484358 usb_freemem#7@2: large free<br>000001.484359 us=
 b_block_freemem#5@2: called: size=3D8192<br>000001.484360 usb_rem_task_wait=
 #10@2: called!<br>000001.484363 usbd_do_request_len#9@2: called: dev=3D0xff=
 ff00003a984f00 req=3Dffffc000b0fa3ad8 flags=3D4 len=3Dfe<br>000001.484365 u=
 sbd_alloc_xfer#9@2: called: returns 0xffff00003a981190<br>000001.484365 usb=
 _allocmem#9@2: called!<br>000001.484366 usb_allocmem#9@2: large alloc 254<b=
 r>000001.484367 usb_block_allocmem#7@2: called: size=3D8192 align=3D0 flags=
 =3D0<br>000001.484367 usbd_transfer#9@2: called: xfer =3D 0xffff00003a98119=
 0, flags =3D 0x6, pipe =3D 0xffff00003a918000, running =3D 0<br>000001.4843=
 68 roothub_ctrl_start#9@2: called: type=3D0x80 request=3D0x6 len=3D0x1c val=
 ue=3D0x302<br>000001.484368 roothub_ctrl_start#9@2: wValue=3D0x302<br>00000=
 1.484370 roothub_ctrl_start#9@2: xfer 0xffff00003a981190 buflen 18 actlen 2=
 8 err 0<br>000001.484370 usb_transfer_complete#9@2: called: pipe =3D 0xffff=
 00003a918000 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 28<br>0000=
 01.484371 usb_transfer_complete#9@2: xfer 0xffff00003a981190: repeat 0 new =
 head =3D 0<br>000001.484372 usb_transfer_complete#9@2: xfer 0xffff00003a981=
 190 doing done 0xffffc00000240980<br>000001.484372 usb_transfer_complete#9@=
 2: xfer 0xffff00003a981190 doing callback 0 status 0<br>000001.484373 usb_t=
 ransfer_complete#9@2: &lt;- done xfer 0xffff00003a981190, wakeup<br>000001.=
 484373 usbd_start_next#9@2: called: pipe =3D 0xffff00003a918000, xfer =3D 0=
 <br>000001.484374 usbd_transfer#9@2: &lt;- done xfer 0xffff00003a981190, sy=
 nc (err 0)<br>000001.484375 usbd_free_xfer#9@2: called: 0xffff00003a981190<=
 br>000001.484375 usb_freemem#8@2: called!<br>000001.484376 usb_freemem#8@2:=
  large free<br>000001.484376 usb_block_freemem#6@2: called: size=3D8192<br>=
 000001.484378 usb_rem_task_wait#11@2: called!<br>000001.484385 usbd_get_str=
 ing0#3@2: called!<br>000001.484409 usb_add_event#2@2: called!<br>000001.492=
 995 usbd_set_config_index#1@2: called: dev=3D0xffff00003a984f00 index=3D0<b=
 r>000001.492997 usbd_get_config_desc#1@2: called: confidx=3D0<br>000001.492=
 998 usbd_get_desc#2@2: called: type=3D2, index=3D0, len=3D9<br>000001.49299=
 8 usbd_do_request_len#10@2: called: dev=3D0xffff00003a984f00 req=3Dffffc000=
 b0fa3978 flags=3D0 len=3D9<br>000001.493003 usbd_alloc_xfer#10@2: called: r=
 eturns 0xffff00003a981190<br>000001.493003 usb_allocmem#10@2: called!<br>00=
 0001.493006 usbd_transfer#10@2: called: xfer =3D 0xffff00003a981190, flags =
 =3D 0x2, pipe =3D 0xffff00003a918000, running =3D 0<br>000001.493007 roothu=
 b_ctrl_start#10@2: called: type=3D0x80 request=3D0x6 len=3D0x9 value=3D0x20=
 0<br>000001.493007 roothub_ctrl_start#10@2: wValue=3D0x200<br>000001.493008=
  roothub_ctrl_start#10@2: xfer 0xffff00003a981190 buflen 9 actlen 9 err 0<b=
 r>000001.493009 usb_transfer_complete#10@2: called: pipe =3D 0xffff00003a91=
 8000 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 9<br>000001.493009=
  usb_transfer_complete#10@2: xfer 0xffff00003a981190: repeat 0 new head =3D=
  0<br>000001.493010 usb_transfer_complete#10@2: xfer 0xffff00003a981190 doi=
 ng done 0xffffc00000240980<br>000001.493011 usb_transfer_complete#10@2: xfe=
 r 0xffff00003a981190 doing callback 0 status 0<br>000001.493011 usb_transfe=
 r_complete#10@2: &lt;- done xfer 0xffff00003a981190, wakeup<br>000001.49301=
 2 usbd_start_next#10@2: called: pipe =3D 0xffff00003a918000, xfer =3D 0<br>=
 000001.493013 usbd_transfer#10@2: &lt;- done xfer 0xffff00003a981190, sync =
 (err 0)<br>000001.493013 usbd_free_xfer#10@2: called: 0xffff00003a981190<br=
 >000001.493014 usb_freemem#9@2: called!<br>000001.493015 usb_rem_task_wait#=
 12@2: called!<br>000001.493019 usbd_get_desc#3@2: called: type=3D2, index=
 =3D0, len=3D25<br>000001.493019 usbd_do_request_len#11@2: called: dev=3D0xf=
 fff00003a984f00 req=3Dffffc000b0fa39c8 flags=3D0 len=3D19<br>000001.493022 =
 usbd_alloc_xfer#11@2: called: returns 0xffff00003a981190<br>000001.493022 u=
 sb_allocmem#11@2: called!<br>000001.493024 usbd_transfer#11@2: called: xfer=
  =3D 0xffff00003a981190, flags =3D 0x2, pipe =3D 0xffff00003a918000, runnin=
 g =3D 0<br>000001.493025 roothub_ctrl_start#11@2: called: type=3D0x80 reque=
 st=3D0x6 len=3D0x19 value=3D0x200<br>000001.493026 roothub_ctrl_start#11@2:=
  wValue=3D0x200<br>000001.493026 roothub_ctrl_start#11@2: xfer 0xffff00003a=
 981190 buflen 25 actlen 25 err 0<br>000001.493027 usb_transfer_complete#11@=
 2: called: pipe =3D 0xffff00003a918000 xfer =3D 0xffff00003a981190 status =
 =3D 0 actlen =3D 25<br>000001.493028 usb_transfer_complete#11@2: xfer 0xfff=
 f00003a981190: repeat 0 new head =3D 0<br>000001.493028 usb_transfer_comple=
 te#11@2: xfer 0xffff00003a981190 doing done 0xffffc00000240980<br>000001.49=
 3029 usb_transfer_complete#11@2: xfer 0xffff00003a981190 doing callback 0 s=
 tatus 0<br>000001.493030 usb_transfer_complete#11@2: &lt;- done xfer 0xffff=
 00003a981190, wakeup<br>000001.493030 usbd_start_next#11@2: called: pipe =
 =3D 0xffff00003a918000, xfer =3D 0<br>000001.493031 usbd_transfer#11@2: &lt=
 ;- done xfer 0xffff00003a981190, sync (err 0)<br>000001.493033 usbd_free_xf=
 er#11@2: called: 0xffff00003a981190<br>000001.493034 usb_freemem#10@2: call=
 ed!<br>000001.493037 usb_rem_task_wait#13@2: called!<br>000001.493041 usbd_=
 set_config_index#1@2: addr 1 cno=3D1 attr=3D0xc0, selfpowered=3D1<br>000001=
 .493041 usbd_set_config_index#1@2: max power=3D0<br>000001.493042 usbd_set_=
 config_index#1@2: set config 1<br>000001.493043 usbd_set_config#1@2: called=
 : dev 0xffff00003a984f00 conf 1<br>000001.493044 usbd_do_request_len#12@2: =
 called: dev=3D0xffff00003a984f00 req=3Dffffc000b0fa39c8 flags=3D0 len=3D0<b=
 r>000001.493046 usbd_alloc_xfer#12@2: called: returns 0xffff00003a981190<br=
 >000001.493047 usbd_transfer#12@2: called: xfer =3D 0xffff00003a981190, fla=
 gs =3D 0x2, pipe =3D 0xffff00003a918000, running =3D 0<br>000001.493048 roo=
 thub_ctrl_start#12@2: called: type=3D0 request=3D0x9 len=3D0 value=3D0x1<br=
 >000001.493048 roothub_ctrl_start#12@2: xfer 0xffff00003a981190 buflen 0 ac=
 tlen 0 err 0<br>000001.493049 usb_transfer_complete#12@2: called: pipe =3D =
 0xffff00003a918000 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 0<br=
 >000001.493049 usb_transfer_complete#12@2: xfer 0xffff00003a981190: repeat =
 0 new head =3D 0<br>000001.493050 usb_transfer_complete#12@2: xfer 0xffff00=
 003a981190 doing done 0xffffc00000240980<br>000001.493050 usb_transfer_comp=
 lete#12@2: xfer 0xffff00003a981190 doing callback 0 status 0<br>000001.4930=
 51 usb_transfer_complete#12@2: &lt;- done xfer 0xffff00003a981190, wakeup<b=
 r>000001.493052 usbd_start_next#12@2: called: pipe =3D 0xffff00003a918000, =
 xfer =3D 0<br>000001.493052 usbd_transfer#12@2: &lt;- done xfer 0xffff00003=
 a981190, sync (err 0)<br>000001.493053 usbd_free_xfer#12@2: called: 0xffff0=
 0003a981190<br>000001.493054 usb_rem_task_wait#14@2: called!<br>000001.4930=
 59 usbd_fill_iface_data#1@2: called: ifaceidx=3D0 altidx=3D0<br>000001.4930=
 60 usbd_find_idesc#1@2: called: iface/alt idx 0/0<br>000001.493064 usbd_do_=
 request_len#13@2: called: dev=3D0xffff00003a984f00 req=3Dffffc000b0fa3ad0 f=
 lags=3D0 len=3D9<br>000001.493066 usbd_alloc_xfer#13@2: called: returns 0xf=
 fff00003a981190<br>000001.493067 usb_allocmem#12@2: called!<br>000001.49306=
 9 usbd_transfer#13@2: called: xfer =3D 0xffff00003a981190, flags =3D 0x2, p=
 ipe =3D 0xffff00003a918000, running =3D 0<br>000001.493070 roothub_ctrl_sta=
 rt#13@2: called: type=3D0xa0 request=3D0x6 len=3D0x9 value=3D0x2900<br>0000=
 01.493071 roothub_ctrl_start#13@2: xfer 0xffff00003a981190 buflen 9 actlen =
 9 err 0<br>000001.493072 usb_transfer_complete#13@2: called: pipe =3D 0xfff=
 f00003a918000 xfer =3D 0xffff00003a981190 status =3D 0 actlen =3D 9<br>0000=
 01.493072 usb_transfer_complete#13@2: xfer 0xffff00003a981190: repeat 0 new=
  head =3D 0<br>000001.493073 usb_transfer_complete#13@2: xfer 0xffff00003a9=
 81190 doing done 0xffffc00000240980<br>000001.493074 usb_transfer_complete#=
 13@2: xfer 0xffff00003a981190 doing callback 0 status 0<br>000001.493074 us=
 b_transfer_complete#13@2: &lt;- done xfer 0xffff00003a981190, wakeup<br>000=
 001.493075 usbd_start_next#13@2: called: pipe =3D 0xffff00003a918000, xfer =
 =3D 0<br>000001.493075 usbd_transfer#13@2: &lt;- done xfer 0xffff00003a9811=
 90, sync (err 0)<br>000001.493076 usbd_free_xfer#13@2: called: 0xffff00003a=
 981190<br>000001.493077 usb_freemem#11@2: called!<br>000001.493078 usb_rem_=
 task_wait#15@2: called!<br>000001.493122 usbd_open_pipe_intr#1@2: called: a=
 ddress =3D 0x81 flags =3D 0x84 len =3D 1<br>000001.493123 usbd_open_pipe_iv=
 al#1@2: called: iface =3D 0xffff00003aaed8c0 address =3D 0x81 flags =3D 0x8=
 1<br>000001.493125 usbd_setup_pipe_flags#4@2: called: dev=3D0xffff00003a984=
 f00 addr=3D1 iface=3D0xffff00003aaed8c0 ep=3D0xffff00003afde3b0<br>000001.4=
 93127 usbd_setup_pipe_flags#4@2: pipe=3D0xffff00003a918700<br>000001.493128=
  usbd_setup_pipe_flags#4@2: pipe=3D0xffff00003a918700<br>000001.493132 usbd=
 _alloc_xfer#14@2: called: returns 0xffff00003a981190<br>000001.493132 usb_a=
 llocmem#13@2: called!<br>000001.493135 usbd_transfer#14@2: called: xfer =3D=
  0xffff00003a981190, flags =3D 0x84, pipe =3D 0xffff00003a918700, running =
 =3D 0<br>000001.493136 usbd_transfer#14@2: &lt;- done xfer 0xffff00003a9811=
 90, not sync (err 1)<br>000001.493144 usb_add_event#3@2: called!<br>000001.=
 493148 usbd_set_port_feature#1@2: called: dev 0xffff00003a984f00 port 8 sel=
 <br>000001.493148 usbd_do_request_len#14@2: called: dev=3D0xffff00003a984f0=
 0 req=3Dffffc000b0fa3a68 flags=3D0 len=3D0<br>000001.493153 usbd_alloc_xfer=
 #15@2: called: returns 0xffff00003a9812e0<br>000001.493154 usbd_transfer#15=
 @2: called: xfer =3D 0xffff00003a9812e0, flags =3D 0x2, pipe =3D 0xffff0000=
 3a918000, running =3D 0<br>000001.493155 roothub_ctrl_start#14@2: called: t=
 ype=3D0x23 request=3D0x3 len=3D0 value=3D0x8<br>000001.493155 roothub_ctrl_=
 start#14@2: xfer 0xffff00003a9812e0 buflen -1 actlen 0 err 0<br>000001.4931=
 56 usb_transfer_complete#14@2: called: pipe =3D 0xffff00003a918000 xfer =3D=
  0xffff00003a9812e0 status =3D 0 actlen =3D 0<br>000001.493157 usb_transfer=
 _complete#14@2: xfer 0xffff00003a9812e0: repeat 0 new head =3D 0<br>000001.=
 493157 usb_transfer_complete#14@2: xfer 0xffff00003a9812e0 doing done 0xfff=
 fc00000240980<br>000001.493158 usb_transfer_complete#14@2: xfer 0xffff00003=
 a982e0 doing callback 0 status 0<br>000001.493159 usb_transfer_complete#14@=
 2: &lt;- done xfer 0xffff00003a9812e0, wakeup<br>000001.493161 usbd_start_n=
 ext#14@2: called: pipe =3D 0xffff00003a918000, xfer =3D 0<br>000001.493162 =
 usbd_transfer#15@2: &lt;- done xfer 0xffff00003a9812e0, sync (err 0)<br>000=
 001.493163 usbd_free_xfer#14@2: called: 0xffff00003a9812e0<br>000001.493165=
  usb_rem_task_wait#16@2: called!<br>000001.493195 usb_event_thread#1@0: cal=
 led!<br>000001.493197 usb_discover#1@0: called!<br>000001.493199 usbd_get_h=
 ub_status#1@0: called: dev 0xffff00003a984f00<br>000001.493200 usbd_do_requ=
 est_len#15@0: called: dev=3D0xffff00003a984f00 req=3Dffffc000b0fbbd78 flags=
 =3D0 len=3D4<br>000001.493207 usbd_alloc_xfer#16@0: called: returns 0xffff0=
 0003a981430<br>000001.493207 usb_allocmem#14@0: called!<br>000001.493210 us=
 bd_transfer#16@0: called: xfer =3D 0xffff00003a981430, flags =3D 0x2, pipe =
 =3D 0xffff00003a918000, running =3D 0<br>000001.493211 roothub_ctrl_start#1=
 5@0: called: type=3D0xa0 request=3D0 len=3D0x4 value=3D0<br>000001.493212 r=
 oothub_ctrl_start#15@0: xfer 0xffff00003a981430 buflen -1 actlen 4 err 0<br=
 >000001.493213 usb_transfer_complete#15@0: called: pipe =3D 0xffff00003a918=
 000 xfer =3D 0xffff00003a981430 status =3D 0 actlen =3D 4<br>000001.493213 =
 usb_transfer_complete#15@0: xfer 0xffff00003a981430: repeat 0 new head =3D =
 0<br>000001.493214 usb_transfer_complete#15@0: xfer 0xffff00003a981430 doin=
 g done 0xffffc00000240980<br>000001.493215 usb_transfer_complete#15@0: xfer=
  0xffff00003a981430 dong callback 0 status 0<br>000001.493215 usb_transfer_=
 complete#15@0: &lt;- done xfer 0xffff00003a981430, wakeup<br>000001.493216 =
 usbd_start_next#15@0: called: pipe =3D 0xffff00003a918000, xfer =3D 0<br>00=
 0001.493217 usbd_transfer#16@0: &lt;- done xfer 0xffff00003a981430, sync (e=
 rr 0)<br>000001.493218 usbd_free_xfer#15@0: called: 0xffff00003a981430<br>0=
 00001.493218 usb_freemem#12@0: called!<br>000001.493220 usb_rem_task_wait#1=
 7@0: called!<br>000001.493229 usbd_get_port_status#1@0: called: dev 0xffff0=
 0003a984f00 port 1<br>000001.493230 usbd_do_request_len#16@0: called: dev=
 =3D0xffff00003a984f00 req=3Dffffc000b0fbbd78 flags=3D0 len=3D4<br>000001.49=
 3233 usbd_alloc_xfer#17@0: called: returns 0xffff00003a981430<br>000001.493=
 233 usb_allocmem#15@0: called!<br>000001.493235 usbd_transfer#17@0: called:=
  xfer =3D 0xffff00003a981430, flags =3D 0x2, pipe =3D 0xffff00003a918000, r=
 unning =3D 0<br>000001.493236 roothub_ctrl_start#16@0: called: type=3D0xa3 =
 request=3D0 len=3D0x4 value=3D0<br>000001.493237 roothub_ctrl_start#16@0: x=
 fer 0xffff00003a981430 buflen -1 actlen 4 err 0<br>00000.493237 usb_transfe=
 r_complete#16@0: called: pipe =3D 0xffff00003a918000 xfer =3D 0xffff00003a9=
 81430 status =3D 0 actlen =3D 4<br>000001.493238 usb_transfer_complete#16@0=
 : xfer 0xffff00003a981430: repeat 0 new head =3D 0<br>000001.493239 usb_tra=
 nsfer_complete#16@0: xfer 0xffff00003a981430 doing done 0xffffc00000240980<=
 br>000001.493240 usb_transfer_complete#16@0: xfer 0xffff00003a981430 doing =
 callback 0 stats 0<br>000001.493241 usb_transfer_complete#16@0: &lt;- done =
 xfer 0xffff00003a981430, wakeup<br>000001.493241 usbd_start_next#16@0: call=
 ed: pipe =3D 0xffff00003a918000, xfer =3D 0<br>000001.493242 usbd_transfer#=
 17@0: &lt;- done xfer 0xffff00003a981430, sync (err 0)<br>000001.493242 usb=
 d_free_xfer#16@0: called: 0xffff00003a981430<br>000001.493243 usb_freemem#1=
 3@0: called!<br>000001.493245 usb_rem_task_wait#18@0: called!<br>000001.493=
 249 usb_discover#2@0: called!<br>000061.493583 usb_discover#3@0: called!<br=
 >000121.497526 usb_discover#4@0: called!<br>000181.501472 usb_discover#5@0:=
  called!<br>000241.505422 usb_discover#6@0: called!<br>000301.509371 usb_di=
 scover#7@0: called!<br>000361.513318 usb_discover#8@0: called!<br>000421.51=
 7263 usb_discover#9@0: called!<br>000481.521199 usb_discover#10@0: called!<=
 br>000541.525142 usb_discover#11@0: called!<br>000601.529086 usb_discover#1=
 2@0: called!<br>000661.533028 usb_discover#13@0: called!<br>000721.536973 u=
 sb_discover#14@0: called!<br>000781.540918 usb_discover#15@0: called!<br>00=
 0841.544863 usb_discover#16@0: called!<br>000901.548806 usb_discover#17@0: =
 called!<br>000961.552748 usb_discover#18@0: called!<br>db{2}&gt;<br><br>On =
 Tue, Aug 4, 2026 at 11:35=E2=80=AFAM Nick Hudson via gnats &lt;<a href=3D"m=
 ailto:gnats-admin@netbsd.org">gnats-admin@netbsd.org</a>&gt; wrote:<br>&gt;=
 <br>&gt; The following reply was made to PR port-arm/60021; it has been not=
 ed by GNATS.<br>&gt;<br>&gt; From: Nick Hudson &lt;<a href=3D"mailto:nick.h=
 udson@gmx.co.uk">nick.hudson@gmx.co.uk</a>&gt;<br>&gt; To: Taylor R Campbel=
 l &lt;riastradh@NetBSD.org&gt;<br>&gt; Cc: <a href=3D"mailto:mac@culver.net=
 ">mac@culver.net</a>,<br>&gt; =C2=A0&quot;<a href=3D"mailto:gnats-bugs@netb=
 sd.org">gnats-bugs@netbsd.org</a>&quot; &lt;gnats-bugs@NetBSD.org&gt;,<br>&=
 gt; =C2=A0&quot;<a href=3D"mailto:netbsd-bugs@netbsd.org">netbsd-bugs@netbs=
 d.org</a>&quot; &lt;netbsd-bugs@NetBSD.org&gt;<br>&gt; Subject: Re: port-ar=
 m/60021: USB-only boot: uhub0 attaches but uhub1 never<br>&gt; =C2=A0appear=
 s, no hotplug events; SD-boot sees hub+umass fine<br>&gt; Date: Tue, 4 Aug =
 2026 19:32:12 +0100<br>&gt;<br>&gt; =C2=A0&gt; On 4 Aug 2026, at 14:34, Tay=
 lor R Campbell &lt;riastradh@NetBSD.org&gt; =3D<br>&gt; =C2=A0wrote:<br>&gt=
 ; =C2=A0&gt;=3D20<br>&gt; =C2=A0&gt;&gt; Date: Sat, 21 Feb 2026 10:39:41 +0=
 000<br>&gt; =C2=A0&gt;&gt; From: Nick Hudson &lt;<a href=3D"mailto:nick.hud=
 son@gmx.co.uk">nick.hudson@gmx.co.uk</a>&gt;<br>&gt; =C2=A0&gt;&gt;=3D20<br=
 >&gt; =C2=A0&gt;&gt; This is almost certainly that autoconf doesn&#39;t wai=
 t (long enough) for<br>&gt; =C2=A0&gt;&gt; sub-ordintate hubs<br>&gt; =C2=
 =A0&gt;&gt;=3D20<br>&gt; =C2=A0&gt;&gt; <a href=3D"https://nxr.netbsd.org/x=
 ref/src/sys/dev/usb/uhub.c#880">https://nxr.netbsd.org/xref/src/sys/dev/usb=
 /uhub.c#880</a><br>&gt; =C2=A0&gt;&gt;=3D20<br>&gt; =C2=A0&gt;&gt; =C2=A0 =
 =C2=A0 880 mutex_enter(&amp;sc-&gt;sc_lock);<br>&gt; =C2=A0&gt;&gt; =C2=A0 =
 =C2=A0 881 sc-&gt;sc_explorepending =3D3D false;<br>&gt; =C2=A0&gt;&gt; =C2=
 =A0 =C2=A0 882 for (int i =3D3D 0; i &lt; sc-&gt;sc_statuslen; i++) {<br>&g=
 t; =C2=A0&gt;&gt; =C2=A0 =C2=A0 883 if (sc-&gt;sc_statuspend[i] !=3D3D 0) {=
 <br>&gt; =C2=A0&gt;&gt; =C2=A0 =C2=A0 884 memcpy(sc-&gt;sc_status, sc-&gt;s=
 c_statuspend,<br>&gt; =C2=A0&gt;&gt; =C2=A0 =C2=A0 885 =C2=A0 =C2=A0sc-&gt;=
 sc_statuslen);<br>&gt; =C2=A0&gt;&gt; =C2=A0 =C2=A0 886 memset(sc-&gt;sc_st=
 atuspend, 0, sc-&gt;sc_statuslen);<br>&gt; =C2=A0&gt;&gt; =C2=A0 =C2=A0 887=
  usb_needs_explore(sc-&gt;sc_hub);<br>&gt; =C2=A0&gt;&gt; =C2=A0 =C2=A0 888=
  break;<br>&gt; =C2=A0&gt;&gt; =C2=A0 =C2=A0 889 }<br>&gt; =C2=A0&gt;&gt; =
 =C2=A0 =C2=A0 890 }<br>&gt; =C2=A0&gt;&gt; =C2=A0 =C2=A0 891 mutex_exit(&am=
 p;sc-&gt;sc_lock);<br>&gt; =C2=A0&gt;&gt; =C2=A0 =C2=A0 892 if (sc-&gt;sc_f=
 irst_explore) {<br>&gt; =C2=A0&gt;&gt; =C2=A0 =C2=A0 893 config_pending_dec=
 r(sc-&gt;sc_dev);<br>&gt; =C2=A0&gt;&gt; =C2=A0 =C2=A0 894 sc-&gt;sc_first_=
 explore =3D3D false;<br>&gt; =C2=A0&gt;&gt; =C2=A0 =C2=A0 895 }<br>&gt; =C2=
 =A0&gt;=3D20<br>&gt; =C2=A0&gt; I don&#39;t understand, doesn&#39;t it wait=
  for subordinate hubs?<br>&gt;<br>&gt; =C2=A0Sure, but not long enough...<b=
 r>&gt;<br>&gt; =C2=A0&gt; ... Maybe the<br>&gt; =C2=A0&gt; USB hub just doe=
 sn&#39;t report the device ready at first?<br>&gt;<br>&gt; =C2=A0Because th=
 ere=3DE2=3D80=3D99s no guarantee (afaik) that the root hub will see =3D<br>=
 &gt; =C2=A0the built-in hub immediately.</div>

 --0000000000001c50be0658580742--

From: "Nick Hudson" <skrll@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/60021 CVS commit: src/sys/external/bsd/dwc2
Date: Fri, 14 Aug 2026 07:05:42 +0000

 Module Name:	src
 Committed By:	skrll
 Date:		Fri Aug 14 07:05:42 UTC 2026

 Modified Files:
 	src/sys/external/bsd/dwc2: dwc2.c

 Log Message:
 PR/60021: USB-only boot: uhub0 attaches but uhub1 never appears...

 Update the dwc2 intial reset sequence to more closely match the upstream
 driver - it's changed a bit in the last 10 years.

 This reset sequence gets the device out of the state it's left in by the
 RaspberryPI firmware when booting from USB.


 To generate a diff of this commit:
 cvs rdiff -u -r1.83 -r1.84 src/sys/external/bsd/dwc2/dwc2.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

Responsible-Changed-From-To: port-arm-maintainer->skrll
Responsible-Changed-By: skrll@NetBSD.org
Responsible-Changed-When: Fri, 14 Aug 2026 07:14:36 +0000
Responsible-Changed-Why:
take


State-Changed-From-To: open->feedback
State-Changed-By: skrll@NetBSD.org
State-Changed-When: Fri, 14 Aug 2026 07:14:36 +0000
State-Changed-Why:
fix committed. please test a kernel with
sys/external/bsd/dwc2/dist/dwc2_core.c:1.84


From: "Martin Husemann" <martin@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/60021 CVS commit: [netbsd-11] src/sys/external/bsd/dwc2
Date: Mon, 17 Aug 2026 16:00:38 +0000

 Module Name:	src
 Committed By:	martin
 Date:		Mon Aug 17 16:00:38 UTC 2026

 Modified Files:
 	src/sys/external/bsd/dwc2 [netbsd-11]: dwc2.c

 Log Message:
 Pull up following revision(s) (requested by skrll in ticket #417):

 	sys/external/bsd/dwc2/dwc2.c: revision 1.84

 PR/60021: USB-only boot: uhub0 attaches but uhub1 never appears...

 Update the dwc2 intial reset sequence to more closely match the upstream
 driver - it's changed a bit in the last 10 years.

 This reset sequence gets the device out of the state it's left in by the

 RaspberryPI firmware when booting from USB.


 To generate a diff of this commit:
 cvs rdiff -u -r1.81 -r1.81.4.1 src/sys/external/bsd/dwc2/dwc2.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

From: "Martin Husemann" <martin@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc: 
Subject: PR/60021 CVS commit: [netbsd-11] src/sys/external/bsd/dwc2
Date: Wed, 19 Aug 2026 11:50:50 +0000

 Module Name:	src
 Committed By:	martin
 Date:		Wed Aug 19 11:50:50 UTC 2026

 Modified Files:
 	src/sys/external/bsd/dwc2 [netbsd-11]: dwc2.c
 	src/sys/external/bsd/dwc2/dist [netbsd-11]: dwc2_core.c

 Log Message:
 Pull up following revision(s) (requested by skrll in ticket #417):

 	sys/external/bsd/dwc2/dwc2.c: revision 1.84
 	sys/external/bsd/dwc2/dist/dwc2_core.c: revision 1.15

 PR/60021: USB-only boot: uhub0 attaches but uhub1 never appears...

 Update the dwc2 intial reset sequence to more closely match the upstream
 driver - it's changed a bit in the last 10 years.

 This reset sequence gets the device out of the state it's left in by the
 RaspberryPI firmware when booting from USB.

 dwc2: Bring dwc2_wait_for_mode from upstream and use in dwc2_force_mode.

 dwc2_wait_for_mode will wait upto 110milliseconds for the controller
 to enter the expected mode.

 This hopefully fixes
 port-evbarm/60613: Recent dwc2 commit breaks usb based ethernet device...


 To generate a diff of this commit:
 cvs rdiff -u -r1.81.4.2 -r1.81.4.3 src/sys/external/bsd/dwc2/dwc2.c
 cvs rdiff -u -r1.14 -r1.14.2.1 src/sys/external/bsd/dwc2/dist/dwc2_core.c

 Please note that diffs are not public domain; they are subject to the
 copyright notices on the relevant files.

From: Michael Cheponis <michael.cheponis@gmail.com>
To: gnats-bugs@netbsd.org
Cc: 
Subject: Re: port-arm/60021
Date: Thu, 20 Aug 2026 18:14:03 -0700

 --0000000000005796440659845c88
 Content-Type: text/plain; charset="UTF-8"

 The combined netbsd-11 fix works completely for me.

 Test system:
   Raspberry Pi 3 Model B Plus Rev 1.4
   USB-only boot, no SD card
   Samsung USB flash drive 04e8:6300

 Kernel:
   NetBSD 11.0_STABLE (GENERIC64) #0
   Wed Aug 19 11:51:58 UTC 2026

 Results:
   - uhub1 and uhub2 attach
   - umass0 and sd0 attach
   - sd0a mounts as root
   - normal filesystem writes succeed
   - the system reaches multiuser
   - automatic MBR/disklabel/FFS expansion succeeds
   - the system reboots and comes back normally
   - no BBB reset, timeout, or disk-write errors occur

 After expansion:

   /dev/sd0a  61551416  1601408  56872440  3%  /

 This fixes the USB-only boot problem for my RPi 3B+.
 The PR can be closed from my perspective.

 --0000000000005796440659845c88
 Content-Type: text/html; charset="UTF-8"
 Content-Transfer-Encoding: quoted-printable

 <div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:arial,he=
 lvetica,sans-serif;font-size:small">The combined netbsd-11 fix works comple=
 tely for me.<br><br>Test system:<br>=C2=A0 Raspberry Pi 3 Model B Plus Rev =
 1.4<br>=C2=A0 USB-only boot, no SD card<br>=C2=A0 Samsung USB flash drive 0=
 4e8:6300<br><br>Kernel:<br>=C2=A0 NetBSD 11.0_STABLE (GENERIC64) #0<br>=C2=
 =A0 Wed Aug 19 11:51:58 UTC 2026<br><br>Results:<br>=C2=A0 - uhub1 and uhub=
 2 attach<br>=C2=A0 - umass0 and sd0 attach<br>=C2=A0 - sd0a mounts as root<=
 br>=C2=A0 - normal filesystem writes succeed<br>=C2=A0 - the system reaches=
  multiuser<br>=C2=A0 - automatic MBR/disklabel/FFS expansion succeeds<br>=
 =C2=A0 - the system reboots and comes back normally<br>=C2=A0 - no BBB rese=
 t, timeout, or disk-write errors occur<br><br>After expansion:<br><br>=C2=
 =A0 /dev/sd0a =C2=A061551416 =C2=A01601408 =C2=A056872440 =C2=A03% =C2=A0/<=
 br><br>This fixes the USB-only boot problem for my RPi 3B+.<br>The PR can b=
 e closed from my perspective.</div></div>

 --0000000000005796440659845c88--

State-Changed-From-To: feedback->closed
State-Changed-By: skrll@NetBSD.org
State-Changed-When: Fri, 21 Aug 2026 06:36:49 +0000
State-Changed-Why:
Confirmed fixed.


>Unformatted:
 ne


 NetBSD arm64 11.0_RC1 NetBSD 11.0_RC1 (GENERIC64) #0: Fri Feb  6 08:24:25 UTC 2026  mkrepro@mkrepro.NetBSD.org:/usr\
 /src/sys/arch/evbarm/compile/GENERIC64 evbarm

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.51 2026/08/10 02:28:17 riastradh Exp $
$NetBSD: gnats_config.sh,v 1.10 2026/05/13 22:00:09 riastradh Exp $
Copyright © 1994-2026 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.