[U-Boot] [PATCH v4 1/5] dma: lpc32xx: add DMA driver
Marek Vasut
marex at denx.de
Tue Aug 4 23:31:44 CEST 2015
On Tuesday, August 04, 2015 at 11:04:38 PM, slemieux.tyco at gmail.com wrote:
> From: Sylvain Lemieux <slemieux at 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 at tycoint.com>
[...]
> +
> +/*
> + * The "dmac_ll" structure is mapping the DMA channel register,
> + * as per UM10326, "LPC32x0 and LPC32x0/01 User manual" - Rev. 3
> + * tables 84, 85, 86 & 87.
> + *
> + * The DMA client (ex. NAND SLC) can use this macro to write the
> + * next DMA linked list item address.
> + */
> +#define lpc32xx_dmac_next_lli(x) (uint32_t)x
Ew, and it's not even used :-)
> +/* DMA linked list structure used with a channel's LLI register */
> +struct lpc32xx_dmac_ll {
> + u32 dma_src;
> + u32 dma_dest;
> + u32 next_lli;
> + u32 next_ctrl;
> +};
[...]
> +int lpc32xx_dma_wait_status(int channel)
> +{
> + unsigned long start;
> +
> + start = get_timer(0);
> + while (1) {
Here , you can do
reg = readl();
reg |= readl();
if (reg & BIT_MASK())
break;
> + if (((readl(&dma->raw_tc_stat) | readl(dma->raw_err_stat))
> + & BIT_MASK(channel)) != 0)
> + break;
> +
> + if (get_timer(start) > 10000)
> + return -1;
> +
> + udelay(1);
> + }
> +
> + if (unlikely(readl(&dma->raw_err_stat) & BIT_MASK(channel))) {
> + setbits_le32(&dma->int_err_clear, BIT_MASK(channel));
> + setbits_le32(&dma->raw_err_stat, BIT_MASK(channel));
> + return -1;
> + }
> + setbits_le32(&dma->int_tc_clear, BIT_MASK(channel));
> + setbits_le32(&dma->raw_tc_stat, BIT_MASK(channel));
> + return 0;
> +}
Other than that,
Acked-by: Marek Vasut <marex at denx.de>
More information about the U-Boot
mailing list