Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

usb: dwc3: Support EBC feature of DWC_usb31

Support configuration and use of bulk endpoints in the so-called EBC
mode described in the DBC_usb31 databook (appendix E)

Added a bit fifo_mode to usb_ep to indicate to the UDC driver that a
specific endpoint is to operate in the EBC (or equivalent) mode when
enabled

Added macros for bits 15 and 14 of DEPCFG parameter 1 to indicate EBC
mode and write back behaviour. These bits will be set to 1 when
configuring an EBC endpoint as described in the programming guide

Signed-off-by: Manan Aurora <maurora@google.com>
Link: https://lore.kernel.org/r/20231031034641.660606-1-maurora@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Manan Aurora and committed by
Greg Kroah-Hartman
398aa9a7 cd099cde

+10
+1
drivers/usb/dwc3/core.h
··· 376 376 /* Global HWPARAMS4 Register */ 377 377 #define DWC3_GHWPARAMS4_HIBER_SCRATCHBUFS(n) (((n) & (0x0f << 13)) >> 13) 378 378 #define DWC3_MAX_HIBER_SCRATCHBUFS 15 379 + #define DWC3_EXT_BUFF_CONTROL BIT(21) 379 380 380 381 /* Global HWPARAMS6 Register */ 381 382 #define DWC3_GHWPARAMS6_BCSUPPORT BIT(14)
+6
drivers/usb/dwc3/gadget.c
··· 673 673 params.param1 |= DWC3_DEPCFG_BINTERVAL_M1(bInterval_m1); 674 674 } 675 675 676 + if (dep->endpoint.fifo_mode) { 677 + if (!(dwc->hwparams.hwparams4 & DWC3_EXT_BUFF_CONTROL)) 678 + return -EINVAL; 679 + params.param1 |= DWC3_DEPCFG_EBC_HWO_NOWB | DWC3_DEPCFG_USE_EBC; 680 + } 681 + 676 682 return dwc3_send_gadget_ep_cmd(dep, DWC3_DEPCMD_SETEPCONFIG, &params); 677 683 } 678 684
+2
drivers/usb/dwc3/gadget.h
··· 26 26 #define DWC3_DEPCFG_XFER_NOT_READY_EN BIT(10) 27 27 #define DWC3_DEPCFG_FIFO_ERROR_EN BIT(11) 28 28 #define DWC3_DEPCFG_STREAM_EVENT_EN BIT(13) 29 + #define DWC3_DEPCFG_EBC_HWO_NOWB BIT(14) 30 + #define DWC3_DEPCFG_USE_EBC BIT(15) 29 31 #define DWC3_DEPCFG_BINTERVAL_M1(n) (((n) & 0xff) << 16) 30 32 #define DWC3_DEPCFG_STREAM_CAPABLE BIT(24) 31 33 #define DWC3_DEPCFG_EP_NUMBER(n) (((n) & 0x1f) << 25)
+1
include/linux/usb/gadget.h
··· 236 236 unsigned max_streams:16; 237 237 unsigned mult:2; 238 238 unsigned maxburst:5; 239 + unsigned fifo_mode:1; 239 240 u8 address; 240 241 const struct usb_endpoint_descriptor *desc; 241 242 const struct usb_ss_ep_comp_descriptor *comp_desc;