133 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * arch/sh/include/asm/dma-sh.h
 | |
|  *
 | |
|  * Copyright (C) 2000  Takashi YOSHII
 | |
|  * Copyright (C) 2003  Paul Mundt
 | |
|  *
 | |
|  * This file is subject to the terms and conditions of the GNU General Public
 | |
|  * License.  See the file "COPYING" in the main directory of this archive
 | |
|  * for more details.
 | |
|  */
 | |
| #ifndef __DMA_SH_H
 | |
| #define __DMA_SH_H
 | |
| 
 | |
| #include <asm/dma.h>
 | |
| #include <cpu/dma.h>
 | |
| 
 | |
| /* DMAOR contorl: The DMAOR access size is different by CPU.*/
 | |
| #if defined(CONFIG_CPU_SUBTYPE_SH7723)	|| \
 | |
|     defined(CONFIG_CPU_SUBTYPE_SH7724)	|| \
 | |
|     defined(CONFIG_CPU_SUBTYPE_SH7780)	|| \
 | |
|     defined(CONFIG_CPU_SUBTYPE_SH7785)
 | |
| #define dmaor_read_reg(n) \
 | |
|     (n ? ctrl_inw(SH_DMAC_BASE1 + DMAOR) \
 | |
| 	: ctrl_inw(SH_DMAC_BASE0 + DMAOR))
 | |
| #define dmaor_write_reg(n, data) \
 | |
|     (n ? ctrl_outw(data, SH_DMAC_BASE1 + DMAOR) \
 | |
|     : ctrl_outw(data, SH_DMAC_BASE0 + DMAOR))
 | |
| #else /* Other CPU */
 | |
| #define dmaor_read_reg(n) ctrl_inw(SH_DMAC_BASE0 + DMAOR)
 | |
| #define dmaor_write_reg(n, data) ctrl_outw(data, SH_DMAC_BASE0 + DMAOR)
 | |
| #endif
 | |
| 
 | |
| static int dmte_irq_map[] __maybe_unused = {
 | |
| #if (MAX_DMA_CHANNELS >= 4)
 | |
|     DMTE0_IRQ,
 | |
|     DMTE0_IRQ + 1,
 | |
|     DMTE0_IRQ + 2,
 | |
|     DMTE0_IRQ + 3,
 | |
| #endif
 | |
| #if (MAX_DMA_CHANNELS >= 6)
 | |
|     DMTE4_IRQ,
 | |
|     DMTE4_IRQ + 1,
 | |
| #endif
 | |
| #if (MAX_DMA_CHANNELS >= 8)
 | |
|     DMTE6_IRQ,
 | |
|     DMTE6_IRQ + 1,
 | |
| #endif
 | |
| #if (MAX_DMA_CHANNELS >= 12)
 | |
|     DMTE8_IRQ,
 | |
|     DMTE9_IRQ,
 | |
|     DMTE10_IRQ,
 | |
|     DMTE11_IRQ,
 | |
| #endif
 | |
| };
 | |
| 
 | |
| /* Definitions for the SuperH DMAC */
 | |
| #define REQ_L	0x00000000
 | |
| #define REQ_E	0x00080000
 | |
| #define RACK_H	0x00000000
 | |
| #define RACK_L	0x00040000
 | |
| #define ACK_R	0x00000000
 | |
| #define ACK_W	0x00020000
 | |
| #define ACK_H	0x00000000
 | |
| #define ACK_L	0x00010000
 | |
| #define DM_INC	0x00004000
 | |
| #define DM_DEC	0x00008000
 | |
| #define SM_INC	0x00001000
 | |
| #define SM_DEC	0x00002000
 | |
| #define RS_IN	0x00000200
 | |
| #define RS_OUT	0x00000300
 | |
| #define TS_BLK	0x00000040
 | |
| #define TM_BUR	0x00000020
 | |
| #define CHCR_DE 0x00000001
 | |
| #define CHCR_TE 0x00000002
 | |
| #define CHCR_IE 0x00000004
 | |
| 
 | |
| /* DMAOR definitions */
 | |
| #define DMAOR_AE	0x00000004
 | |
| #define DMAOR_NMIF	0x00000002
 | |
| #define DMAOR_DME	0x00000001
 | |
| 
 | |
| /*
 | |
|  * Define the default configuration for dual address memory-memory transfer.
 | |
|  * The 0x400 value represents auto-request, external->external.
 | |
|  */
 | |
| #define RS_DUAL	(DM_INC | SM_INC | 0x400 | TS_32)
 | |
| 
 | |
| /* DMA base address */
 | |
| static u32 dma_base_addr[] __maybe_unused = {
 | |
| #if (MAX_DMA_CHANNELS >= 4)
 | |
| 	SH_DMAC_BASE0 + 0x00,	/* channel 0 */
 | |
| 	SH_DMAC_BASE0 + 0x10,
 | |
| 	SH_DMAC_BASE0 + 0x20,
 | |
| 	SH_DMAC_BASE0 + 0x30,
 | |
| #endif
 | |
| #if (MAX_DMA_CHANNELS >= 6)
 | |
| 	SH_DMAC_BASE0 + 0x50,
 | |
| 	SH_DMAC_BASE0 + 0x60,
 | |
| #endif
 | |
| #if (MAX_DMA_CHANNELS >= 8)
 | |
| 	SH_DMAC_BASE1 + 0x00,
 | |
| 	SH_DMAC_BASE1 + 0x10,
 | |
| #endif
 | |
| #if (MAX_DMA_CHANNELS >= 12)
 | |
| 	SH_DMAC_BASE1 + 0x20,
 | |
| 	SH_DMAC_BASE1 + 0x30,
 | |
| 	SH_DMAC_BASE1 + 0x50,
 | |
| 	SH_DMAC_BASE1 + 0x60, /* channel 11 */
 | |
| #endif
 | |
| };
 | |
| 
 | |
| /* DMA register */
 | |
| #define SAR     0x00
 | |
| #define DAR     0x04
 | |
| #define TCR     0x08
 | |
| #define CHCR    0x0C
 | |
| #define DMAOR	0x40
 | |
| 
 | |
| /*
 | |
|  * for dma engine
 | |
|  *
 | |
|  * SuperH DMA mode
 | |
|  */
 | |
| #define SHDMA_MIX_IRQ	(1 << 1)
 | |
| #define SHDMA_DMAOR1	(1 << 2)
 | |
| #define SHDMA_DMAE1		(1 << 3)
 | |
| 
 | |
| struct sh_dmae_pdata {
 | |
| 	unsigned int mode;
 | |
| };
 | |
| 
 | |
| #endif /* __DMA_SH_H */
 |