diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h index f8c97f5da458..32a3cfc6f3bf 100644 --- a/drivers/usb/dwc2/core.h +++ b/drivers/usb/dwc2/core.h @@ -419,6 +419,7 @@ enum dwc2_ep0_state { * 0 - No (default) * 1 - Yes * @g_dma: Enables gadget dma usage (default: autodetect). + * @g_dma_desc: Enables gadget descriptor DMA (default: autodetect). * @g_rx_fifo_size: The periodic rx fifo size for the device, in * DWORDS from 16-32768 (default: 2048 if * possible, otherwise autodetect). @@ -498,6 +499,7 @@ struct dwc2_core_params { /* Gadget parameters */ bool g_dma; + bool g_dma_desc; u16 g_rx_fifo_size; u16 g_np_tx_fifo_size; u32 g_tx_fifo_size[MAX_EPS_CHANNELS]; diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c index 1ba0bfc9e581..4013518265c0 100644 --- a/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c @@ -96,6 +96,17 @@ static inline bool using_dma(struct dwc2_hsotg *hsotg) return hsotg->params.g_dma; } +/* + * using_desc_dma - return the descriptor DMA status of the driver. + * @hsotg: The driver state. + * + * Return true if we're using descriptor DMA. + */ +static inline bool using_desc_dma(struct dwc2_hsotg *hsotg) +{ + return hsotg->params.g_dma_desc; +} + /** * dwc2_gadget_incr_frame_num - Increments the targeted frame number. * @hs_ep: The endpoint diff --git a/drivers/usb/dwc2/params.c b/drivers/usb/dwc2/params.c index 74c3728f77d9..2f18a7b4c08c 100644 --- a/drivers/usb/dwc2/params.c +++ b/drivers/usb/dwc2/params.c @@ -1097,6 +1097,12 @@ static void dwc2_set_gadget_dma(struct dwc2_hsotg *hsotg) false, "gadget-dma", true, false, dma_capable); + + /* DMA Descriptor */ + dwc2_set_param_bool(hsotg, &p->g_dma_desc, false, + "gadget-dma-desc", + p->g_dma, false, + !!hw->dma_desc_enable); } /**