On 4/19/22 16:37, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@xxxxxxxx> > > Most of the plat-omap/dma.c code is specific to the USB > driver. The reason is simple: the omap_udc is the only driver which has not been ported to DMAengine. I had a patch if I recall to convert it, but I don't have a way to test it and the omap_udc sets some funky bits for DMA which we can not figure out on how to handle. > Hide that code when it is not in use, to make it > clearer which parts are actually still required. Reviewed-by: Peter Ujfalusi <peter.ujfalusi@xxxxxxxxx> > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> > --- > arch/arm/plat-omap/dma.c | 45 +++++++++++++++++----------------- > drivers/usb/gadget/udc/Kconfig | 2 +- > include/linux/omap-dma.h | 5 +++- > 3 files changed, 27 insertions(+), 25 deletions(-) > > diff --git a/arch/arm/plat-omap/dma.c b/arch/arm/plat-omap/dma.c > index 700ba9b600e7..b7757864d0aa 100644 > --- a/arch/arm/plat-omap/dma.c > +++ b/arch/arm/plat-omap/dma.c > @@ -66,7 +66,6 @@ enum { DMA_CHAIN_STARTED, DMA_CHAIN_NOTSTARTED }; > > static struct omap_system_dma_plat_info *p; > static struct omap_dma_dev_attr *d; > -static void omap_clear_dma(int lch); > static int enable_1510_mode; > static u32 errata; > > @@ -90,19 +89,16 @@ static int omap_dma_reserve_channels; > static DEFINE_SPINLOCK(dma_chan_lock); > static struct omap_dma_lch *dma_chan; > > -static inline void disable_lnk(int lch); > -static void omap_disable_channel_irq(int lch); > -static inline void omap_enable_channel_irq(int lch); > - > -#ifdef CONFIG_ARCH_OMAP15XX > -/* Returns 1 if the DMA module is in OMAP1510-compatible mode, 0 otherwise */ > -static int omap_dma_in_1510_mode(void) > +static inline void omap_disable_channel_irq(int lch) > { > - return enable_1510_mode; > + /* disable channel interrupts */ > + p->dma_write(0, CICR, lch); > + /* Clear CSR */ > + if (dma_omap1()) > + p->dma_read(CSR, lch); > + else > + p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch); > } > -#else > -#define omap_dma_in_1510_mode() 0 > -#endif > > #ifdef CONFIG_ARCH_OMAP1 > static inline void set_gdma_dev(int req, int dev) > @@ -169,6 +165,17 @@ void omap_set_dma_priority(int lch, int dst_port, int priority) > #endif > EXPORT_SYMBOL(omap_set_dma_priority); > > +#if IS_ENABLED(CONFIG_USB_OMAP) > +#ifdef CONFIG_ARCH_OMAP15XX > +/* Returns 1 if the DMA module is in OMAP1510-compatible mode, 0 otherwise */ > +static int omap_dma_in_1510_mode(void) > +{ > + return enable_1510_mode; > +} > +#else > +#define omap_dma_in_1510_mode() 0 > +#endif > + > void omap_set_dma_transfer_params(int lch, int data_type, int elem_count, > int frame_count, int sync_mode, > int dma_trigger, int src_or_dst_synch) > @@ -418,17 +425,6 @@ static inline void omap_enable_channel_irq(int lch) > p->dma_write(dma_chan[lch].enabled_irqs, CICR, lch); > } > > -static inline void omap_disable_channel_irq(int lch) > -{ > - /* disable channel interrupts */ > - p->dma_write(0, CICR, lch); > - /* Clear CSR */ > - if (dma_omap1()) > - p->dma_read(CSR, lch); > - else > - p->dma_write(OMAP2_DMA_CSR_CLEAR_MASK, CSR, lch); > -} > - > void omap_disable_dma_irq(int lch, u16 bits) > { > dma_chan[lch].enabled_irqs &= ~bits; > @@ -473,6 +469,7 @@ static inline void disable_lnk(int lch) > p->dma_write(l, CLNK_CTRL, lch); > dma_chan[lch].flags &= ~OMAP_DMA_ACTIVE; > } > +#endif > > int omap_request_dma(int dev_id, const char *dev_name, > void (*callback)(int lch, u16 ch_status, void *data), > @@ -572,6 +569,7 @@ static void omap_clear_dma(int lch) > local_irq_restore(flags); > } > > +#if IS_ENABLED(CONFIG_USB_OMAP) > void omap_start_dma(int lch) > { > u32 l; > @@ -792,6 +790,7 @@ int omap_get_dma_active_status(int lch) > return (p->dma_read(CCR, lch) & OMAP_DMA_CCR_EN) != 0; > } > EXPORT_SYMBOL(omap_get_dma_active_status); > +#endif > > int omap_dma_running(void) > { > diff --git a/drivers/usb/gadget/udc/Kconfig b/drivers/usb/gadget/udc/Kconfig > index cee934dce4f0..69394dc1cdfb 100644 > --- a/drivers/usb/gadget/udc/Kconfig > +++ b/drivers/usb/gadget/udc/Kconfig > @@ -128,7 +128,7 @@ config USB_GR_UDC > > config USB_OMAP > tristate "OMAP USB Device Controller" > - depends on ARCH_OMAP1 || (ARCH_OMAP && COMPILE_TEST) > + depends on ARCH_OMAP1 > depends on ISP1301_OMAP || !(MACH_OMAP_H2 || MACH_OMAP_H3) > help > Many Texas Instruments OMAP processors have flexible full > diff --git a/include/linux/omap-dma.h b/include/linux/omap-dma.h > index 5e228428fda1..07fa58ae9902 100644 > --- a/include/linux/omap-dma.h > +++ b/include/linux/omap-dma.h > @@ -299,8 +299,9 @@ extern void omap_set_dma_priority(int lch, int dst_port, int priority); > extern int omap_request_dma(int dev_id, const char *dev_name, > void (*callback)(int lch, u16 ch_status, void *data), > void *data, int *dma_ch); > -extern void omap_disable_dma_irq(int ch, u16 irq_bits); > extern void omap_free_dma(int ch); > +#if IS_ENABLED(CONFIG_USB_OMAP) > +extern void omap_disable_dma_irq(int ch, u16 irq_bits); > extern void omap_start_dma(int lch); > extern void omap_stop_dma(int lch); > extern void omap_set_dma_transfer_params(int lch, int data_type, > @@ -326,6 +327,8 @@ extern void omap_set_dma_dest_burst_mode(int lch, > extern dma_addr_t omap_get_dma_src_pos(int lch); > extern dma_addr_t omap_get_dma_dst_pos(int lch); > extern int omap_get_dma_active_status(int lch); > +#endif > + > extern int omap_dma_running(void); > > #if IS_ENABLED(CONFIG_FB_OMAP) -- Péter