The pico-debug [1] is a debug firmware, loaded on a Raspberry Pi RP2040 microcontroller to provide a standard debug interface. The host support tool OpenOCD already upstreamed it [2].
But it does not work with OpenBSD yet, as uhid(4) takes over the RP2040 once plugged, blocking full libusb access [3]. This patch excludes the vendor and product ID chosen by the pico-debug developer from uhid and uhidev. The USB Product ID is not from the USB Implementation Forum: A project reuses some of the defunct InterBiometrics product IDs for open-source hardware [4]. I could recompile and see the device listed as ugen(4): $ dmesg | grep pico-debug ugen1 at uhub4 port 2 "pico-debug CMSIS-DAP" rev 1.10/10.05 addr 2 Does this patch make sense? Thanks! [1]: https://github.com/majbthrd/pico-debug/discussions/23 [2]: https://repo.or.cz/openocd.git/commitdiff/b60d06?hp=64a3e7 [3]: https://marc.info/?l=openbsd-misc&m=160336348703669 [4]: https://pid.codes/faq/ diff --git sys/dev/usb/usb_quirks.c sys/dev/usb/usb_quirks.c index be65ad086..b0e29038a 100644 --- sys/dev/usb/usb_quirks.c +++ sys/dev/usb/usb_quirks.c @@ -134,6 +134,7 @@ const struct usbd_quirk_entry { { USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BX35F, ANY, { UQ_BAD_HID }}, { USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BX50F, ANY, { UQ_BAD_HID }}, { USB_VENDOR_OMRON, USB_PRODUCT_OMRON_BY35S, ANY, { UQ_BAD_HID }}, + { USB_VENDOR_PIDCODES, USB_PRODUCT_PIDCODES_DAPPERMISER, ANY, { UQ_BAD_HID }}, { USB_VENDOR_TENX, USB_PRODUCT_TENX_MISSILE, ANY, { UQ_BAD_HID }}, { USB_VENDOR_TERRATEC, USB_PRODUCT_TERRATEC_AUREON, ANY, { UQ_BAD_HID }}, { USB_VENDOR_TI, USB_PRODUCT_TI_MSP430, ANY, { UQ_BAD_HID }}, diff --git sys/dev/usb/usbdevs sys/dev/usb/usbdevs index 398e93df1..8690a0cad 100644 --- sys/dev/usb/usbdevs +++ sys/dev/usb/usbdevs @@ -510,6 +510,7 @@ vendor SIERRA 0x1199 Sierra Wireless vendor SIEMENS3 0x11f5 Siemens vendor ALCATEL 0x11f7 Alcatel vendor INTERBIO 0x1209 InterBiometrics +vendor PIDCODES 0x1209 pid.codes vendor UNKNOWN3 0x1233 Unknown vendor vendor TSUNAMI 0x1241 Tsunami vendor PHEENET 0x124a Pheenet @@ -1516,6 +1517,9 @@ product DAISY DMC 0x6901 PhotoClip product DALLAS USB_FOB_IBUTTON 0x2490 USB-FOB/iBUTTON product DALLAS J6502 0x4201 J-6502 speakers +/* pid.codes products */ +product PIDCODES DAPPERMISER 0x2488 Peter Lawrence CMSIS-DAP Dapper Miser + /* DataApex products */ product DATAAPEX MULTICOM 0xead6 MultiCom diff --git sys/dev/usb/usbdevs.h sys/dev/usb/usbdevs.h index a6bdfbd85..23d9124b9 100644 --- sys/dev/usb/usbdevs.h +++ sys/dev/usb/usbdevs.h @@ -1,4 +1,4 @@ -/* $OpenBSD: usbdevs.h,v 1.759 2022/06/23 00:32:06 jsg Exp $ */ +/* $OpenBSD$ */ /* * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. @@ -517,6 +517,7 @@ #define USB_VENDOR_SIEMENS3 0x11f5 /* Siemens */ #define USB_VENDOR_ALCATEL 0x11f7 /* Alcatel */ #define USB_VENDOR_INTERBIO 0x1209 /* InterBiometrics */ +#define USB_VENDOR_PIDCODES 0x1209 /* pid.codes */ #define USB_VENDOR_UNKNOWN3 0x1233 /* Unknown vendor */ #define USB_VENDOR_TSUNAMI 0x1241 /* Tsunami */ #define USB_VENDOR_PHEENET 0x124a /* Pheenet */ @@ -1523,6 +1524,9 @@ #define USB_PRODUCT_DALLAS_USB_FOB_IBUTTON 0x2490 /* USB-FOB/iBUTTON */ #define USB_PRODUCT_DALLAS_J6502 0x4201 /* J-6502 speakers */ +/* pid.codes products */ +#define USB_PRODUCT_PIDCODES_DAPPERMISER 0x2488 /* Peter Lawrence CMSIS-DAP Dapper Miser */ + /* DataApex products */ #define USB_PRODUCT_DATAAPEX_MULTICOM 0xead6 /* MultiCom */ diff --git sys/dev/usb/usbdevs_data.h sys/dev/usb/usbdevs_data.h index 38a43697c..b5b546c67 100644 --- sys/dev/usb/usbdevs_data.h +++ sys/dev/usb/usbdevs_data.h @@ -1,4 +1,4 @@ -/* $OpenBSD: usbdevs_data.h,v 1.753 2022/06/23 00:32:06 jsg Exp $ */ +/* $OpenBSD$ */ /* * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. @@ -2437,6 +2437,10 @@ const struct usb_known_product usb_known_products[] = { USB_VENDOR_DALLAS, USB_PRODUCT_DALLAS_J6502, "J-6502 speakers", }, + { + USB_VENDOR_PIDCODES, USB_PRODUCT_PIDCODES_DAPPERMISER, + "Peter Lawrence CMSIS-DAP Dapper Miser", + }, { USB_VENDOR_DATAAPEX, USB_PRODUCT_DATAAPEX_MULTICOM, "MultiCom", @@ -14057,6 +14061,10 @@ const struct usb_known_vendor usb_known_vendors[] = { USB_VENDOR_INTERBIO, "InterBiometrics", }, + { + USB_VENDOR_PIDCODES, + "pid.codes", + }, { USB_VENDOR_UNKNOWN3, "Unknown vendor",