Skip to content

bm3_usb fails to claim Intel Bluetooth USB interface (0x8087:0x0032) — "Can't obtain vendorID and productID" loop, bluetoothd crash-restart cycle #513

Description

@nestor71

Have you read the docs?

Yes

macOS Version

macOS 26.5.2 (Tahoe, build 25F84)

Kext Version

v2.4.0

Wireless Adapter Model and USB Product ID

Intel AX210/AX211 (0x0032)

Description

Environment

  • macOS: Tahoe 26.5.2 (Build 25F84)
  • Hackintosh, OpenCore bootloader
  • Motherboard: ASUS ROG Strix Z690-F Gaming WiFi
  • CPU: Intel Core i9-12900KF
  • Wi-Fi/Bluetooth card: Intel AX210/AX211 (USB Bluetooth interface VID 0x8087, PID 0x0032)
  • Wi-Fi driver: itlwm + Heliport (working correctly)
  • Kexts installed: Lilu, IntelBluetoothFirmware.kext v2.4.0, IntelBTPatcher.kext, BlueToolFixup.kext
  • SIP: fully disabled (csrutil status shows all protections disabled)

Symptom

Bluetooth device does not initialize. In System Settings > Bluetooth, toggling Bluetooth on causes it to briefly appear active, then it turns itself back off after a short time. This repeats in a loop.

Confirmed via Windows dual-boot that the physical Bluetooth hardware and cable/connection are fully functional (paired a smartphone successfully in Windows).

Confirmed via ioreg -p IOUSB -l that the USB device (0x8087:0x0032) IS visible/enumerated at the IOUSB level in macOS.

A cold boot (full shutdown + power on, not a warm restart) allows Bluetooth to initialize and turn on successfully at first, but it becomes unstable and turns off on its own again after some time.

Relevant log (Console.app, live stream filtered on "bluetooth")

[bm3_usb][IOThreadFunc] -- USB -- calling GetProductAndVendorID()
[bm3_usb][GetProductAndVendorID] -- Found USB Device :
    USB Product Name = (null)
     USB Vendor Name = (null)
            idVendor = 0x8087
           idProduct = 0x0032
         deviceClass = 0xE0 (224)
          locationID = 0x14B00000
...
[bm3_usb][GetProductAndVendorID] -- Use internal Bluetooth USB Host Controller
[bm3_usb][IOThreadFunc] -- USB -- Can't obtain vendorID and productID -- try again

(This "Found USB Device" -> "Can't obtain vendorID and productID" sequence repeats 3 times, roughly once per second, then:)

[bm3_usb][IOThreadFunc] -- Error -- Still cannot find USB Bluetooth Controller after 15 seconds
[bm3_usb][Initialize] -- After calling pthread_cond_wait()
[bm3_usb][Initialize] -- gFoundUSBController is false -- calling break()
[bm3_usb][Initialize] -- gIOThreadInfo.runloop is NULL -- Initialization failed
[bm3_usb][OI_HciIfc_Init_USB] -- Initialization failed
Failed to initialize transport USB
Transport layer initialization failed
kernel: bluetoothd[3784] Corpse allowed 1 of 5
kernel: Full corpse enqueued for bluetoothd
bluetoothd: Bluetooth error - restarting { build=release, reason=114, context="Transport layer initialization failed" }

After this, bluetoothd restarts and re-initializes from scratch (reloading keychain data, registering HID/A2DP/GATT/etc. profiles), and the cycle appears to repeat over time.

Also worth noting: the bluetoothd crash briefly interrupts XPC connections in several unrelated system daemons (coreaudiod, ControlCenter, WindowServer, sharingd, nearbyd, etc.), all logging "### Interrupted" / "XPC connection interrupted, resetting" at the moment of the crash.

Question

Is this a known race condition in claiming the USB interface for this specific Intel Bluetooth device (0x8087:0x0032) on Tahoe? Is there a workaround (boot-arg, kext patch, USB port/timing tweak) to make the "GetProductAndVendorID" / interface claim succeed reliably instead of racing/timing out?

Happy to provide the full Console log, ioreg -p IOUSB -l dump, or config.plist on request.

Info in System Report - Bluetooth

Bluetooth:

      Bluetooth Controller:
          Address: NULL
          State: Off
          Chipset: BCM_4350C2
          Discoverable: Off
          Firmware Version: v0 c0
          Supported services: 0x392039 < HFP AVRCP A2DP HID Braille LEA AACP GATT SerialPort >
          Transport: USB
          Vendor ID: 0x004C (Apple)

Relevant log output

default	22:11:29.974657+0200	bluetoothd	[bm3_usb][IOThreadFunc] -- USB -- calling GetProductAndVendorID()
default	22:11:29.975167+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Found USB Device :
default	22:11:29.975183+0200	bluetoothd	    USB Product Name = Live Gamer Ultra-Video
default	22:11:29.975189+0200	bluetoothd	     USB Vendor Name = (null)
default	22:11:29.975195+0200	bluetoothd	            idVendor = 0x07CA
default	22:11:29.975200+0200	bluetoothd	           idProduct = 0x0553
default	22:11:29.975205+0200	bluetoothd	         deviceClass = 0xEF (239)
default	22:11:29.975212+0200	bluetoothd	          locationID = 0x14D00000
default	22:11:29.976115+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Found USB Device :
default	22:11:29.976129+0200	bluetoothd	    USB Product Name = GENERAL WEBCAM
default	22:11:29.976135+0200	bluetoothd	     USB Vendor Name = (null)
default	22:11:29.976141+0200	bluetoothd	            idVendor = 0x1B3F
default	22:11:29.976146+0200	bluetoothd	           idProduct = 0x2247
default	22:11:29.976160+0200	bluetoothd	         deviceClass = 0xEF (239)
default	22:11:29.976165+0200	bluetoothd	          locationID = 0x14720000
default	22:11:29.976692+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Found USB Device :
default	22:11:29.976701+0200	bluetoothd	    USB Product Name = (null)
default	22:11:29.976708+0200	bluetoothd	     USB Vendor Name = (null)
default	22:11:29.976713+0200	bluetoothd	            idVendor = 0x8087
default	22:11:29.976721+0200	bluetoothd	           idProduct = 0x0032
default	22:11:29.976730+0200	bluetoothd	         deviceClass = 0xE0 (224)
default	22:11:29.976736+0200	bluetoothd	          locationID = 0x14B00000
default	22:11:29.997517+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Found USB Device :
default	22:11:29.997529+0200	bluetoothd	    USB Product Name = (null)
default	22:11:29.997534+0200	bluetoothd	     USB Vendor Name = (null)
default	22:11:29.997539+0200	bluetoothd	            idVendor = 0x0B05
default	22:11:29.997544+0200	bluetoothd	           idProduct = 0x1996
default	22:11:29.997548+0200	bluetoothd	         deviceClass = 0xEF (239)
default	22:11:29.997553+0200	bluetoothd	          locationID = 0x14100000
default	22:11:29.997895+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Use internal Bluetooth USB Host Controller
default	22:11:29.997905+0200	bluetoothd	[bm3_usb][IOThreadFunc] -- USB -- Can't obtain vendorID and productID -- try again
default	22:11:31.000675+0200	bluetoothd	[bm3_usb][IOThreadFunc] -- USB -- calling GetProductAndVendorID()
default	22:11:31.001321+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Found USB Device :
default	22:11:31.001359+0200	bluetoothd	    USB Product Name = Live Gamer Ultra-Video
default	22:11:31.001373+0200	bluetoothd	     USB Vendor Name = (null)
default	22:11:31.001383+0200	bluetoothd	            idVendor = 0x07CA
default	22:11:31.001391+0200	bluetoothd	           idProduct = 0x0553
default	22:11:31.001401+0200	bluetoothd	         deviceClass = 0xEF (239)
default	22:11:31.001410+0200	bluetoothd	          locationID = 0x14D00000
default	22:11:31.002439+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Found USB Device :
default	22:11:31.002458+0200	bluetoothd	    USB Product Name = GENERAL WEBCAM
default	22:11:31.002470+0200	bluetoothd	     USB Vendor Name = (null)
default	22:11:31.002481+0200	bluetoothd	            idVendor = 0x1B3F
default	22:11:31.002492+0200	bluetoothd	           idProduct = 0x2247
default	22:11:31.002505+0200	bluetoothd	         deviceClass = 0xEF (239)
default	22:11:31.002517+0200	bluetoothd	          locationID = 0x14720000
default	22:11:31.003253+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Found USB Device :
default	22:11:31.003267+0200	bluetoothd	    USB Product Name = (null)
default	22:11:31.003273+0200	bluetoothd	     USB Vendor Name = (null)
default	22:11:31.003279+0200	bluetoothd	            idVendor = 0x8087
default	22:11:31.003285+0200	bluetoothd	           idProduct = 0x0032
default	22:11:31.003292+0200	bluetoothd	         deviceClass = 0xE0 (224)
default	22:11:31.003299+0200	bluetoothd	          locationID = 0x14B00000
default	22:11:31.025518+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Found USB Device :
default	22:11:31.025542+0200	bluetoothd	    USB Product Name = (null)
default	22:11:31.025558+0200	bluetoothd	     USB Vendor Name = (null)
default	22:11:31.025573+0200	bluetoothd	            idVendor = 0x0B05
default	22:11:31.025588+0200	bluetoothd	           idProduct = 0x1996
default	22:11:31.025604+0200	bluetoothd	         deviceClass = 0xEF (239)
default	22:11:31.025619+0200	bluetoothd	          locationID = 0x14100000
default	22:11:31.026381+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Use internal Bluetooth USB Host Controller
default	22:11:31.026401+0200	bluetoothd	[bm3_usb][IOThreadFunc] -- USB -- Can't obtain vendorID and productID -- try again
default	22:11:32.030605+0200	bluetoothd	[bm3_usb][IOThreadFunc] -- USB -- calling GetProductAndVendorID()
default	22:11:32.031397+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Found USB Device :
default	22:11:32.031429+0200	bluetoothd	    USB Product Name = Live Gamer Ultra-Video
default	22:11:32.031446+0200	bluetoothd	     USB Vendor Name = (null)
default	22:11:32.031461+0200	bluetoothd	            idVendor = 0x07CA
default	22:11:32.031475+0200	bluetoothd	           idProduct = 0x0553
default	22:11:32.031490+0200	bluetoothd	         deviceClass = 0xEF (239)
default	22:11:32.031503+0200	bluetoothd	          locationID = 0x14D00000
default	22:11:32.032720+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Found USB Device :
default	22:11:32.032736+0200	bluetoothd	    USB Product Name = GENERAL WEBCAM
default	22:11:32.032746+0200	bluetoothd	     USB Vendor Name = (null)
default	22:11:32.032754+0200	bluetoothd	            idVendor = 0x1B3F
default	22:11:32.032764+0200	bluetoothd	           idProduct = 0x2247
default	22:11:32.032773+0200	bluetoothd	         deviceClass = 0xEF (239)
default	22:11:32.032783+0200	bluetoothd	          locationID = 0x14720000
default	22:11:32.033592+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Found USB Device :
default	22:11:32.033607+0200	bluetoothd	    USB Product Name = (null)
default	22:11:32.033617+0200	bluetoothd	     USB Vendor Name = (null)
default	22:11:32.033627+0200	bluetoothd	            idVendor = 0x8087
default	22:11:32.033637+0200	bluetoothd	           idProduct = 0x0032
default	22:11:32.033646+0200	bluetoothd	         deviceClass = 0xE0 (224)
default	22:11:32.033655+0200	bluetoothd	          locationID = 0x14B00000
default	22:11:32.056031+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Found USB Device :
default	22:11:32.056040+0200	bluetoothd	    USB Product Name = (null)
default	22:11:32.056045+0200	bluetoothd	     USB Vendor Name = (null)
default	22:11:32.056050+0200	bluetoothd	            idVendor = 0x0B05
default	22:11:32.056054+0200	bluetoothd	           idProduct = 0x1996
default	22:11:32.056057+0200	bluetoothd	         deviceClass = 0xEF (239)
default	22:11:32.056061+0200	bluetoothd	          locationID = 0x14100000
default	22:11:32.056611+0200	bluetoothd	[bm3_usb][GetProductAndVendorID] -- Use internal Bluetooth USB Host Controller
default	22:11:32.056622+0200	bluetoothd	[bm3_usb][IOThreadFunc] -- USB -- Can't obtain vendorID and productID -- try again
default	22:11:33.059397+0200	bluetoothd	[bm3_usb][IOThreadFunc] -- Error -- Still cannot find USB Bluetooth Controller after 15 seconds
default	22:11:33.059444+0200	bluetoothd	[bm3_usb][Initialize] -- After calling pthread_cond_wait()
default	22:11:33.059487+0200	bluetoothd	[bm3_usb][Initialize] -- gFoundUSBController is false -- calling break()
default	22:11:33.059501+0200	bluetoothd	[bm3_usb][Initialize] -- gIOThreadInfo.runloop is NULL -- Initialization failed
default	22:11:33.059564+0200	bluetoothd	[bm3_usb][OI_HciIfc_Init_USB] -- Initialization failed
default	22:11:33.059581+0200	bluetoothd	Failed to initialize transport USB
default	22:11:33.059587+0200	bluetoothd	Transport layer initialization failed
errore	22:11:33.059597+0200	bluetoothd	Transport layer initialization failed
default	22:11:33.059607+0200	kernel	bluetoothd[3784] Corpse allowed 1 of 5
default	22:11:33.205291+0200	kernel	Full corpse enqueued for bluetoothd
default	22:11:33.205324+0200	bluetoothd	Bluetooth error - restarting { build=release, reason=114, context="Transport layer initialization failed" }
default	22:11:33.205427+0200	bluetoothd	Terminate sniff
default	22:11:33.205457+0200	bluetoothd	Sniff terminated
default	22:11:33.236826+0200	ReportCrash	ASI found [bluetoothd] (sensitive) 'Transport layer initialization failed'
default	22:11:33.248136+0200	bluetoothd	com.apple.server.bluetooth: Bluetooth Super Server Robot Destroyer. Host software version MobileBluetooth-195.7
default	22:11:33.248877+0200	bluetoothd	could not find BT_DEVICE_ADDRESS env variable
default	22:11:33.249002+0200	bluetoothd	main -- calling xpc_transactions_enable() -- SIGTERM
default	22:11:33.249075+0200	bluetoothd	Waiting for IOKitWaitQuiet()
default	22:11:33.249115+0200	bluetoothd	Done waiting for IOKitWaitQuiet()
default	22:11:33.249672+0200	bluetoothd	BT_HCI_TRANSPORT not set - Attempting to read from plist.
default	22:11:33.251245+0200	bluetoothd	HCI Transport is set to USB
default	22:11:33.251271+0200	bluetoothd	Warning: BT driver=0x108994BD0
default	22:11:33.257919+0200	nearbyd	#btsampledistributor CBDiscovery Bluetooth state changed: Resetting
default	22:11:33.274024+0200	bluetoothd	Model: x86_64, Version: Versione 26.5.2 (Build 25F84), Manufacturer: Apple Inc.
default	22:11:33.301040+0200	bluetoothd	Supporting service HID
default	22:11:33.301058+0200	bluetoothd	Registering "HID Host" profile in HidService
default	22:11:33.301124+0200	bluetoothd	Supporting service A2DP
default	22:11:33.301178+0200	bluetoothd	Registering "A2DP Source" profile in A2DPService
default	22:11:33.301251+0200	bluetoothd	Supporting service Remote
default	22:11:33.301278+0200	bluetoothd	Registering "AVRCP Target" profile in RemoteService
default	22:11:33.301419+0200	bluetoothd	Supporting service Braille
default	22:11:33.301479+0200	bluetoothd	Registering "Braille" profile in BrailleService
default	22:11:33.301562+0200	bluetoothd	Supporting service LE Audio
default	22:11:33.301584+0200	bluetoothd	Registering "LE Audio" profile in LEAService
default	22:11:33.302316+0200	bluetoothd	Supporting service GATT
default	22:11:33.302364+0200	bluetoothd	Registering "GATT" profile in GATTService
default	22:11:33.302438+0200	bluetoothd	Supporting service Serial Port
default	22:11:33.302464+0200	bluetoothd	Registering Serial Port Service
default	22:11:33.302561+0200	bluetoothd	Registering "Serial Port" profile in SerialPortService
default	22:11:33.302653+0200	bluetoothd	[MacUserClient][start] -- entering -- HIDShim
default	22:11:33.302755+0200	bluetoothd	[MacUserClient][Setup] -- HIDShim
default	22:11:33.303538+0200	bluetoothd	bluetoothd: calling IOServiceOpen() -- HIDShim
default	22:11:33.303622+0200	bluetoothd	bluetoothd created a UserClient to IOBluetoothHCIController successfully
default	22:11:33.303679+0200	bluetoothd	bluetoothd set up asynchronous notification from Bluetooth kernel (IOBluetoothHCIController) successfully
default	22:11:33.303575+0200	kernel	**** [IOBluetoothFamily][newUserClient] -- created userclient for HIDShim
default	22:11:33.303657+0200	kernel	**** [IOBluetoothFamily][AddHCIEventNotification] -- Added notification port for HIDShim
default	22:11:33.303724+0200	kernel	**** [IOBluetoothFamily][CreateHIDShimSharedMemoryRingBuffer] -- Created input shared memory for HIDShim
default	22:11:33.303774+0200	kernel	**** [IOBluetoothFamily][CreateHIDShimSharedMemoryRingBuffer] -- Created output shared memory for HIDShim
default	22:11:33.304316+0200	bluetoothd	[StackManager][initialize] -- Start IOBluetoothFamily's 30 seconds heart beat notification
default	22:11:33.306924+0200	bluetoothd	Current 'paired devices' cache version is: up-to-date (v2)
default	22:11:33.306936+0200	bluetoothd	Successfully loaded 'paired devices' cache from disk
default	22:11:33.307017+0200	bluetoothd	Paired device cache contains 0 device(s)
default	22:11:33.310117+0200	bluetoothd	We can have up to 475 paired devices, 100 synced LE devices

Kernel Panic Logs

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions