hello, Attached patches should fix the build with USB_DEBUG on earmv6hf.
if_gscan.c: - On 32-bit arch compiler complains about cast from 32-bit pointer to uintmax_t conversion. - %s cannot be used in KERNHIST_LOG format string. KERNHIST_LOG copies address of string but not string itself. It may not work when driver is detached. others: - KERNHIST_LOG may print %d as a corrupted value on 32-bit arch. By default USB_DEBUG is not enabled on GENERIC/earmv6hf, that's why they are not reported in daily build. --- src/sys/dev/usb/if_gscan.c.orig 2025-04-06 22:15:50.660578108 +0000 +++ src/sys/dev/usb/if_gscan.c 2025-04-25 20:23:54.458424079 +0000 @@ -202,7 +202,7 @@ gscan_rx(struct usbd_xfer *xfer, void *p return; } if (status != USBD_NORMAL_COMPLETION) { - DPRINTF("rx error: %s\n", usbd_errstr(status), 0, 0, 0); + DPRINTF("rx error: %jd", status, 0, 0, 0); if (status == USBD_STALLED) usbd_clear_endpoint_stall_async(sc->sc_rx_pipe); if (++sc->sc_rx_nerr > 100) { @@ -301,7 +301,7 @@ gscan_tx(struct usbd_xfer *xfer, void *p mutex_exit(&sc->sc_txlock); return; } - DPRINTF("rx error: %s\n", usbd_errstr(status), 0, 0, 0); + DPRINTF("rx error: %jd", status, 0, 0, 0); if (status == USBD_STALLED) usbd_clear_endpoint_stall_async(sc->sc_rx_pipe); } @@ -345,7 +345,7 @@ gscan_ifstart(struct ifnet *ifp) sizeof(struct gscan_frame), 0, 10000, gscan_tx); err = usbd_transfer(sc->sc_tx_xfer); if (err != USBD_IN_PROGRESS) { - DPRINTF("start tx error: %s\n", usbd_errstr(err), 0, 0, 0); + DPRINTF("start tx error: %jd", err, 0, 0, 0); if_statadd(ifp, if_oerrors, 1); } else { sc->sc_m_transmit = m; --- src/sys/dev/usb/ehci.c.orig 2025-02-16 21:52:46.057983996 +0000 +++ src/sys/dev/usb/ehci.c 2025-04-24 04:08:20.608110349 +0000 @@ -1912,7 +1912,7 @@ ehci_dump_sitd(struct ehci_soft_itd *itd { EHCIHIST_FUNC(); EHCIHIST_CALLED(); - DPRINTF("SITD %#jx next = %p prev = %#jx", + DPRINTF("SITD %#jx next = %jp prev = %#jx", (uintptr_t)itd, (uintptr_t)itd->frame_list.next, (uintptr_t)itd->frame_list.prev, 0); DPRINTF(" xfernext=%#jx physaddr=%jX slot=%jd", --- src/sys/dev/usb/uhci.c.orig 2024-10-07 20:16:53.074909669 +0000 +++ src/sys/dev/usb/uhci.c 2025-04-24 04:03:38.809020117 +0000 @@ -829,7 +829,7 @@ uhci_dump_td(uhci_soft_td_t *p) !!(le32toh(p->td.td_status) & UHCI_TD_IOS), !!(le32toh(p->td.td_status) & UHCI_TD_LS), !!(le32toh(p->td.td_status) & UHCI_TD_SPD), 0); - DPRINTF("errcnt =%d actlen =%d pid=%02x", + DPRINTF("errcnt =%jd actlen =%jd pid=%02jx", UHCI_TD_GET_ERRCNT(le32toh(p->td.td_status)), UHCI_TD_GET_ACTLEN(le32toh(p->td.td_status)), UHCI_TD_GET_PID(le32toh(p->td.td_token)), 0); --- src/sys/dev/usb/ugen.c.orig 2024-03-29 20:48:58.140005185 +0000 +++ src/sys/dev/usb/ugen.c 2025-04-25 20:14:59.689635966 +0000 @@ -504,7 +504,7 @@ ugen_set_config(struct ugen_softc *sc, i for (endptno = 1; endptno < USB_MAX_ENDPOINTS; endptno++) if (sc->sc_is_open[endptno]) { DPRINTFN(1, - "ugen%jd - endpoint %d is open", + "ugen%jd - endpoint %jd is open", device_unit(sc->sc_dev), endptno, 0, 0); return USBD_IN_USE; } @@ -643,7 +643,7 @@ ugenopen(dev_t dev, int flag, int mode, goto out; } sce->ibuf = kmem_alloc(isize, KM_SLEEP); - DPRINTFN(5, "intr endpt=%d, isize=%d", + DPRINTFN(5, "intr endpt=%jd, isize=%jd", endpt, isize, 0, 0); if (clalloc(&sce->q, UGEN_IBSIZE, 0) == -1) { kmem_free(sce->ibuf, isize); @@ -693,7 +693,7 @@ ugenopen(dev_t dev, int flag, int mode, KM_SLEEP); sce->cur = sce->fill = sce->ibuf; sce->limit = sce->ibuf + isize * UGEN_NISOFRAMES; - DPRINTFN(5, "isoc endpt=%d, isize=%d", + DPRINTFN(5, "isoc endpt=%jd, isize=%jd", endpt, isize, 0, 0); err = usbd_open_pipe(sce->iface, edesc->bEndpointAddress, 0, &sce->pipeh); @@ -903,7 +903,7 @@ ugen_do_read(struct ugen_softc *sc, int break; case UE_BULK: if (sce->state & UGEN_BULK_RA) { - DPRINTFN(5, "BULK_RA req: %zd used: %d", + DPRINTFN(5, "BULK_RA req: %jd used: %jd", uio->uio_resid, sce->ra_wb_used, 0, 0); xfer = sce->ra_wb_xfer; @@ -1097,7 +1097,7 @@ ugen_do_write(struct ugen_softc *sc, int /* "ugenwb" */ error = cv_timedwait_sig(&sce->cv, &sc->sc_lock, mstohz(sce->timeout)); - DPRINTFN(5, "woke, error=%d", + DPRINTFN(5, "woke, error=%jd", error, 0, 0, 0); if (sc->sc_dying) error = EIO; @@ -1356,9 +1356,9 @@ ugenintr(struct usbd_xfer *xfer, void *a usbd_get_xfer_status(xfer, NULL, NULL, &count, NULL); ibuf = sce->ibuf; - DPRINTFN(5, "xfer=%#jx status=%d count=%d", + DPRINTFN(5, "xfer=%#jx status=%jd count=%jd", (uintptr_t)xfer, status, count, 0); - DPRINTFN(5, " data = %02x %02x %02x", + DPRINTFN(5, " data = %02jx %02jx %02jx", ibuf[0], ibuf[1], ibuf[2], 0); mutex_enter(&sc->sc_lock); @@ -1386,8 +1386,8 @@ ugen_isoc_rintr(struct usbd_xfer *xfer, return; usbd_get_xfer_status(xfer, NULL, NULL, &count, NULL); - DPRINTFN(5, "xfer %ld, count=%d", - (long)(req - sce->isoreqs), count, 0, 0); + DPRINTFN(5, "xfer %jd, count=%jd", + (intmax_t)(req - sce->isoreqs), count, 0, 0); mutex_enter(&sc->sc_lock);