2011-09-02 09:44:37 +09:00
/* linux/arch/arm/mach-s5pv210/dma.c
*
* Copyright ( c ) 2011 Samsung Electronics Co . , Ltd .
* http : //www.samsung.com
*
2010-05-18 11:59:34 +09:00
* 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 0213 9 , USA .
*/
# include <linux/dma-mapping.h>
2011-09-02 09:44:37 +09:00
# include <linux/amba/bus.h>
# include <linux/amba/pl330.h>
2010-05-18 11:59:34 +09:00
2011-09-02 09:44:37 +09:00
# include <asm/irq.h>
2010-05-18 11:59:34 +09:00
# include <plat/devs.h>
# include <plat/irqs.h>
# include <mach/map.h>
# include <mach/irqs.h>
2011-09-02 09:44:37 +09:00
# include <mach/dma.h>
2010-05-18 11:59:34 +09:00
static u64 dma_dmamask = DMA_BIT_MASK ( 32 ) ;
2011-09-02 09:44:37 +09:00
struct dma_pl330_peri pdma0_peri [ 28 ] = {
{
. peri_id = ( u8 ) DMACH_UART0_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_UART0_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_UART1_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_UART1_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_UART2_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_UART2_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_UART3_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_UART3_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = DMACH_MAX ,
} , {
. peri_id = ( u8 ) DMACH_I2S0_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_I2S0_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_I2S0S_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_I2S1_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_I2S1_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_MAX ,
} , {
. peri_id = ( u8 ) DMACH_MAX ,
} , {
. peri_id = ( u8 ) DMACH_SPI0_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_SPI0_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_SPI1_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_SPI1_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_MAX ,
} , {
. peri_id = ( u8 ) DMACH_MAX ,
} , {
. peri_id = ( u8 ) DMACH_AC97_MICIN ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_AC97_PCMIN ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_AC97_PCMOUT ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_MAX ,
} , {
. peri_id = ( u8 ) DMACH_PWM ,
} , {
. peri_id = ( u8 ) DMACH_SPDIF ,
. rqtype = MEMTODEV ,
2010-05-18 11:59:34 +09:00
} ,
} ;
2011-09-02 09:44:37 +09:00
struct dma_pl330_platdata s5pv210_pdma0_pdata = {
. nr_valid_peri = ARRAY_SIZE ( pdma0_peri ) ,
. peri = pdma0_peri ,
2010-05-18 11:59:34 +09:00
} ;
2011-09-02 09:44:37 +09:00
struct amba_device s5pv210_device_pdma0 = {
. dev = {
. init_name = " dma-pl330.0 " ,
2010-05-18 11:59:34 +09:00
. dma_mask = & dma_dmamask ,
. coherent_dma_mask = DMA_BIT_MASK ( 32 ) ,
. platform_data = & s5pv210_pdma0_pdata ,
} ,
2011-09-02 09:44:37 +09:00
. res = {
. start = S5PV210_PA_PDMA0 ,
. end = S5PV210_PA_PDMA0 + SZ_4K ,
2010-05-18 11:59:34 +09:00
. flags = IORESOURCE_MEM ,
} ,
2011-09-02 09:44:37 +09:00
. irq = { IRQ_PDMA0 , NO_IRQ } ,
. periphid = 0x00041330 ,
2010-05-18 11:59:34 +09:00
} ;
2011-09-02 09:44:37 +09:00
struct dma_pl330_peri pdma1_peri [ 32 ] = {
{
. peri_id = ( u8 ) DMACH_UART0_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_UART0_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_UART1_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_UART1_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_UART2_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_UART2_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_UART3_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_UART3_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = DMACH_MAX ,
} , {
. peri_id = ( u8 ) DMACH_I2S0_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_I2S0_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_I2S0S_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_I2S1_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_I2S1_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_I2S2_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_I2S2_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_SPI0_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_SPI0_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_SPI1_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_SPI1_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_MAX ,
} , {
. peri_id = ( u8 ) DMACH_MAX ,
} , {
. peri_id = ( u8 ) DMACH_PCM0_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_PCM0_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_PCM1_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_PCM1_TX ,
. rqtype = MEMTODEV ,
} , {
. peri_id = ( u8 ) DMACH_MSM_REQ0 ,
} , {
. peri_id = ( u8 ) DMACH_MSM_REQ1 ,
} , {
. peri_id = ( u8 ) DMACH_MSM_REQ2 ,
} , {
. peri_id = ( u8 ) DMACH_MSM_REQ3 ,
} , {
. peri_id = ( u8 ) DMACH_PCM2_RX ,
. rqtype = DEVTOMEM ,
} , {
. peri_id = ( u8 ) DMACH_PCM2_TX ,
. rqtype = MEMTODEV ,
2010-05-18 11:59:34 +09:00
} ,
} ;
2011-09-02 09:44:37 +09:00
struct dma_pl330_platdata s5pv210_pdma1_pdata = {
. nr_valid_peri = ARRAY_SIZE ( pdma1_peri ) ,
. peri = pdma1_peri ,
} ;
struct amba_device s5pv210_device_pdma1 = {
. dev = {
. init_name = " dma-pl330.1 " ,
2010-05-18 11:59:34 +09:00
. dma_mask = & dma_dmamask ,
. coherent_dma_mask = DMA_BIT_MASK ( 32 ) ,
. platform_data = & s5pv210_pdma1_pdata ,
} ,
2011-09-02 09:44:37 +09:00
. res = {
. start = S5PV210_PA_PDMA1 ,
. end = S5PV210_PA_PDMA1 + SZ_4K ,
. flags = IORESOURCE_MEM ,
} ,
. irq = { IRQ_PDMA1 , NO_IRQ } ,
. periphid = 0x00041330 ,
2010-05-18 11:59:34 +09:00
} ;
static int __init s5pv210_dma_init ( void )
{
2011-09-02 09:44:37 +09:00
amba_device_register ( & s5pv210_device_pdma0 , & iomem_resource ) ;
2011-09-19 10:27:23 +09:00
amba_device_register ( & s5pv210_device_pdma1 , & iomem_resource ) ;
2010-05-18 11:59:34 +09:00
return 0 ;
}
arch_initcall ( s5pv210_dma_init ) ;