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",

Reply via email to