source: trunk/target/linux/s3c24xx/patches-2.6.30/010-s3c-dma.patch @ 16048

Last change on this file since 16048 was 16048, checked in by kaloz, 7 years ago

update to 2.6.30-rc7

File size: 35.7 KB
  • arch/arm/mach-s3c2410/include/mach/dma.h

    a b  
    33 * Copyright (C) 2003,2004,2006 Simtec Electronics 
    44 *      Ben Dooks <ben@simtec.co.uk> 
    55 * 
    6  * Samsung S3C241XX DMA support 
     6 * Samsung S3C24XX DMA support 
    77 * 
    88 * This program is free software; you can redistribute it and/or modify 
    99 * it under the terms of the GNU General Public License version 2 as 
     
    1313#ifndef __ASM_ARCH_DMA_H 
    1414#define __ASM_ARCH_DMA_H __FILE__ 
    1515 
     16#include <plat/dma.h> 
    1617#include <linux/sysdev.h> 
    17 #include <mach/hardware.h> 
    1818 
    1919#define MAX_DMA_TRANSFER_SIZE   0x100000 /* Data Unit is half word  */ 
    2020 
    enum dma_ch { 
    5555 
    5656/* we have 4 dma channels */ 
    5757#ifndef CONFIG_CPU_S3C2443 
    58 #define S3C2410_DMA_CHANNELS            (4) 
     58#define S3C_DMA_CHANNELS                (4) 
    5959#else 
    60 #define S3C2410_DMA_CHANNELS            (6) 
     60#define S3C_DMA_CHANNELS                (6) 
    6161#endif 
    6262 
    6363/* types */ 
    enum s3c2410_dma_state { 
    6868        S3C2410_DMA_PAUSED 
    6969}; 
    7070 
    71  
    7271/* enum s3c2410_dma_loadst 
    7372 * 
    7473 * This represents the state of the DMA engine, wrt to the loaded / running 
    enum s3c2410_dma_loadst { 
    104103        S3C2410_DMALOAD_1LOADED_1RUNNING, 
    105104}; 
    106105 
    107 enum s3c2410_dma_buffresult { 
    108         S3C2410_RES_OK, 
    109         S3C2410_RES_ERR, 
    110         S3C2410_RES_ABORT 
    111 }; 
    112  
    113 enum s3c2410_dmasrc { 
    114         S3C2410_DMASRC_HW,              /* source is memory */ 
    115         S3C2410_DMASRC_MEM              /* source is hardware */ 
    116 }; 
    117  
    118 /* enum s3c2410_chan_op 
    119  * 
    120  * operation codes passed to the DMA code by the user, and also used 
    121  * to inform the current channel owner of any changes to the system state 
    122 */ 
    123  
    124 enum s3c2410_chan_op { 
    125         S3C2410_DMAOP_START, 
    126         S3C2410_DMAOP_STOP, 
    127         S3C2410_DMAOP_PAUSE, 
    128         S3C2410_DMAOP_RESUME, 
    129         S3C2410_DMAOP_FLUSH, 
    130         S3C2410_DMAOP_TIMEOUT,          /* internal signal to handler */ 
    131         S3C2410_DMAOP_STARTED,          /* indicate channel started */ 
    132 }; 
    133106 
    134107/* flags */ 
    135108 
    enum s3c2410_chan_op { 
    137110                                            * waiting for reloads */ 
    138111#define S3C2410_DMAF_AUTOSTART    (1<<1)   /* auto-start if buffer queued */ 
    139112 
     113#define S3C2410_DMAF_CIRCULAR     (0x00)   /* circular enqueue not supp. */ 
     114 
    140115/* dma buffer */ 
    141116 
    142 struct s3c2410_dma_client { 
    143         char                *name; 
    144 }; 
     117struct s3c2410_dma_buf; 
    145118 
    146 /* s3c2410_dma_buf_s 
     119/* s3c2410_dma_buf 
    147120 * 
    148121 * internally used buffer structure to describe a queued or running 
    149122 * buffer. 
    150123*/ 
    151124 
    152 struct s3c2410_dma_buf; 
    153125struct s3c2410_dma_buf { 
    154126        struct s3c2410_dma_buf  *next; 
    155127        int                      magic;         /* magic */ 
    struct s3c2410_dma_buf { 
    161133 
    162134/* [1] is this updated for both recv/send modes? */ 
    163135 
    164 struct s3c2410_dma_chan; 
    165  
    166 /* s3c2410_dma_cbfn_t 
    167  * 
    168  * buffer callback routine type 
    169 */ 
    170  
    171 typedef void (*s3c2410_dma_cbfn_t)(struct s3c2410_dma_chan *, 
    172                                    void *buf, int size, 
    173                                    enum s3c2410_dma_buffresult result); 
    174  
    175 typedef int  (*s3c2410_dma_opfn_t)(struct s3c2410_dma_chan *, 
    176                                    enum s3c2410_chan_op ); 
    177  
    178136struct s3c2410_dma_stats { 
    179137        unsigned long           loads; 
    180138        unsigned long           timeout_longest; 
    struct s3c2410_dma_chan { 
    206164 
    207165        /* channel configuration */ 
    208166        enum s3c2410_dmasrc      source; 
     167        enum dma_ch              req_ch; 
    209168        unsigned long            dev_addr; 
    210169        unsigned long            load_timeout; 
    211170        unsigned int             flags;         /* channel flags */ 
    212         unsigned int             hw_cfg;        /* last hw config */ 
    213171 
    214172        struct s3c24xx_dma_map  *map;           /* channel hw maps */ 
    215173 
    struct s3c2410_dma_chan { 
    236194        struct sys_device       dev; 
    237195}; 
    238196 
    239 /* the currently allocated channel information */ 
    240 extern struct s3c2410_dma_chan s3c2410_chans[]; 
    241  
    242 /* note, we don't really use dma_device_t at the moment */ 
    243197typedef unsigned long dma_device_t; 
    244198 
    245 /* functions --------------------------------------------------------------- */ 
    246  
    247 /* s3c2410_dma_request 
    248  * 
    249  * request a dma channel exclusivley 
    250 */ 
    251  
    252 extern int s3c2410_dma_request(unsigned int channel, 
    253                                struct s3c2410_dma_client *, void *dev); 
    254  
    255  
    256 /* s3c2410_dma_ctrl 
    257  * 
    258  * change the state of the dma channel 
    259 */ 
    260  
    261 extern int s3c2410_dma_ctrl(unsigned int channel, enum s3c2410_chan_op op); 
    262  
    263 /* s3c2410_dma_setflags 
    264  * 
    265  * set the channel's flags to a given state 
    266 */ 
    267  
    268 extern int s3c2410_dma_setflags(unsigned int channel, 
    269                                 unsigned int flags); 
    270  
    271 /* s3c2410_dma_free 
    272  * 
    273  * free the dma channel (will also abort any outstanding operations) 
    274 */ 
    275  
    276 extern int s3c2410_dma_free(unsigned int channel, struct s3c2410_dma_client *); 
    277  
    278 /* s3c2410_dma_enqueue 
    279  * 
    280  * place the given buffer onto the queue of operations for the channel. 
    281  * The buffer must be allocated from dma coherent memory, or the Dcache/WB 
    282  * drained before the buffer is given to the DMA system. 
    283 */ 
    284  
    285 extern int s3c2410_dma_enqueue(unsigned int channel, void *id, 
    286                                dma_addr_t data, int size); 
    287  
    288 /* s3c2410_dma_config 
    289  * 
    290  * configure the dma channel 
    291 */ 
    292  
    293 extern int s3c2410_dma_config(unsigned int channel, int xferunit, int dcon); 
    294  
    295 /* s3c2410_dma_devconfig 
    296  * 
    297  * configure the device we're talking to 
    298 */ 
    299  
    300 extern int s3c2410_dma_devconfig(int channel, enum s3c2410_dmasrc source, 
    301                                  int hwcfg, unsigned long devaddr); 
    302  
    303 /* s3c2410_dma_getposition 
    304  * 
    305  * get the position that the dma transfer is currently at 
    306 */ 
    307  
    308 extern int s3c2410_dma_getposition(unsigned int channel, 
    309                                    dma_addr_t *src, dma_addr_t *dest); 
    310  
    311 extern int s3c2410_dma_set_opfn(unsigned int, s3c2410_dma_opfn_t rtn); 
    312 extern int s3c2410_dma_set_buffdone_fn(unsigned int, s3c2410_dma_cbfn_t rtn); 
    313  
    314 /* DMA Register definitions */ 
    315  
    316 #define S3C2410_DMA_DISRC       (0x00) 
    317 #define S3C2410_DMA_DISRCC      (0x04) 
    318 #define S3C2410_DMA_DIDST       (0x08) 
    319 #define S3C2410_DMA_DIDSTC      (0x0C) 
    320 #define S3C2410_DMA_DCON        (0x10) 
    321 #define S3C2410_DMA_DSTAT       (0x14) 
    322 #define S3C2410_DMA_DCSRC       (0x18) 
    323 #define S3C2410_DMA_DCDST       (0x1C) 
    324 #define S3C2410_DMA_DMASKTRIG   (0x20) 
    325 #define S3C2412_DMA_DMAREQSEL   (0x24) 
    326 #define S3C2443_DMA_DMAREQSEL   (0x24) 
    327  
    328 #define S3C2410_DISRCC_INC      (1<<0) 
    329 #define S3C2410_DISRCC_APB      (1<<1) 
    330  
    331 #define S3C2410_DMASKTRIG_STOP   (1<<2) 
    332 #define S3C2410_DMASKTRIG_ON     (1<<1) 
    333 #define S3C2410_DMASKTRIG_SWTRIG (1<<0) 
    334  
    335 #define S3C2410_DCON_DEMAND     (0<<31) 
    336 #define S3C2410_DCON_HANDSHAKE  (1<<31) 
    337 #define S3C2410_DCON_SYNC_PCLK  (0<<30) 
    338 #define S3C2410_DCON_SYNC_HCLK  (1<<30) 
    339  
    340 #define S3C2410_DCON_INTREQ     (1<<29) 
    341  
    342 #define S3C2410_DCON_CH0_XDREQ0 (0<<24) 
    343 #define S3C2410_DCON_CH0_UART0  (1<<24) 
    344 #define S3C2410_DCON_CH0_SDI    (2<<24) 
    345 #define S3C2410_DCON_CH0_TIMER  (3<<24) 
    346 #define S3C2410_DCON_CH0_USBEP1 (4<<24) 
    347  
    348 #define S3C2410_DCON_CH1_XDREQ1 (0<<24) 
    349 #define S3C2410_DCON_CH1_UART1  (1<<24) 
    350 #define S3C2410_DCON_CH1_I2SSDI (2<<24) 
    351 #define S3C2410_DCON_CH1_SPI    (3<<24) 
    352 #define S3C2410_DCON_CH1_USBEP2 (4<<24) 
    353  
    354 #define S3C2410_DCON_CH2_I2SSDO (0<<24) 
    355 #define S3C2410_DCON_CH2_I2SSDI (1<<24) 
    356 #define S3C2410_DCON_CH2_SDI    (2<<24) 
    357 #define S3C2410_DCON_CH2_TIMER  (3<<24) 
    358 #define S3C2410_DCON_CH2_USBEP3 (4<<24) 
    359  
    360 #define S3C2410_DCON_CH3_UART2  (0<<24) 
    361 #define S3C2410_DCON_CH3_SDI    (1<<24) 
    362 #define S3C2410_DCON_CH3_SPI    (2<<24) 
    363 #define S3C2410_DCON_CH3_TIMER  (3<<24) 
    364 #define S3C2410_DCON_CH3_USBEP4 (4<<24) 
    365  
    366 #define S3C2410_DCON_SRCSHIFT   (24) 
    367 #define S3C2410_DCON_SRCMASK    (7<<24) 
    368  
    369 #define S3C2410_DCON_BYTE       (0<<20) 
    370 #define S3C2410_DCON_HALFWORD   (1<<20) 
    371 #define S3C2410_DCON_WORD       (2<<20) 
    372  
    373 #define S3C2410_DCON_AUTORELOAD (0<<22) 
    374 #define S3C2410_DCON_NORELOAD   (1<<22) 
    375 #define S3C2410_DCON_HWTRIG     (1<<23) 
    376  
    377 #ifdef CONFIG_CPU_S3C2440 
    378 #define S3C2440_DIDSTC_CHKINT   (1<<2) 
    379  
    380 #define S3C2440_DCON_CH0_I2SSDO (5<<24) 
    381 #define S3C2440_DCON_CH0_PCMIN  (6<<24) 
    382  
    383 #define S3C2440_DCON_CH1_PCMOUT (5<<24) 
    384 #define S3C2440_DCON_CH1_SDI    (6<<24) 
    385  
    386 #define S3C2440_DCON_CH2_PCMIN  (5<<24) 
    387 #define S3C2440_DCON_CH2_MICIN  (6<<24) 
    388  
    389 #define S3C2440_DCON_CH3_MICIN  (5<<24) 
    390 #define S3C2440_DCON_CH3_PCMOUT (6<<24) 
    391 #endif 
    392  
    393 #ifdef CONFIG_CPU_S3C2412 
    394  
    395 #define S3C2412_DMAREQSEL_SRC(x)        ((x)<<1) 
    396  
    397 #define S3C2412_DMAREQSEL_HW            (1) 
    398  
    399 #define S3C2412_DMAREQSEL_SPI0TX        S3C2412_DMAREQSEL_SRC(0) 
    400 #define S3C2412_DMAREQSEL_SPI0RX        S3C2412_DMAREQSEL_SRC(1) 
    401 #define S3C2412_DMAREQSEL_SPI1TX        S3C2412_DMAREQSEL_SRC(2) 
    402 #define S3C2412_DMAREQSEL_SPI1RX        S3C2412_DMAREQSEL_SRC(3) 
    403 #define S3C2412_DMAREQSEL_I2STX         S3C2412_DMAREQSEL_SRC(4) 
    404 #define S3C2412_DMAREQSEL_I2SRX         S3C2412_DMAREQSEL_SRC(5) 
    405 #define S3C2412_DMAREQSEL_TIMER         S3C2412_DMAREQSEL_SRC(9) 
    406 #define S3C2412_DMAREQSEL_SDI           S3C2412_DMAREQSEL_SRC(10) 
    407 #define S3C2412_DMAREQSEL_USBEP1        S3C2412_DMAREQSEL_SRC(13) 
    408 #define S3C2412_DMAREQSEL_USBEP2        S3C2412_DMAREQSEL_SRC(14) 
    409 #define S3C2412_DMAREQSEL_USBEP3        S3C2412_DMAREQSEL_SRC(15) 
    410 #define S3C2412_DMAREQSEL_USBEP4        S3C2412_DMAREQSEL_SRC(16) 
    411 #define S3C2412_DMAREQSEL_XDREQ0        S3C2412_DMAREQSEL_SRC(17) 
    412 #define S3C2412_DMAREQSEL_XDREQ1        S3C2412_DMAREQSEL_SRC(18) 
    413 #define S3C2412_DMAREQSEL_UART0_0       S3C2412_DMAREQSEL_SRC(19) 
    414 #define S3C2412_DMAREQSEL_UART0_1       S3C2412_DMAREQSEL_SRC(20) 
    415 #define S3C2412_DMAREQSEL_UART1_0       S3C2412_DMAREQSEL_SRC(21) 
    416 #define S3C2412_DMAREQSEL_UART1_1       S3C2412_DMAREQSEL_SRC(22) 
    417 #define S3C2412_DMAREQSEL_UART2_0       S3C2412_DMAREQSEL_SRC(23) 
    418 #define S3C2412_DMAREQSEL_UART2_1       S3C2412_DMAREQSEL_SRC(24) 
    419  
    420 #endif 
    421  
    422 #define S3C2443_DMAREQSEL_SRC(x)        ((x)<<1) 
    423  
    424 #define S3C2443_DMAREQSEL_HW            (1) 
    425199 
    426 #define S3C2443_DMAREQSEL_SPI0TX        S3C2443_DMAREQSEL_SRC(0) 
    427 #define S3C2443_DMAREQSEL_SPI0RX        S3C2443_DMAREQSEL_SRC(1) 
    428 #define S3C2443_DMAREQSEL_SPI1TX        S3C2443_DMAREQSEL_SRC(2) 
    429 #define S3C2443_DMAREQSEL_SPI1RX        S3C2443_DMAREQSEL_SRC(3) 
    430 #define S3C2443_DMAREQSEL_I2STX         S3C2443_DMAREQSEL_SRC(4) 
    431 #define S3C2443_DMAREQSEL_I2SRX         S3C2443_DMAREQSEL_SRC(5) 
    432 #define S3C2443_DMAREQSEL_TIMER         S3C2443_DMAREQSEL_SRC(9) 
    433 #define S3C2443_DMAREQSEL_SDI           S3C2443_DMAREQSEL_SRC(10) 
    434 #define S3C2443_DMAREQSEL_XDREQ0        S3C2443_DMAREQSEL_SRC(17) 
    435 #define S3C2443_DMAREQSEL_XDREQ1        S3C2443_DMAREQSEL_SRC(18) 
    436 #define S3C2443_DMAREQSEL_UART0_0       S3C2443_DMAREQSEL_SRC(19) 
    437 #define S3C2443_DMAREQSEL_UART0_1       S3C2443_DMAREQSEL_SRC(20) 
    438 #define S3C2443_DMAREQSEL_UART1_0       S3C2443_DMAREQSEL_SRC(21) 
    439 #define S3C2443_DMAREQSEL_UART1_1       S3C2443_DMAREQSEL_SRC(22) 
    440 #define S3C2443_DMAREQSEL_UART2_0       S3C2443_DMAREQSEL_SRC(23) 
    441 #define S3C2443_DMAREQSEL_UART2_1       S3C2443_DMAREQSEL_SRC(24) 
    442 #define S3C2443_DMAREQSEL_UART3_0       S3C2443_DMAREQSEL_SRC(25) 
    443 #define S3C2443_DMAREQSEL_UART3_1       S3C2443_DMAREQSEL_SRC(26) 
    444 #define S3C2443_DMAREQSEL_PCMOUT        S3C2443_DMAREQSEL_SRC(27) 
    445 #define S3C2443_DMAREQSEL_PCMIN         S3C2443_DMAREQSEL_SRC(28) 
    446 #define S3C2443_DMAREQSEL_MICIN         S3C2443_DMAREQSEL_SRC(29) 
     200static int s3c_dma_has_circular(void) 
     201{ 
     202        return 0; 
     203} 
    447204 
    448205#endif /* __ASM_ARCH_DMA_H */ 
  • arch/arm/mach-s3c2442/Kconfig

    a b config CPU_S3C2442 
    1111        select S3C2410_CLOCK 
    1212        select S3C2410_GPIO 
    1313        select S3C2410_PM if PM 
     14        select S3C2440_DMA if S3C2410_DMA 
    1415        select CPU_S3C244X 
    1516        select CPU_LLSERIAL_S3C2440 
    1617        help 
  • new file arch/arm/plat-s3c/dma.c

    - +  
     1/* linux/arch/arm/plat-s3c/dma.c 
     2 * 
     3 * Copyright (c) 2003-2005,2006,2009 Simtec Electronics 
     4 *      Ben Dooks <ben@simtec.co.uk> 
     5 *      http://armlinux.simtec.co.uk/ 
     6 * 
     7 * S3C DMA core 
     8 * 
     9 * This program is free software; you can redistribute it and/or modify 
     10 * it under the terms of the GNU General Public License version 2 as 
     11 * published by the Free Software Foundation. 
     12*/ 
     13 
     14struct s3c2410_dma_buf; 
     15 
     16#include <linux/kernel.h> 
     17#include <linux/module.h> 
     18#include <linux/errno.h> 
     19 
     20#include <mach/dma.h> 
     21#include <mach/irqs.h> 
     22 
     23#include <plat/dma-plat.h> 
     24 
     25/* dma channel state information */ 
     26struct s3c2410_dma_chan s3c2410_chans[S3C_DMA_CHANNELS]; 
     27struct s3c2410_dma_chan *s3c_dma_chan_map[DMACH_MAX]; 
     28 
     29/* s3c_dma_lookup_channel 
     30 * 
     31 * change the dma channel number given into a real dma channel id 
     32*/ 
     33 
     34struct s3c2410_dma_chan *s3c_dma_lookup_channel(unsigned int channel) 
     35{ 
     36        if (channel & DMACH_LOW_LEVEL) 
     37                return &s3c2410_chans[channel & ~DMACH_LOW_LEVEL]; 
     38        else 
     39                return s3c_dma_chan_map[channel]; 
     40} 
     41 
     42/* do we need to protect the settings of the fields from 
     43 * irq? 
     44*/ 
     45 
     46int s3c2410_dma_set_opfn(unsigned int channel, s3c2410_dma_opfn_t rtn) 
     47{ 
     48        struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); 
     49 
     50        if (chan == NULL) 
     51                return -EINVAL; 
     52 
     53        pr_debug("%s: chan=%p, op rtn=%p\n", __func__, chan, rtn); 
     54 
     55        chan->op_fn = rtn; 
     56 
     57        return 0; 
     58} 
     59EXPORT_SYMBOL(s3c2410_dma_set_opfn); 
     60 
     61int s3c2410_dma_set_buffdone_fn(unsigned int channel, s3c2410_dma_cbfn_t rtn) 
     62{ 
     63        struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); 
     64 
     65        if (chan == NULL) 
     66                return -EINVAL; 
     67 
     68        pr_debug("%s: chan=%p, callback rtn=%p\n", __func__, chan, rtn); 
     69 
     70        chan->callback_fn = rtn; 
     71 
     72        return 0; 
     73} 
     74EXPORT_SYMBOL(s3c2410_dma_set_buffdone_fn); 
     75 
     76int s3c2410_dma_setflags(unsigned int channel, unsigned int flags) 
     77{ 
     78        struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); 
     79 
     80        if (chan == NULL) 
     81                return -EINVAL; 
     82 
     83        chan->flags = flags; 
     84        return 0; 
     85} 
     86EXPORT_SYMBOL(s3c2410_dma_setflags); 
  • new file arch/arm/plat-s3c/include/plat/dma-core.h

    - +  
     1/* arch/arm/plat-s3c/include/plat/dma.h 
     2 * 
     3 * Copyright 2008 Openmoko, Inc. 
     4 * Copyright 2008 Simtec Electronics 
     5 *      Ben Dooks <ben@simtec.co.uk> 
     6 *      http://armlinux.simtec.co.uk/ 
     7 * 
     8 * Samsung S3C DMA core support 
     9 * 
     10 * This program is free software; you can redistribute it and/or modify 
     11 * it under the terms of the GNU General Public License version 2 as 
     12 * published by the Free Software Foundation. 
     13*/ 
     14 
     15extern struct s3c2410_dma_chan *s3c_dma_lookup_channel(unsigned int channel); 
     16 
     17extern struct s3c2410_dma_chan *s3c_dma_chan_map[]; 
     18 
     19/* the currently allocated channel information */ 
     20extern struct s3c2410_dma_chan s3c2410_chans[]; 
     21 
     22 
  • new file arch/arm/plat-s3c/include/plat/dma.h

    - +  
     1/* arch/arm/plat-s3c/include/plat/dma.h 
     2 * 
     3 * Copyright (C) 2003,2004,2006 Simtec Electronics 
     4 *      Ben Dooks <ben@simtec.co.uk> 
     5 * 
     6 * Samsung S3C DMA support 
     7 * 
     8 * This program is free software; you can redistribute it and/or modify 
     9 * it under the terms of the GNU General Public License version 2 as 
     10 * published by the Free Software Foundation. 
     11*/ 
     12 
     13enum s3c2410_dma_buffresult { 
     14        S3C2410_RES_OK, 
     15        S3C2410_RES_ERR, 
     16        S3C2410_RES_ABORT 
     17}; 
     18 
     19enum s3c2410_dmasrc { 
     20        S3C2410_DMASRC_HW,              /* source is memory */ 
     21        S3C2410_DMASRC_MEM              /* source is hardware */ 
     22}; 
     23 
     24/* enum s3c2410_chan_op 
     25 * 
     26 * operation codes passed to the DMA code by the user, and also used 
     27 * to inform the current channel owner of any changes to the system state 
     28*/ 
     29 
     30enum s3c2410_chan_op { 
     31        S3C2410_DMAOP_START, 
     32        S3C2410_DMAOP_STOP, 
     33        S3C2410_DMAOP_PAUSE, 
     34        S3C2410_DMAOP_RESUME, 
     35        S3C2410_DMAOP_FLUSH, 
     36        S3C2410_DMAOP_TIMEOUT,          /* internal signal to handler */ 
     37        S3C2410_DMAOP_STARTED,          /* indicate channel started */ 
     38}; 
     39 
     40struct s3c2410_dma_client { 
     41        char                *name; 
     42}; 
     43 
     44struct s3c2410_dma_chan; 
     45 
     46/* s3c2410_dma_cbfn_t 
     47 * 
     48 * buffer callback routine type 
     49*/ 
     50 
     51typedef void (*s3c2410_dma_cbfn_t)(struct s3c2410_dma_chan *, 
     52                                   void *buf, int size, 
     53                                   enum s3c2410_dma_buffresult result); 
     54 
     55typedef int  (*s3c2410_dma_opfn_t)(struct s3c2410_dma_chan *, 
     56                                   enum s3c2410_chan_op ); 
     57 
     58 
     59 
     60/* s3c2410_dma_request 
     61 * 
     62 * request a dma channel exclusivley 
     63*/ 
     64 
     65extern int s3c2410_dma_request(unsigned int channel, 
     66                               struct s3c2410_dma_client *, void *dev); 
     67 
     68 
     69/* s3c2410_dma_ctrl 
     70 * 
     71 * change the state of the dma channel 
     72*/ 
     73 
     74extern int s3c2410_dma_ctrl(unsigned int channel, enum s3c2410_chan_op op); 
     75 
     76/* s3c2410_dma_setflags 
     77 * 
     78 * set the channel's flags to a given state 
     79*/ 
     80 
     81extern int s3c2410_dma_setflags(unsigned int channel, 
     82                                unsigned int flags); 
     83 
     84/* s3c2410_dma_free 
     85 * 
     86 * free the dma channel (will also abort any outstanding operations) 
     87*/ 
     88 
     89extern int s3c2410_dma_free(unsigned int channel, struct s3c2410_dma_client *); 
     90 
     91/* s3c2410_dma_enqueue 
     92 * 
     93 * place the given buffer onto the queue of operations for the channel. 
     94 * The buffer must be allocated from dma coherent memory, or the Dcache/WB 
     95 * drained before the buffer is given to the DMA system. 
     96*/ 
     97 
     98extern int s3c2410_dma_enqueue(unsigned int channel, void *id, 
     99                               dma_addr_t data, int size); 
     100 
     101 
     102/* s3c2410_dma_config 
     103 * 
     104 * configure the dma channel 
     105*/ 
     106 
     107extern int s3c2410_dma_config(unsigned int channel, int xferunit); 
     108 
     109/* s3c2410_dma_devconfig 
     110 * 
     111 * configure the device we're talking to 
     112*/ 
     113 
     114extern int s3c2410_dma_devconfig(int channel, enum s3c2410_dmasrc source, 
     115                                 unsigned long devaddr); 
     116 
     117/* s3c2410_dma_getposition 
     118 * 
     119 * get the position that the dma transfer is currently at 
     120*/ 
     121 
     122extern int s3c2410_dma_getposition(unsigned int channel, 
     123                                   dma_addr_t *src, dma_addr_t *dest); 
     124 
     125extern int s3c2410_dma_set_opfn(unsigned int, s3c2410_dma_opfn_t rtn); 
     126extern int s3c2410_dma_set_buffdone_fn(unsigned int, s3c2410_dma_cbfn_t rtn); 
     127 
     128 
  • arch/arm/plat-s3c/Kconfig

    a b config S3C_GPIO_CFG_S3C64XX 
    150150          Internal configuration to enable S3C64XX style GPIO configuration 
    151151          functions. 
    152152 
     153# DMA 
     154 
     155config S3C_DMA 
     156        bool 
     157        help 
     158          Internal configuration for S3C DMA core 
     159 
    153160# device definitions to compile in 
    154161 
    155162config S3C_DEV_HSMMC 
  • arch/arm/plat-s3c/Makefile

    a b obj-y += pwm-clock.o 
    1818obj-y                           += gpio.o 
    1919obj-y                           += gpio-config.o 
    2020 
     21# DMA support 
     22 
     23obj-$(CONFIG_S3C_DMA)           += dma.o 
     24 
    2125# PM support 
    2226 
    2327obj-$(CONFIG_PM)                += pm.o 
    obj-$(CONFIG_S3C_DEV_HSMMC1) += dev-hsmm 
    3135obj-y                           += dev-i2c0.o 
    3236obj-$(CONFIG_S3C_DEV_I2C1)      += dev-i2c1.o 
    3337obj-$(CONFIG_S3C_DEV_FB)        += dev-fb.o 
     38obj-$(CONFIG_S3C_DMA)           += dma.o 
     39 
  • arch/arm/plat-s3c24xx/dma.c

    a b  
    3131#include <asm/irq.h> 
    3232#include <mach/hardware.h> 
    3333#include <mach/dma.h> 
    34  
    3534#include <mach/map.h> 
    3635 
    37 #include <plat/dma.h> 
     36#include <plat/dma-core.h> 
     37#include <plat/regs-dma.h> 
     38#include <plat/dma-plat.h> 
    3839 
    3940/* io map for dma */ 
    4041static void __iomem *dma_base; 
    static int dma_channels; 
    4445 
    4546static struct s3c24xx_dma_selection dma_sel; 
    4647 
    47 /* dma channel state information */ 
    48 struct s3c2410_dma_chan s3c2410_chans[S3C2410_DMA_CHANNELS]; 
    4948 
    5049/* debugging functions */ 
    5150 
    dmadbg_showregs(const char *fname, int l 
    135134#define dbg_showchan(chan) do { } while(0) 
    136135#endif /* CONFIG_S3C2410_DMA_DEBUG */ 
    137136 
    138 static struct s3c2410_dma_chan *dma_chan_map[DMACH_MAX]; 
    139  
    140 /* lookup_dma_channel 
    141  * 
    142  * change the dma channel number given into a real dma channel id 
    143 */ 
    144  
    145 static struct s3c2410_dma_chan *lookup_dma_channel(unsigned int channel) 
    146 { 
    147         if (channel & DMACH_LOW_LEVEL) 
    148                 return &s3c2410_chans[channel & ~DMACH_LOW_LEVEL]; 
    149         else 
    150                 return dma_chan_map[channel]; 
    151 } 
    152  
    153137/* s3c2410_dma_stats_timeout 
    154138 * 
    155139 * Update DMA stats from timeout info 
    s3c2410_dma_waitforload(struct s3c2410_d 
    214198        return 0; 
    215199} 
    216200 
    217  
    218  
    219201/* s3c2410_dma_loadbuffer 
    220202 * 
    221203 * load a buffer, and update the channel state 
    s3c2410_dma_canload(struct s3c2410_dma_c 
    453435int s3c2410_dma_enqueue(unsigned int channel, void *id, 
    454436                        dma_addr_t data, int size) 
    455437{ 
    456         struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); 
     438        struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); 
    457439        struct s3c2410_dma_buf *buf; 
    458440        unsigned long flags; 
    459441 
    EXPORT_SYMBOL(s3c2410_dma_request); 
    804786 
    805787int s3c2410_dma_free(unsigned int channel, struct s3c2410_dma_client *client) 
    806788{ 
    807         struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); 
     789        struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); 
    808790        unsigned long flags; 
    809791 
    810792        if (chan == NULL) 
    int s3c2410_dma_free(unsigned int channe 
    836818        chan->irq_claimed = 0; 
    837819 
    838820        if (!(channel & DMACH_LOW_LEVEL)) 
    839                 dma_chan_map[channel] = NULL; 
     821                s3c_dma_chan_map[channel] = NULL; 
    840822 
    841823        local_irq_restore(flags); 
    842824 
    static int s3c2410_dma_started(struct s3 
    995977int 
    996978s3c2410_dma_ctrl(unsigned int channel, enum s3c2410_chan_op op) 
    997979{ 
    998         struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); 
     980        struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); 
    999981 
    1000982        if (chan == NULL) 
    1001983                return -EINVAL; 
    EXPORT_SYMBOL(s3c2410_dma_ctrl); 
    10381020/* s3c2410_dma_config 
    10391021 * 
    10401022 * xfersize:     size of unit in bytes (1,2,4) 
    1041  * dcon:         base value of the DCONx register 
    10421023*/ 
    10431024 
    10441025int s3c2410_dma_config(unsigned int channel, 
    1045                        int xferunit, 
    1046                        int dcon) 
     1026                       int xferunit) 
    10471027{ 
    1048         struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); 
     1028        struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); 
     1029        unsigned int dcon; 
    10491030 
    10501031        pr_debug("%s: chan=%d, xfer_unit=%d, dcon=%08x\n", 
    10511032                 __func__, channel, xferunit, dcon); 
    int s3c2410_dma_config(unsigned int chan 
    10551036 
    10561037        pr_debug("%s: Initial dcon is %08x\n", __func__, dcon); 
    10571038 
    1058         dcon |= chan->dcon & dma_sel.dcon_mask; 
     1039        dcon = chan->dcon & dma_sel.dcon_mask; 
    10591040 
    10601041        pr_debug("%s: New dcon is %08x\n", __func__, dcon); 
    10611042 
     1043        switch (chan->req_ch) { 
     1044        case DMACH_I2S_IN: 
     1045        case DMACH_I2S_OUT: 
     1046        case DMACH_PCM_IN: 
     1047        case DMACH_PCM_OUT: 
     1048        case DMACH_MIC_IN: 
     1049        default: 
     1050                dcon |= S3C2410_DCON_HANDSHAKE; 
     1051                dcon |= S3C2410_DCON_SYNC_PCLK; 
     1052                break; 
     1053 
     1054        case DMACH_SDI: 
     1055                /* note, ensure if need HANDSHAKE or not */ 
     1056                dcon |= S3C2410_DCON_SYNC_PCLK; 
     1057                break;           
     1058 
     1059        case DMACH_XD0: 
     1060        case DMACH_XD1: 
     1061                dcon |= S3C2410_DCON_HANDSHAKE; 
     1062                dcon |= S3C2410_DCON_SYNC_HCLK; 
     1063                break; 
     1064        } 
     1065 
    10621066        switch (xferunit) { 
    10631067        case 1: 
    10641068                dcon |= S3C2410_DCON_BYTE; 
    int s3c2410_dma_config(unsigned int chan 
    10891093} 
    10901094 
    10911095EXPORT_SYMBOL(s3c2410_dma_config); 
    1092  
     1096#if 0 /* moved to plat-s3c? */ 
    10931097int s3c2410_dma_setflags(unsigned int channel, unsigned int flags) 
    10941098{ 
    1095         struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); 
     1099        struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); 
    10961100 
    10971101        if (chan == NULL) 
    10981102                return -EINVAL; 
    int s3c2410_dma_setflags(unsigned int ch 
    11051109} 
    11061110 
    11071111EXPORT_SYMBOL(s3c2410_dma_setflags); 
    1108  
    1109  
    1110 /* do we need to protect the settings of the fields from 
    1111  * irq? 
    1112 */ 
    1113  
    1114 int s3c2410_dma_set_opfn(unsigned int channel, s3c2410_dma_opfn_t rtn) 
    1115 { 
    1116         struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); 
    1117  
    1118         if (chan == NULL) 
    1119                 return -EINVAL; 
    1120  
    1121         pr_debug("%s: chan=%p, op rtn=%p\n", __func__, chan, rtn); 
    1122  
    1123         chan->op_fn = rtn; 
    1124  
    1125         return 0; 
    1126 } 
    1127  
    1128 EXPORT_SYMBOL(s3c2410_dma_set_opfn); 
    1129  
    1130 int s3c2410_dma_set_buffdone_fn(unsigned int channel, s3c2410_dma_cbfn_t rtn) 
    1131 { 
    1132         struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); 
    1133  
    1134         if (chan == NULL) 
    1135                 return -EINVAL; 
    1136  
    1137         pr_debug("%s: chan=%p, callback rtn=%p\n", __func__, chan, rtn); 
    1138  
    1139         chan->callback_fn = rtn; 
    1140  
    1141         return 0; 
    1142 } 
    1143  
    1144 EXPORT_SYMBOL(s3c2410_dma_set_buffdone_fn); 
     1112#endif 
    11451113 
    11461114/* s3c2410_dma_devconfig 
    11471115 * 
    EXPORT_SYMBOL(s3c2410_dma_set_buffdone_f 
    11501118 * source:    S3C2410_DMASRC_HW: source is hardware 
    11511119 *            S3C2410_DMASRC_MEM: source is memory 
    11521120 * 
    1153  * hwcfg:     the value for xxxSTCn register, 
    1154  *            bit 0: 0=increment pointer, 1=leave pointer 
    1155  *            bit 1: 0=source is AHB, 1=source is APB 
    1156  * 
    11571121 * devaddr:   physical address of the source 
    11581122*/ 
    11591123 
    11601124int s3c2410_dma_devconfig(int channel, 
    11611125                          enum s3c2410_dmasrc source, 
    1162                           int hwcfg, 
    11631126                          unsigned long devaddr) 
    11641127{ 
    1165         struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); 
     1128        struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); 
     1129        unsigned int hwcfg; 
    11661130 
    11671131        if (chan == NULL) 
    11681132                return -EINVAL; 
    11691133 
    1170         pr_debug("%s: source=%d, hwcfg=%08x, devaddr=%08lx\n", 
    1171                  __func__, (int)source, hwcfg, devaddr); 
     1134        pr_debug("%s: source=%d, devaddr=%08lx\n", 
     1135                 __func__, (int)source, devaddr); 
    11721136 
    11731137        chan->source = source; 
    11741138        chan->dev_addr = devaddr; 
    1175         chan->hw_cfg = hwcfg; 
     1139 
     1140        switch (chan->req_ch) { 
     1141        case DMACH_XD0: 
     1142        case DMACH_XD1: 
     1143                hwcfg = 0; /* AHB */ 
     1144                break; 
     1145 
     1146        default: 
     1147                hwcfg = S3C2410_DISRCC_APB; 
     1148        } 
     1149 
     1150        /* always assume our peripheral desintation is a fixed 
     1151         * address in memory. */ 
     1152         hwcfg |= S3C2410_DISRCC_INC; 
    11761153 
    11771154        switch (source) { 
    11781155        case S3C2410_DMASRC_HW: 
    EXPORT_SYMBOL(s3c2410_dma_devconfig); 
    12191196 
    12201197int s3c2410_dma_getposition(unsigned int channel, dma_addr_t *src, dma_addr_t *dst) 
    12211198{ 
    1222         struct s3c2410_dma_chan *chan = lookup_dma_channel(channel); 
     1199        struct s3c2410_dma_chan *chan = s3c_dma_lookup_channel(channel); 
    12231200 
    12241201        if (chan == NULL) 
    12251202                return -EINVAL; 
    static int s3c2410_dma_resume(struct sys 
    12781255 
    12791256        printk(KERN_INFO "dma%d: restoring configuration\n", cp->number); 
    12801257 
    1281         s3c2410_dma_config(no, cp->xfer_unit, cp->dcon); 
    1282         s3c2410_dma_devconfig(no, cp->source, cp->hw_cfg, cp->dev_addr); 
     1258        s3c2410_dma_config(no, cp->xfer_unit); 
     1259        s3c2410_dma_devconfig(no, cp->source, cp->dev_addr); 
    12831260 
    12841261        /* re-select the dma source for this channel */ 
    12851262 
    static struct s3c2410_dma_chan *s3c2410_ 
    14761453 found: 
    14771454        dmach = &s3c2410_chans[ch]; 
    14781455        dmach->map = ch_map; 
    1479         dma_chan_map[channel] = dmach; 
     1456        dmach->req_ch = channel; 
     1457        s3c_dma_chan_map[channel] = dmach; 
    14801458 
    14811459        /* select the channel */ 
    14821460 
  • deleted file rch/arm/plat-s3c24xx/include/plat/dma.h

    + -  
    1 /* linux/include/asm-arm/plat-s3c24xx/dma.h 
    2  * 
    3  * Copyright (C) 2006 Simtec Electronics 
    4  *      Ben Dooks <ben@simtec.co.uk> 
    5  * 
    6  * Samsung S3C24XX DMA support 
    7  * 
    8  * This program is free software; you can redistribute it and/or modify 
    9  * it under the terms of the GNU General Public License version 2 as 
    10  * published by the Free Software Foundation. 
    11 */ 
    12  
    13 extern struct sysdev_class dma_sysclass; 
    14 extern struct s3c2410_dma_chan s3c2410_chans[S3C2410_DMA_CHANNELS]; 
    15  
    16 #define DMA_CH_VALID            (1<<31) 
    17 #define DMA_CH_NEVER            (1<<30) 
    18  
    19 struct s3c24xx_dma_addr { 
    20         unsigned long           from; 
    21         unsigned long           to; 
    22 }; 
    23  
    24 /* struct s3c24xx_dma_map 
    25  * 
    26  * this holds the mapping information for the channel selected 
    27  * to be connected to the specified device 
    28 */ 
    29  
    30 struct s3c24xx_dma_map { 
    31         const char              *name; 
    32         struct s3c24xx_dma_addr  hw_addr; 
    33  
    34         unsigned long            channels[S3C2410_DMA_CHANNELS]; 
    35         unsigned long            channels_rx[S3C2410_DMA_CHANNELS]; 
    36 }; 
    37  
    38 struct s3c24xx_dma_selection { 
    39         struct s3c24xx_dma_map  *map; 
    40         unsigned long            map_size; 
    41         unsigned long            dcon_mask; 
    42  
    43         void    (*select)(struct s3c2410_dma_chan *chan, 
    44                           struct s3c24xx_dma_map *map); 
    45  
    46         void    (*direction)(struct s3c2410_dma_chan *chan, 
    47                              struct s3c24xx_dma_map *map, 
    48                              enum s3c2410_dmasrc dir); 
    49 }; 
    50  
    51 extern int s3c24xx_dma_init_map(struct s3c24xx_dma_selection *sel); 
    52  
    53 /* struct s3c24xx_dma_order_ch 
    54  * 
    55  * channel map for one of the `enum dma_ch` dma channels. the list 
    56  * entry contains a set of low-level channel numbers, orred with 
    57  * DMA_CH_VALID, which are checked in the order in the array. 
    58 */ 
    59  
    60 struct s3c24xx_dma_order_ch { 
    61         unsigned int    list[S3C2410_DMA_CHANNELS];     /* list of channels */ 
    62         unsigned int    flags;                          /* flags */ 
    63 }; 
    64  
    65 /* struct s3c24xx_dma_order 
    66  * 
    67  * information provided by either the core or the board to give the 
    68  * dma system a hint on how to allocate channels 
    69 */ 
    70  
    71 struct s3c24xx_dma_order { 
    72         struct s3c24xx_dma_order_ch     channels[DMACH_MAX]; 
    73 }; 
    74  
    75 extern int s3c24xx_dma_order_set(struct s3c24xx_dma_order *map); 
    76  
    77 /* DMA init code, called from the cpu support code */ 
    78  
    79 extern int s3c2410_dma_init(void); 
    80  
    81 extern int s3c24xx_dma_init(unsigned int channels, unsigned int irq, 
    82                             unsigned int stride); 
  • new file arch/arm/plat-s3c24xx/include/plat/dma-plat.h

    - +  
     1/* linux/arch/arm/plat-s3c24xx/include/plat/dma-plat.h 
     2 * 
     3 * Copyright (C) 2006 Simtec Electronics 
     4 *      Ben Dooks <ben@simtec.co.uk> 
     5 * 
     6 * Samsung S3C24XX DMA support 
     7 * 
     8 * This program is free software; you can redistribute it and/or modify 
     9 * it under the terms of the GNU General Public License version 2 as 
     10 * published by the Free Software Foundation. 
     11*/ 
     12 
     13#include <plat/dma-core.h> 
     14 
     15extern struct sysdev_class dma_sysclass; 
     16extern struct s3c2410_dma_chan s3c2410_chans[S3C_DMA_CHANNELS]; 
     17 
     18#define DMA_CH_VALID            (1<<31) 
     19#define DMA_CH_NEVER            (1<<30) 
     20 
     21struct s3c24xx_dma_addr { 
     22        unsigned long           from; 
     23        unsigned long           to; 
     24}; 
     25 
     26/* struct s3c24xx_dma_map 
     27 * 
     28 * this holds the mapping information for the channel selected 
     29 * to be connected to the specified device 
     30*/ 
     31 
     32struct s3c24xx_dma_map { 
     33        const char              *name; 
     34        struct s3c24xx_dma_addr  hw_addr; 
     35 
     36        unsigned long            channels[S3C_DMA_CHANNELS]; 
     37        unsigned long            channels_rx[S3C_DMA_CHANNELS]; 
     38}; 
     39 
     40struct s3c24xx_dma_selection { 
     41        struct s3c24xx_dma_map  *map; 
     42        unsigned long            map_size; 
     43        unsigned long            dcon_mask; 
     44 
     45        void    (*select)(struct s3c2410_dma_chan *chan, 
     46                          struct s3c24xx_dma_map *map); 
     47 
     48        void    (*direction)(struct s3c2410_dma_chan *chan, 
     49                             struct s3c24xx_dma_map *map, 
     50                             enum s3c2410_dmasrc dir); 
     51}; 
     52 
     53extern int s3c24xx_dma_init_map(struct s3c24xx_dma_selection *sel); 
     54 
     55/* struct s3c24xx_dma_order_ch 
     56 * 
     57 * channel map for one of the `enum dma_ch` dma channels. the list 
     58 * entry contains a set of low-level channel numbers, orred with 
     59 * DMA_CH_VALID, which are checked in the order in the array. 
     60*/ 
     61 
     62struct s3c24xx_dma_order_ch { 
     63        unsigned int    list[S3C_DMA_CHANNELS]; /* list of channels */ 
     64        unsigned int    flags;                          /* flags */ 
     65}; 
     66 
     67/* struct s3c24xx_dma_order 
     68 * 
     69 * information provided by either the core or the board to give the 
     70 * dma system a hint on how to allocate channels 
     71*/ 
     72 
     73struct s3c24xx_dma_order { 
     74        struct s3c24xx_dma_order_ch     channels[DMACH_MAX]; 
     75}; 
     76 
     77extern int s3c24xx_dma_order_set(struct s3c24xx_dma_order *map); 
     78 
     79/* DMA init code, called from the cpu support code */ 
     80 
     81extern int s3c2410_dma_init(void); 
     82 
     83extern int s3c24xx_dma_init(unsigned int channels, unsigned int irq, 
     84                            unsigned int stride); 
  • new file arch/arm/plat-s3c24xx/include/plat/regs-dma.h

    - +  
     1/* arch/arm/mach-s3c2410/include/mach/dma.h 
     2 * 
     3 * Copyright (C) 2003,2004,2006 Simtec Electronics 
     4 *      Ben Dooks <ben@simtec.co.uk> 
     5 * 
     6 * Samsung S3C24XX DMA support 
     7 * 
     8 * This program is free software; you can redistribute it and/or modify 
     9 * it under the terms of the GNU General Public License version 2 as 
     10 * published by the Free Software Foundation. 
     11*/ 
     12 
     13/* DMA Register definitions */ 
     14 
     15#define S3C2410_DMA_DISRC               (0x00) 
     16#define S3C2410_DMA_DISRCC              (0x04) 
     17#define S3C2410_DMA_DIDST               (0x08) 
     18#define S3C2410_DMA_DIDSTC              (0x0C) 
     19#define S3C2410_DMA_DCON                (0x10) 
     20#define S3C2410_DMA_DSTAT               (0x14) 
     21#define S3C2410_DMA_DCSRC               (0x18) 
     22#define S3C2410_DMA_DCDST               (0x1C) 
     23#define S3C2410_DMA_DMASKTRIG           (0x20) 
     24#define S3C2412_DMA_DMAREQSEL           (0x24) 
     25#define S3C2443_DMA_DMAREQSEL           (0x24) 
     26 
     27#define S3C2410_DISRCC_INC              (1<<0) 
     28#define S3C2410_DISRCC_APB              (1<<1) 
     29 
     30#define S3C2410_DMASKTRIG_STOP          (1<<2) 
     31#define S3C2410_DMASKTRIG_ON            (1<<1) 
     32#define S3C2410_DMASKTRIG_SWTRIG        (1<<0) 
     33 
     34#define S3C2410_DCON_DEMAND             (0<<31) 
     35#define S3C2410_DCON_HANDSHAKE          (1<<31) 
     36#define S3C2410_DCON_SYNC_PCLK          (0<<30) 
     37#define S3C2410_DCON_SYNC_HCLK          (1<<30) 
     38 
     39#define S3C2410_DCON_INTREQ             (1<<29) 
     40 
     41#define S3C2410_DCON_CH0_XDREQ0         (0<<24) 
     42#define S3C2410_DCON_CH0_UART0          (1<<24) 
     43#define S3C2410_DCON_CH0_SDI            (2<<24) 
     44#define S3C2410_DCON_CH0_TIMER          (3<<24) 
     45#define S3C2410_DCON_CH0_USBEP1         (4<<24) 
     46 
     47#define S3C2410_DCON_CH1_XDREQ1         (0<<24) 
     48#define S3C2410_DCON_CH1_UART1          (1<<24) 
     49#define S3C2410_DCON_CH1_I2SSDI         (2<<24) 
     50#define S3C2410_DCON_CH1_SPI            (3<<24) 
     51#define S3C2410_DCON_CH1_USBEP2         (4<<24) 
     52 
     53#define S3C2410_DCON_CH2_I2SSDO         (0<<24) 
     54#define S3C2410_DCON_CH2_I2SSDI         (1<<24) 
     55#define S3C2410_DCON_CH2_SDI            (2<<24) 
     56#define S3C2410_DCON_CH2_TIMER          (3<<24) 
     57#define S3C2410_DCON_CH2_USBEP3         (4<<24) 
     58 
     59#define S3C2410_DCON_CH3_UART2          (0<<24) 
     60#define S3C2410_DCON_CH3_SDI            (1<<24) 
     61#define S3C2410_DCON_CH3_SPI            (2<<24) 
     62#define S3C2410_DCON_CH3_TIMER          (3<<24) 
     63#define S3C2410_DCON_CH3_USBEP4         (4<<24) 
     64 
     65#define S3C2410_DCON_SRCSHIFT           (24) 
     66#define S3C2410_DCON_SRCMASK            (7<<24) 
     67 
     68#define S3C2410_DCON_BYTE               (0<<20) 
     69#define S3C2410_DCON_HALFWORD           (1<<20) 
     70#define S3C2410_DCON_WORD               (2<<20) 
     71 
     72#define S3C2410_DCON_AUTORELOAD         (0<<22) 
     73#define S3C2410_DCON_NORELOAD           (1<<22) 
     74#define S3C2410_DCON_HWTRIG             (1<<23) 
     75 
     76#if defined(CONFIG_CPU_S3C2440) || defined(CONFIG_CPU_S3C2442) 
     77#define S3C2440_DIDSTC_CHKINT           (1<<2) 
     78 
     79#define S3C2440_DCON_CH0_I2SSDO         (5<<24) 
     80#define S3C2440_DCON_CH0_PCMIN          (6<<24) 
     81 
     82#define S3C2440_DCON_CH1_PCMOUT         (5<<24) 
     83#define S3C2440_DCON_CH1_SDI            (6<<24) 
     84 
     85#define S3C2440_DCON_CH2_PCMIN          (5<<24) 
     86#define S3C2440_DCON_CH2_MICIN          (6<<24) 
     87 
     88#define S3C2440_DCON_CH3_MICIN          (5<<24) 
     89#define S3C2440_DCON_CH3_PCMOUT         (6<<24) 
     90#endif 
     91 
     92#ifdef CONFIG_CPU_S3C2412 
     93 
     94#define S3C2412_DMAREQSEL_SRC(x)        ((x)<<1) 
     95 
     96#define S3C2412_DMAREQSEL_HW            (1) 
     97 
     98#define S3C2412_DMAREQSEL_SPI0TX        S3C2412_DMAREQSEL_SRC(0) 
     99#define S3C2412_DMAREQSEL_SPI0RX        S3C2412_DMAREQSEL_SRC(1) 
     100#define S3C2412_DMAREQSEL_SPI1TX        S3C2412_DMAREQSEL_SRC(2) 
     101#define S3C2412_DMAREQSEL_SPI1RX        S3C2412_DMAREQSEL_SRC(3) 
     102#define S3C2412_DMAREQSEL_I2STX         S3C2412_DMAREQSEL_SRC(4) 
     103#define S3C2412_DMAREQSEL_I2SRX         S3C2412_DMAREQSEL_SRC(5) 
     104#define S3C2412_DMAREQSEL_TIMER         S3C2412_DMAREQSEL_SRC(9) 
     105#define S3C2412_DMAREQSEL_SDI           S3C2412_DMAREQSEL_SRC(10) 
     106#define S3C2412_DMAREQSEL_USBEP1        S3C2412_DMAREQSEL_SRC(13) 
     107#define S3C2412_DMAREQSEL_USBEP2        S3C2412_DMAREQSEL_SRC(14) 
     108#define S3C2412_DMAREQSEL_USBEP3        S3C2412_DMAREQSEL_SRC(15) 
     109#define S3C2412_DMAREQSEL_USBEP4        S3C2412_DMAREQSEL_SRC(16) 
     110#define S3C2412_DMAREQSEL_XDREQ0        S3C2412_DMAREQSEL_SRC(17) 
     111#define S3C2412_DMAREQSEL_XDREQ1        S3C2412_DMAREQSEL_SRC(18) 
     112#define S3C2412_DMAREQSEL_UART0_0       S3C2412_DMAREQSEL_SRC(19) 
     113#define S3C2412_DMAREQSEL_UART0_1       S3C2412_DMAREQSEL_SRC(20) 
     114#define S3C2412_DMAREQSEL_UART1_0       S3C2412_DMAREQSEL_SRC(21) 
     115#define S3C2412_DMAREQSEL_UART1_1       S3C2412_DMAREQSEL_SRC(22) 
     116#define S3C2412_DMAREQSEL_UART2_0       S3C2412_DMAREQSEL_SRC(23) 
     117#define S3C2412_DMAREQSEL_UART2_1       S3C2412_DMAREQSEL_SRC(24) 
     118 
     119#endif 
     120 
     121#define S3C2443_DMAREQSEL_SRC(x)        ((x)<<1) 
     122 
     123#define S3C2443_DMAREQSEL_HW            (1) 
     124 
     125#define S3C2443_DMAREQSEL_SPI0TX        S3C2443_DMAREQSEL_SRC(0) 
     126#define S3C2443_DMAREQSEL_SPI0RX        S3C2443_DMAREQSEL_SRC(1) 
     127#define S3C2443_DMAREQSEL_SPI1TX        S3C2443_DMAREQSEL_SRC(2) 
     128#define S3C2443_DMAREQSEL_SPI1RX        S3C2443_DMAREQSEL_SRC(3) 
     129#define S3C2443_DMAREQSEL_I2STX         S3C2443_DMAREQSEL_SRC(4) 
     130#define S3C2443_DMAREQSEL_I2SRX         S3C2443_DMAREQSEL_SRC(5) 
     131#define S3C2443_DMAREQSEL_TIMER         S3C2443_DMAREQSEL_SRC(9) 
     132#define S3C2443_DMAREQSEL_SDI           S3C2443_DMAREQSEL_SRC(10) 
     133#define S3C2443_DMAREQSEL_XDREQ0        S3C2443_DMAREQSEL_SRC(17) 
     134#define S3C2443_DMAREQSEL_XDREQ1        S3C2443_DMAREQSEL_SRC(18) 
     135#define S3C2443_DMAREQSEL_UART0_0       S3C2443_DMAREQSEL_SRC(19) 
     136#define S3C2443_DMAREQSEL_UART0_1       S3C2443_DMAREQSEL_SRC(20) 
     137#define S3C2443_DMAREQSEL_UART1_0       S3C2443_DMAREQSEL_SRC(21) 
     138#define S3C2443_DMAREQSEL_UART1_1       S3C2443_DMAREQSEL_SRC(22) 
     139#define S3C2443_DMAREQSEL_UART2_0       S3C2443_DMAREQSEL_SRC(23) 
     140#define S3C2443_DMAREQSEL_UART2_1       S3C2443_DMAREQSEL_SRC(24) 
     141#define S3C2443_DMAREQSEL_UART3_0       S3C2443_DMAREQSEL_SRC(25) 
     142#define S3C2443_DMAREQSEL_UART3_1       S3C2443_DMAREQSEL_SRC(26) 
     143#define S3C2443_DMAREQSEL_PCMOUT        S3C2443_DMAREQSEL_SRC(27) 
     144#define S3C2443_DMAREQSEL_PCMIN         S3C2443_DMAREQSEL_SRC(28) 
     145#define S3C2443_DMAREQSEL_MICIN         S3C2443_DMAREQSEL_SRC(29) 
  • arch/arm/plat-s3c24xx/Kconfig

    a b config PM_SIMTEC 
    7171config S3C2410_DMA 
    7272        bool "S3C2410 DMA support" 
    7373        depends on ARCH_S3C2410 
     74        select S3C_DMA 
    7475        help 
    7576          S3C2410 DMA support. This is needed for drivers like sound which 
    7677          use the S3C2410's DMA system to move data to and from the 
  • arch/arm/mach-s3c2410/dma.c

    a b  
    1717#include <linux/sysdev.h> 
    1818#include <linux/serial_core.h> 
    1919 
     20#include <mach/map.h> 
    2021#include <mach/dma.h> 
    2122 
    2223#include <plat/cpu.h> 
    23 #include <plat/dma.h> 
     24#include <plat/dma-plat.h> 
    2425 
    2526#include <plat/regs-serial.h> 
    2627#include <mach/regs-gpio.h> 
    2728#include <plat/regs-ac97.h> 
     29#include <plat/regs-dma.h> 
    2830#include <mach/regs-mem.h> 
    2931#include <mach/regs-lcd.h> 
    3032#include <mach/regs-sdi.h> 
  • arch/arm/mach-s3c2440/dma.c

    a b  
    1717#include <linux/sysdev.h> 
    1818#include <linux/serial_core.h> 
    1919 
     20#include <mach/map.h> 
    2021#include <mach/dma.h> 
    2122 
    22 #include <plat/dma.h> 
     23#include <plat/dma-plat.h> 
    2324#include <plat/cpu.h> 
    2425 
    2526#include <plat/regs-serial.h> 
    2627#include <mach/regs-gpio.h> 
    2728#include <plat/regs-ac97.h> 
     29#include <plat/regs-dma.h> 
    2830#include <mach/regs-mem.h> 
    2931#include <mach/regs-lcd.h> 
    3032#include <mach/regs-sdi.h> 
Note: See TracBrowser for help on using the repository browser.