diff --git a/sys/dev/usb/controller/dwc3.h b/sys/dev/usb/controller/dwc3.h --- a/sys/dev/usb/controller/dwc3.h +++ b/sys/dev/usb/controller/dwc3.h @@ -54,6 +54,7 @@ #define DWC3_GGPIO 0xc124 #define DWC3_GUID 0xc128 #define DWC3_GUCTL 0xc12C +#define DWC3_GUCTL_HOST_AUTO_RETRY (1 << 14) #define DWC3_GBUSERRADDRLO 0xc130 #define DWC3_GBUSERRADDRHI 0xc134 #define DWC3_GPRTBIMAPLO 0xc138 diff --git a/sys/dev/usb/controller/dwc3.c b/sys/dev/usb/controller/dwc3.c --- a/sys/dev/usb/controller/dwc3.c +++ b/sys/dev/usb/controller/dwc3.c @@ -209,6 +209,15 @@ reg &= ~DWC3_GCTL_PRTCAPDIR_MASK; reg |= DWC3_GCTL_PRTCAPDIR_HOST; DWC3_WRITE(sc, DWC3_GCTL, reg); + + /* + * Enable the Host IN Auto Retry feature, making the + * host respond with a non-terminating retry ACK. + * XXX If we ever support more than host mode this needs a dr_mode check. + */ + reg = DWC3_READ(sc, DWC3_GUCTL); + reg |= DWC3_GUCTL_HOST_AUTO_RETRY; + DWC3_WRITE(sc, DWC3_GUCTL, reg); } static void