[PATCH 08/13] ARM: S5P64X0: Move DMA support for S5P64X0
Jassi Brar
jassisinghbrar at gmail.com
Wed Sep 1 21:08:00 EDT 2010
On Wed, Sep 1, 2010 at 4:09 PM, Kukjin Kim <kgene.kim at samsung.com> wrote:
> This patch moves DMA support files in the mach-s5p64x0
> for S5P6440 and S5P6450 SoCs.
>
> Signed-off-by: Kukjin Kim <kgene.kim at samsung.com>
> Cc: Jassi Brar <jassi.brar at samsung.com>
> ---
> arch/arm/{mach-s5p6440 => mach-s5p64x0}/dma.c | 75 ++++++++++++++++---
> .../include/mach/dma.h | 0
> arch/arm/plat-samsung/include/plat/s3c-dma-pl330.h | 28 +++++++
> 3 files changed, 91 insertions(+), 12 deletions(-)
> rename arch/arm/{mach-s5p6440 => mach-s5p64x0}/dma.c (56%)
> rename arch/arm/{mach-s5p6440 => mach-s5p64x0}/include/mach/dma.h (100%)
>
> diff --git a/arch/arm/mach-s5p6440/dma.c b/arch/arm/mach-s5p64x0/dma.c
> similarity index 56%
> rename from arch/arm/mach-s5p6440/dma.c
> rename to arch/arm/mach-s5p64x0/dma.c
> index 07606ad..bc84678 100644
> --- a/arch/arm/mach-s5p6440/dma.c
> +++ b/arch/arm/mach-s5p64x0/dma.c
> @@ -1,4 +1,5 @@
> -/*
> +/* linux/arch/arm/mach-s5p64x0/dma.c
> + *
> * Copyright (C) 2010 Samsung Electronics Co. Ltd.
> * Jaswinder Singh <jassi.brar at samsung.com>
> *
> @@ -15,7 +16,7 @@
> * You should have received a copy of the GNU General Public License
> * along with this program; if not, write to the Free Software
> * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
> - */
> +*/
>
> #include <linux/platform_device.h>
> #include <linux/dma-mapping.h>
> @@ -30,11 +31,11 @@
>
> static u64 dma_dmamask = DMA_BIT_MASK(32);
>
> -static struct resource s5p6440_pdma_resource[] = {
> +static struct resource s5p64x0_pdma_resource[] = {
> [0] = {
> - .start = S5P6440_PA_PDMA,
> - .end = S5P6440_PA_PDMA + SZ_4K,
> - .flags = IORESOURCE_MEM,
> + .start = S5P64X0_PA_PDMA,
> + .end = S5P64X0_PA_PDMA + SZ_4K,
> + .flags = IORESOURCE_MEM,
> },
> [1] = {
> .start = IRQ_DMA0,
> @@ -80,11 +81,48 @@ static struct s3c_pl330_platdata s5p6440_pdma_pdata = {
> },
> };
>
> +static struct s3c_pl330_platdata s5p6450_pdma_pdata = {
> + .peri = {
> + [0] = DMACH_UART0_RX,
> + [1] = DMACH_UART0_TX,
> + [2] = DMACH_UART1_RX,
> + [3] = DMACH_UART1_TX,
> + [4] = DMACH_UART2_RX,
> + [5] = DMACH_UART2_TX,
> + [6] = DMACH_UART3_RX,
> + [7] = DMACH_UART3_TX,
> + [8] = DMACH_UART4_RX,
> + [9] = DMACH_UART4_TX,
> + [10] = DMACH_PCM0_TX,
> + [11] = DMACH_PCM0_RX,
> + [12] = DMACH_I2S0_TX,
> + [13] = DMACH_I2S0_RX,
> + [14] = DMACH_SPI0_TX,
> + [15] = DMACH_SPI0_RX,
> + [16] = DMACH_PCM1_TX,
> + [17] = DMACH_PCM1_RX,
> + [18] = DMACH_PCM2_TX,
> + [19] = DMACH_PCM2_RX,
> + [20] = DMACH_SPI1_TX,
> + [21] = DMACH_SPI1_RX,
> + [22] = DMACH_USI_TX,
> + [23] = DMACH_USI_RX,
> + [24] = DMACH_MAX,
> + [25] = DMACH_I2S1_TX,
> + [26] = DMACH_I2S1_RX,
> + [27] = DMACH_I2S2_TX,
> + [28] = DMACH_I2S2_RX,
> + [29] = DMACH_PWM,
> + [30] = DMACH_UART5_RX,
> + [31] = DMACH_UART5_TX,
> + },
> +};
> +
> static struct platform_device s5p6440_device_pdma = {
> .name = "s3c-pl330",
> .id = 1,
While at it, please make id 0 as well.
> - .num_resources = ARRAY_SIZE(s5p6440_pdma_resource),
> - .resource = s5p6440_pdma_resource,
> + .num_resources = ARRAY_SIZE(s5p64x0_pdma_resource),
> + .resource = s5p64x0_pdma_resource,
> .dev = {
> .dma_mask = &dma_dmamask,
> .coherent_dma_mask = DMA_BIT_MASK(32),
> @@ -92,14 +130,27 @@ static struct platform_device s5p6440_device_pdma = {
> },
> };
>
> -static struct platform_device *s5p6440_dmacs[] __initdata = {
> +static struct platform_device s5p6450_device_pdma = {
> + .name = "s3c-pl330",
> + .id = 0,
> + .num_resources = ARRAY_SIZE(s5p64x0_pdma_resource),
> + .resource = s5p64x0_pdma_resource,
> + .dev = {
> + .dma_mask = &dma_dmamask,
> + .coherent_dma_mask = DMA_BIT_MASK(32),
> + .platform_data = &s5p6450_pdma_pdata,
> + },
> +};
> +
> +static struct platform_device *s5p64x0_dmacs[] __initdata = {
> &s5p6440_device_pdma,
> + /* &s5p6450_device_pdma will be added */
> };
Let us simply call the DMAC as s5p64x0_device_pdma and use some
CPU detection method in s5p64x0_dma_init to assign either of
s5p6440_pdma_pdata and s5p6450_pdma_pdata to the platform_data
........
> + DMACH_MTOM_0,
> + DMACH_MTOM_1,
> + DMACH_MTOM_2,
> + DMACH_MTOM_3,
> + DMACH_MTOM_4,
> + DMACH_MTOM_5,
> + DMACH_MTOM_6,
> + DMACH_MTOM_7,
oops ... Mainline s3c dma api doesn't yet support Mem->Mem transfers.
You need to drop it.
More information about the linux-arm-kernel
mailing list