Blame view

arch/arm/mach-s5pv210/dma.c 3.51 KB
dafc95430   Boojin Kim   ARM: S5PV210: Use...
1
2
3
4
5
  /* linux/arch/arm/mach-s5pv210/dma.c
   *
   * Copyright (c) 2011 Samsung Electronics Co., Ltd.
   *		http://www.samsung.com
   *
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   * Copyright (C) 2010 Samsung Electronics Co. Ltd.
   *	Jaswinder Singh <jassi.brar@samsung.com>
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation; either version 2 of the License, or
   * (at your option) any later version.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
   * 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.
   */
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
23
  #include <linux/dma-mapping.h>
dafc95430   Boojin Kim   ARM: S5PV210: Use...
24
25
  #include <linux/amba/bus.h>
  #include <linux/amba/pl330.h>
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
26

dafc95430   Boojin Kim   ARM: S5PV210: Use...
27
  #include <asm/irq.h>
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
28
29
30
31
32
  #include <plat/devs.h>
  #include <plat/irqs.h>
  
  #include <mach/map.h>
  #include <mach/irqs.h>
dafc95430   Boojin Kim   ARM: S5PV210: Use...
33
  #include <mach/dma.h>
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
34
35
  
  static u64 dma_dmamask = DMA_BIT_MASK(32);
8742e0441   Thomas Abraham   ARM: S5PV210: Mod...
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  u8 pdma0_peri[] = {
  	DMACH_UART0_RX,
  	DMACH_UART0_TX,
  	DMACH_UART1_RX,
  	DMACH_UART1_TX,
  	DMACH_UART2_RX,
  	DMACH_UART2_TX,
  	DMACH_UART3_RX,
  	DMACH_UART3_TX,
  	DMACH_MAX,
  	DMACH_I2S0_RX,
  	DMACH_I2S0_TX,
  	DMACH_I2S0S_TX,
  	DMACH_I2S1_RX,
  	DMACH_I2S1_TX,
  	DMACH_MAX,
  	DMACH_MAX,
  	DMACH_SPI0_RX,
  	DMACH_SPI0_TX,
  	DMACH_SPI1_RX,
  	DMACH_SPI1_TX,
  	DMACH_MAX,
  	DMACH_MAX,
  	DMACH_AC97_MICIN,
  	DMACH_AC97_PCMIN,
  	DMACH_AC97_PCMOUT,
  	DMACH_MAX,
  	DMACH_PWM,
  	DMACH_SPDIF,
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
65
  };
dafc95430   Boojin Kim   ARM: S5PV210: Use...
66
67
  struct dma_pl330_platdata s5pv210_pdma0_pdata = {
  	.nr_valid_peri = ARRAY_SIZE(pdma0_peri),
8742e0441   Thomas Abraham   ARM: S5PV210: Mod...
68
  	.peri_id = pdma0_peri,
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
69
  };
dafc95430   Boojin Kim   ARM: S5PV210: Use...
70
71
72
  struct amba_device s5pv210_device_pdma0 = {
  	.dev = {
  		.init_name = "dma-pl330.0",
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
73
74
75
76
  		.dma_mask = &dma_dmamask,
  		.coherent_dma_mask = DMA_BIT_MASK(32),
  		.platform_data = &s5pv210_pdma0_pdata,
  	},
dafc95430   Boojin Kim   ARM: S5PV210: Use...
77
78
79
  	.res = {
  		.start = S5PV210_PA_PDMA0,
  		.end = S5PV210_PA_PDMA0 + SZ_4K,
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
80
81
  		.flags = IORESOURCE_MEM,
  	},
dafc95430   Boojin Kim   ARM: S5PV210: Use...
82
83
  	.irq = {IRQ_PDMA0, NO_IRQ},
  	.periphid = 0x00041330,
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
84
  };
8742e0441   Thomas Abraham   ARM: S5PV210: Mod...
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
  u8 pdma1_peri[] = {
  	DMACH_UART0_RX,
  	DMACH_UART0_TX,
  	DMACH_UART1_RX,
  	DMACH_UART1_TX,
  	DMACH_UART2_RX,
  	DMACH_UART2_TX,
  	DMACH_UART3_RX,
  	DMACH_UART3_TX,
  	DMACH_MAX,
  	DMACH_I2S0_RX,
  	DMACH_I2S0_TX,
  	DMACH_I2S0S_TX,
  	DMACH_I2S1_RX,
  	DMACH_I2S1_TX,
  	DMACH_I2S2_RX,
  	DMACH_I2S2_TX,
  	DMACH_SPI0_RX,
  	DMACH_SPI0_TX,
  	DMACH_SPI1_RX,
  	DMACH_SPI1_TX,
  	DMACH_MAX,
  	DMACH_MAX,
  	DMACH_PCM0_RX,
  	DMACH_PCM0_TX,
  	DMACH_PCM1_RX,
  	DMACH_PCM1_TX,
  	DMACH_MSM_REQ0,
  	DMACH_MSM_REQ1,
  	DMACH_MSM_REQ2,
  	DMACH_MSM_REQ3,
  	DMACH_PCM2_RX,
  	DMACH_PCM2_TX,
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
118
  };
dafc95430   Boojin Kim   ARM: S5PV210: Use...
119
120
  struct dma_pl330_platdata s5pv210_pdma1_pdata = {
  	.nr_valid_peri = ARRAY_SIZE(pdma1_peri),
8742e0441   Thomas Abraham   ARM: S5PV210: Mod...
121
  	.peri_id = pdma1_peri,
dafc95430   Boojin Kim   ARM: S5PV210: Use...
122
123
124
125
126
  };
  
  struct amba_device s5pv210_device_pdma1 = {
  	.dev = {
  		.init_name = "dma-pl330.1",
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
127
128
129
130
  		.dma_mask = &dma_dmamask,
  		.coherent_dma_mask = DMA_BIT_MASK(32),
  		.platform_data = &s5pv210_pdma1_pdata,
  	},
dafc95430   Boojin Kim   ARM: S5PV210: Use...
131
132
133
134
135
136
137
  	.res = {
  		.start = S5PV210_PA_PDMA1,
  		.end = S5PV210_PA_PDMA1 + SZ_4K,
  		.flags = IORESOURCE_MEM,
  	},
  	.irq = {IRQ_PDMA1, NO_IRQ},
  	.periphid = 0x00041330,
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
138
139
140
141
  };
  
  static int __init s5pv210_dma_init(void)
  {
8742e0441   Thomas Abraham   ARM: S5PV210: Mod...
142
143
  	dma_cap_set(DMA_SLAVE, s5pv210_pdma0_pdata.cap_mask);
  	dma_cap_set(DMA_CYCLIC, s5pv210_pdma0_pdata.cap_mask);
dafc95430   Boojin Kim   ARM: S5PV210: Use...
144
  	amba_device_register(&s5pv210_device_pdma0, &iomem_resource);
8742e0441   Thomas Abraham   ARM: S5PV210: Mod...
145
146
147
  
  	dma_cap_set(DMA_SLAVE, s5pv210_pdma1_pdata.cap_mask);
  	dma_cap_set(DMA_CYCLIC, s5pv210_pdma1_pdata.cap_mask);
f86147cc8   Alim Akhtar   ARM: S5PV210: reg...
148
  	amba_device_register(&s5pv210_device_pdma1, &iomem_resource);
7d1a2077a   Jassi Brar   S5PV210: DMA: Add...
149
150
151
152
  
  	return 0;
  }
  arch_initcall(s5pv210_dma_init);