> -----Original Message-----
> From: Kevin Hilman [mailto:[email protected]]
> Sent: Saturday, September 04, 2010 4:04 AM
> To: G, Manjunath Kondaiah
> Cc: [email protected]; Cousson, Benoit; Shilimkar, Santosh
> Subject: Re: [PATCH v2 08/11] OMAP: DMA: Convert DMA library
> into DMA platform Driver
>
> Manjunatha GK <[email protected]> writes:
>
> > This patch converts DMA library into DMA platform driver
> and make use
> > of platform data provided by HWMOD data base for OMAP2PLUS onwards.
> > For OMAP1 processors, the DMA driver in mach-omap uses
> resource structures
> > for getting platform data.
> >
> > Also, it enables and uses run time PM API's
> >
> > Signed-off-by: Manjunatha GK <[email protected]>
> > Cc: Benoit Cousson <[email protected]>
> > Cc: Kevin Hilman <[email protected]>
> > Cc: Santosh Shilimkar <[email protected]>
> > ---
> > arch/arm/mach-omap1/Makefile | 2 +-
> > arch/arm/mach-omap1/include/mach/dma.h | 66 +++++++++
> > arch/arm/mach-omap2/Makefile | 2 +-
> > arch/arm/mach-omap2/include/mach/dma.h | 83 +++++++++++
> > arch/arm/plat-omap/dma.c | 244
> +++++++++++++++++---------------
> > arch/arm/plat-omap/include/plat/dma.h | 157 ++-------------------
> > 6 files changed, 290 insertions(+), 264 deletions(-)
> >
> > diff --git a/arch/arm/mach-omap1/Makefile
> b/arch/arm/mach-omap1/Makefile
> > index 9a304d8..b7dfc54 100644
> > --- a/arch/arm/mach-omap1/Makefile
> > +++ b/arch/arm/mach-omap1/Makefile
> > @@ -3,7 +3,7 @@
> > #
> >
> > # Common support
> > -obj-y := io.o id.o sram.o irq.o mux.o flash.o serial.o devices.o
> > +obj-y := io.o id.o sram.o irq.o mux.o flash.o serial.o
> devices.o dma.o
> > obj-y += clock.o clock_data.o opp_data.o
> >
> > obj-$(CONFIG_OMAP_MCBSP) += mcbsp.o
> > diff --git a/arch/arm/mach-omap1/include/mach/dma.h
> b/arch/arm/mach-omap1/include/mach/dma.h
> > index d446cdd..1eb0d31 100644
> > --- a/arch/arm/mach-omap1/include/mach/dma.h
> > +++ b/arch/arm/mach-omap1/include/mach/dma.h
> > @@ -77,4 +77,70 @@
> > #define OMAP1_DMA_CCR2(n) (0x40 * (n) + 0x24)
> > #define OMAP1_DMA_LCH_CTRL(n) (0x40 * (n) + 0x2a)
> >
> > +/* Dummy defines to support multi omap code */
>
> These should not be needed anymore as this is now an OMAP1-specific
> header.
Because it is OMAP1 specific header, there are common API's used between
omap1 and omap2 plus in plat-omap/dma.c which needs these defines otherwise
build will break for omap1 since these defines exists omap2 specific header
Which is in respective mach directory.
>
> > +/* Channel specific registers */
> > +#define OMAP_DMA4_CCR(n) 0
> > +#define OMAP_DMA4_CSDP(n) 0
> > +#define OMAP_DMA4_CEN(n) 0
> > +#define OMAP_DMA4_CFN(n) 0
> > +#define OMAP_DMA4_COLOR(n) 0
> > +#define OMAP_DMA4_CSSA(n) 0
> > +#define OMAP_DMA4_CSEI(n) 0
> > +#define OMAP_DMA4_CSFI(n) 0
> > +#define OMAP_DMA4_CDSA(n) 0
> > +#define OMAP_DMA4_CDEI(n) 0
> > +#define OMAP_DMA4_CDFI(n) 0
> > +#define OMAP_DMA4_CSR(n) 0
> > +#define OMAP_DMA4_CICR(n) 0
> > +#define OMAP_DMA4_CLNK_CTRL(n) 0
> > +#define OMAP_DMA4_CH_BASE(n) 0
> > +#define OMAP_DMA4_CDAC(n) 0
> > +#define OMAP_DMA4_CSAC(n) 0
> > +
> > +/* Common registers */
> > +#define OMAP_DMA4_IRQENABLE_L0 0
> > +#define OMAP_DMA4_OCP_SYSCONFIG 0
> > +#define OMAP_DMA4_GCR 0
> > +#define OMAP_DMA4_IRQSTATUS_L0 0
> > +#define OMAP_DMA4_CAPS_2 0
> > +#define OMAP_DMA4_CAPS_3 0
> > +#define OMAP_DMA4_CAPS_4 0
> > +#define OMAP_DMA4_REVISION 0
> > +
> > +#define OMAP_DMA4_CCR2(n) 0
> > +#define OMAP_DMA4_LCH_CTRL(n) 0
> > +#define OMAP_DMA4_COLOR_L(n) 0
> > +#define OMAP_DMA4_COLOR_U(n) 0
> > +#define OMAP1_DMA_COLOR(n) 0
> > +#define OMAP_DMA4_CSSA_U(n) 0
> > +#define OMAP_DMA4_CSSA_L(n) 0
> > +#define OMAP1_DMA_CSSA(n) 0
> > +#define OMAP_DMA4_CDSA_U(n) 0
> > +#define OMAP_DMA4_CDSA_L(n) 0
> > +#define OMAP1_DMA_CDSA(n) 0
> > +#define OMAP_DMA4_CPC(n) 0
> > +
> > +#define OMAP1_DMA_IRQENABLE_L0 0
> > +#define OMAP1_DMA_IRQENABLE_L0 0
> > +#define OMAP1_DMA_IRQSTATUS_L0 0
> > +#define OMAP1_DMA_OCP_SYSCONFIG 0
> > +#define OMAP_DMA4_HW_ID 0
> > +#define OMAP_DMA4_CAPS_0_U 0
> > +#define OMAP_DMA4_CAPS_0_L 0
> > +#define OMAP_DMA4_CAPS_1_U 0
> > +#define OMAP_DMA4_CAPS_1_L 0
> > +#define OMAP_DMA4_GSCR 0
> > +#define OMAP1_DMA_REVISION 0
> > +
> > +struct omap_dma_lch {
> > + int next_lch;
> > + int dev_id;
> > + u16 saved_csr;
> > + u16 enabled_irqs;
> > + const char *dev_name;
> > + void (*callback)(int lch, u16 ch_status, void *data);
> > + void *data;
> > + long flags;
> > +};
> > +
> > #endif /* __ASM_ARCH_OMAP1_DMA_H */
> > diff --git a/arch/arm/mach-omap2/Makefile
> b/arch/arm/mach-omap2/Makefile
> > index 9b44773..6a8b231 100644
> > --- a/arch/arm/mach-omap2/Makefile
> > +++ b/arch/arm/mach-omap2/Makefile
> > @@ -3,7 +3,7 @@
> > #
> >
> > # Common support
> > -obj-y := id.o io.o control.o mux.o devices.o serial.o
> gpmc.o timer-gp.o pm.o
> > +obj-y := id.o io.o control.o mux.o devices.o serial.o
> gpmc.o timer-gp.o pm.o dma.o
> >
> > omap-2-3-common = irq.o sdrc.o
> > hwmod-common = omap_hwmod.o \
> > diff --git a/arch/arm/mach-omap2/include/mach/dma.h
> b/arch/arm/mach-omap2/include/mach/dma.h
> > index 3eca7d8..22f4b41 100644
> > --- a/arch/arm/mach-omap2/include/mach/dma.h
> > +++ b/arch/arm/mach-omap2/include/mach/dma.h
> > @@ -77,4 +77,87 @@
> > #define OMAP_DMA4_CNDP(n) (0x60 * (n) + 0xd4)
> > #define OMAP_DMA4_CCDN(n) (0x60 * (n) + 0xd8)
> >
> > +
> > +/* Dummy defines for support multi omap code */
>
> Why exactly are these here?
-Ditto-
>
> > +/* Common registers */
> > +#define OMAP1_DMA_GCR 0
> > +#define OMAP1_DMA_HW_ID 0
> > +#define OMAP1_DMA_CAPS_0_U 0
> > +#define OMAP1_DMA_CAPS_0_L 0
> > +#define OMAP1_DMA_CAPS_1_U 0
> > +#define OMAP1_DMA_CAPS_1_L 0
> > +#define OMAP1_DMA_CAPS_2 0
> > +#define OMAP1_DMA_CAPS_3 0
> > +#define OMAP1_DMA_CAPS_4 0
> > +#define OMAP1_DMA_GSCR 0
> > +
> > +/* Channel specific registers */
> > +#define OMAP1_DMA_CH_BASE(n) 0
> > +#define OMAP1_DMA_CCR(n) 0
> > +#define OMAP1_DMA_CSDP(n) 0
> > +#define OMAP1_DMA_CCR2(n) 0
> > +#define OMAP1_DMA_CEN(n) 0
> > +#define OMAP1_DMA_CFN(n) 0
> > +#define OMAP1_DMA_LCH_CTRL(n) 0
> > +#define OMAP1_DMA_COLOR_L(n) 0
> > +#define OMAP1_DMA_COLOR_U(n) 0
> > +#define OMAP1_DMA_CSSA_U(n) 0
> > +#define OMAP1_DMA_CSSA_L(n) 0
> > +#define OMAP1_DMA_CSEI(n) 0
> > +#define OMAP1_DMA_CSFI(n) 0
> > +#define OMAP1_DMA_CDSA_U(n) 0
> > +#define OMAP1_DMA_CDSA_L(n) 0
> > +#define OMAP1_DMA_CDEI(n) 0
> > +#define OMAP1_DMA_CDFI(n) 0
> > +#define OMAP1_DMA_CSR(n) 0
> > +#define OMAP1_DMA_CICR(n) 0
> > +#define OMAP1_DMA_CLNK_CTRL(n) 0
> > +#define OMAP1_DMA_CPC(n) 0
> > +#define OMAP1_DMA_CDAC(n) 0
> > +#define OMAP1_DMA_CSAC(n) 0
> > +#define OMAP1_DMA_CCEN(n) 0
> > +#define OMAP1_DMA_CCFN(n) 0
> > +
> > +#define OMAP_DMA4_CCR2(n) 0
> > +#define OMAP_DMA4_LCH_CTRL(n) 0
> > +#define OMAP_DMA4_COLOR_L(n) 0
> > +#define OMAP_DMA4_COLOR_U(n) 0
> > +#define OMAP1_DMA_COLOR(n) 0
> > +#define OMAP_DMA4_CSSA_U(n) 0
> > +#define OMAP_DMA4_CSSA_L(n) 0
> > +#define OMAP1_DMA_CSSA(n) 0
> > +#define OMAP_DMA4_CDSA_U(n) 0
> > +#define OMAP_DMA4_CDSA_L(n) 0
> > +#define OMAP1_DMA_CDSA(n) 0
> > +#define OMAP_DMA4_CPC(n) 0
> > +
> > +#define OMAP1_DMA_IRQENABLE_L0 0
> > +#define OMAP1_DMA_IRQSTATUS_L0 0
> > +#define OMAP1_DMA_OCP_SYSCONFIG 0
> > +#define OMAP1_DMA_OCP_SYSCONFIG 0
> > +#define OMAP_DMA4_HW_ID 0
> > +#define OMAP_DMA4_CAPS_0_U 0
> > +#define OMAP_DMA4_CAPS_0_L 0
> > +#define OMAP_DMA4_CAPS_1_U 0
> > +#define OMAP_DMA4_CAPS_1_L 0
> > +#define OMAP_DMA4_GSCR 0
> > +#define OMAP1_DMA_REVISION 0
> > +
> > +struct omap_dma_lch {
> > + int next_lch;
> > + int dev_id;
> > + u16 saved_csr;
> > + u16 enabled_irqs;
> > + const char *dev_name;
> > + void (*callback)(int lch, u16 ch_status, void *data);
> > + void *data;
> > + long flags;
> > + /* required for Dynamic chaining */
> > + int prev_linked_ch;
> > + int next_linked_ch;
> > + int state;
> > + int chain_id;
> > + int status;
> > +};
>
> Seems like this struct should stay common, as it's basically the same
> across all OMAPs. Only chaining fields are different, and
> they can just
> be unused on OMAP1.
I can move to plat-omap dma header.
>
> Also, this breaks multi-OMAP as this struct is used in plat-omap/dma.c
> (OMAP1 and OMAP2+) but defined differently for OMAP1 and OMAP2+.
>
This will not break multi-OMAP build, since plat-omap has only generic API's
Which are free from chain parameters. Chain parameters are used only in
mach-omap2/dma.c hence build passes for both multi omap and omap1 defconfigs.
-Manjunath--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html