
Hi Sylvain,
On 10.08.2015 15:16, slemieux.tyco@gmail.com wrote:
From: Sylvain Lemieux slemieux@tycoint.com
Incorporate DMA driver from legacy LPCLinux NXP BSP. The files taken from the legacy patch are:
- lpc32xx DMA driver
- lpc3250 header file DMA registers definition.
The legacy driver was updated and clean-up as part of the integration with the latest u-boot.
Signed-off-by: Sylvain Lemieux slemieux@tycoint.com
Changes from v5 to v6:
- Addressed Marek's comments on LPC32xx DMA driver:
- return "-ETIMEDOUT" on timeout.
- Addressed Vladimir's comments on LPC32xx DMA driver:
- follow alphabetic order when adding "lpc32xx_dma_init()".
- use "writel()" when enabling DMA clock.
- move DMAC registers definitions from NAND SLC to "dma.h".
- remove support to release DMA channel.
- update the API to use an unsigned type for the channel.
- return an error instead of generating a fatal BUG when doing a transfer on an unallocated channel.
- add an explanatory error when returning with a failure.
Changes from v4 to v5:
- Addressed Marek's comments on LPC32xx DMA driver:
- Move macro use by the DMA client to write the next DMA linked list item address to NAND SLC driver.
- updated "lpc32xx_dma_wait_status()" implementation to make if stetement easier to read.
- updated multiline comments style.
Changes from v3 to v4:
- Addressed Marek's comments on LPC32xx DMA driver:
- updated multiline comments style.
- use "u32" instead of "uint32_t".
- fixed unbounded loop.
Changes from v2 to v3:
- Addressed Marek's comments on LPC32xx DMA driver:
- use defined in header file instead of local definition.
- remove for loop and use "ffz()".
- Provide define to assign next DMA linked list item address to removed typecast in DMA client (ex. NAND SLC).
Changes from v1 to v2:
- Moved the DMA patch as the first patch of the series.
- The NAND SLC patch (link below) is applied before this patch: https://patchwork.ozlabs.org/patch/497308/
Update to the legacy driver to integrate with the latest u-boot:
- Fixed checkpatch script output in legacy code.
- Use LPC32xx definition from "cpu.h" and "clk.h".
- Incorporate DMA specific register definition from "lpc3250.h" header file from legacy BSP patch from LPCLinux.
- Use u-boot API for register access to remove the volatile in register definition taken from "lpc3250.h" header file.
- Add DMA interface to "dma.h".
- Add dma clock control register bits (clk.h).
- Add functions to initialize the DMA clock.
The legacy BSP patch (u-boot-2009.03_lpc32x0-v1.07.patch.tar.bz2) was downloaded from the LPCLinux Web site.
arch/arm/cpu/arm926ejs/lpc32xx/devices.c | 7 ++ arch/arm/include/asm/arch-lpc32xx/clk.h | 3 + arch/arm/include/asm/arch-lpc32xx/dma.h | 67 ++++++++++++ arch/arm/include/asm/arch-lpc32xx/sys_proto.h | 1 + drivers/dma/Makefile | 1 + drivers/dma/lpc32xx_dma.c | 147 ++++++++++++++++++++++++++ 6 files changed, 226 insertions(+) create mode 100644 arch/arm/include/asm/arch-lpc32xx/dma.h create mode 100644 drivers/dma/lpc32xx_dma.c
diff --git a/arch/arm/cpu/arm926ejs/lpc32xx/devices.c b/arch/arm/cpu/arm926ejs/lpc32xx/devices.c index c0c9c6c..f0af851 100644 --- a/arch/arm/cpu/arm926ejs/lpc32xx/devices.c +++ b/arch/arm/cpu/arm926ejs/lpc32xx/devices.c @@ -41,6 +41,13 @@ void lpc32xx_uart_init(unsigned int uart_id) &clk->u3clk + (uart_id - 3)); }
+void lpc32xx_dma_init(void) +{
- /* Enable DMA interface */
- writel(DMA_CLK_ENABLE, &clk->dmaclk_ctrl);
+}
void lpc32xx_mac_init(void) { /* Enable MAC interface */ diff --git a/arch/arm/include/asm/arch-lpc32xx/clk.h b/arch/arm/include/asm/arch-lpc32xx/clk.h index 010211a..663f6bc 100644 --- a/arch/arm/include/asm/arch-lpc32xx/clk.h +++ b/arch/arm/include/asm/arch-lpc32xx/clk.h @@ -158,6 +158,9 @@ struct clk_pm_regs { #define CLK_NAND_SLC_SELECT (1 << 2) #define CLK_NAND_MLC_INT (1 << 5)
+/* DMA Clock Control Register bits */ +#define DMA_CLK_ENABLE (1 << 0)
for sake of consistency with all the rest clock name bits, please rename DMA_CLK_ENABLE to CLK_DMA_ENABLE
diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile index 4c8fcc2..f95fe70 100644 --- a/drivers/dma/Makefile +++ b/drivers/dma/Makefile @@ -10,3 +10,4 @@ obj-$(CONFIG_APBH_DMA) += apbh_dma.o obj-$(CONFIG_FSL_DMA) += fsl_dma.o obj-$(CONFIG_TI_KSNAV) += keystone_nav.o keystone_nav_cfg.o obj-$(CONFIG_TI_EDMA3) += ti-edma3.o +obj-$(CONFIG_DMA_LPC32XX) += lpc32xx_dma.o
Not sure about the ordering policy here, probably appending is good enough.
Tested on non-SPL build with hardware NAND SLC ECC, feel free to add
Tested-by: Vladimir Zapolskiy vz@mleia.com
-- With best wishes, Vladimir