Path: blob/master/arch/sh/include/cpu-sh4/cpu/dma-register.h
17531 views
/*1* SH4 CPU-specific DMA definitions, used by both DMA drivers2*3* Copyright (C) 2010 Guennadi Liakhovetski <[email protected]>4*5* This program is free software; you can redistribute it and/or modify6* it under the terms of the GNU General Public License version 2 as7* published by the Free Software Foundation.8*/9#ifndef CPU_DMA_REGISTER_H10#define CPU_DMA_REGISTER_H1112/* SH7751/7760/7780 DMA IRQ sources */1314#ifdef CONFIG_CPU_SH4A1516#define DMAOR_INIT DMAOR_DME1718#if defined(CONFIG_CPU_SUBTYPE_SH7343) || \19defined(CONFIG_CPU_SUBTYPE_SH7730)20#define CHCR_TS_LOW_MASK 0x0000001821#define CHCR_TS_LOW_SHIFT 322#define CHCR_TS_HIGH_MASK 023#define CHCR_TS_HIGH_SHIFT 024#elif defined(CONFIG_CPU_SUBTYPE_SH7722) || \25defined(CONFIG_CPU_SUBTYPE_SH7724) || \26defined(CONFIG_CPU_SUBTYPE_SH7786)27#define CHCR_TS_LOW_MASK 0x0000001828#define CHCR_TS_LOW_SHIFT 329#define CHCR_TS_HIGH_MASK 0x0030000030#define CHCR_TS_HIGH_SHIFT (20 - 2) /* 2 bits for shifted low TS */31#elif defined(CONFIG_CPU_SUBTYPE_SH7763) || \32defined(CONFIG_CPU_SUBTYPE_SH7764)33#define CHCR_TS_LOW_MASK 0x0000001834#define CHCR_TS_LOW_SHIFT 335#define CHCR_TS_HIGH_MASK 036#define CHCR_TS_HIGH_SHIFT 037#elif defined(CONFIG_CPU_SUBTYPE_SH7723)38#define CHCR_TS_LOW_MASK 0x0000001839#define CHCR_TS_LOW_SHIFT 340#define CHCR_TS_HIGH_MASK 041#define CHCR_TS_HIGH_SHIFT 042#elif defined(CONFIG_CPU_SUBTYPE_SH7757)43#define CHCR_TS_LOW_MASK 0x0000001844#define CHCR_TS_LOW_SHIFT 345#define CHCR_TS_HIGH_MASK 0x0010000046#define CHCR_TS_HIGH_SHIFT (20 - 2) /* 2 bits for shifted low TS */47#elif defined(CONFIG_CPU_SUBTYPE_SH7780)48#define CHCR_TS_LOW_MASK 0x0000001849#define CHCR_TS_LOW_SHIFT 350#define CHCR_TS_HIGH_MASK 051#define CHCR_TS_HIGH_SHIFT 052#else /* SH7785 */53#define CHCR_TS_LOW_MASK 0x0000001854#define CHCR_TS_LOW_SHIFT 355#define CHCR_TS_HIGH_MASK 056#define CHCR_TS_HIGH_SHIFT 057#endif5859/* Transmit sizes and respective CHCR register values */60enum {61XMIT_SZ_8BIT = 0,62XMIT_SZ_16BIT = 1,63XMIT_SZ_32BIT = 2,64XMIT_SZ_64BIT = 7,65XMIT_SZ_128BIT = 3,66XMIT_SZ_256BIT = 4,67XMIT_SZ_128BIT_BLK = 0xb,68XMIT_SZ_256BIT_BLK = 0xc,69};7071/* log2(size / 8) - used to calculate number of transfers */72#define TS_SHIFT { \73[XMIT_SZ_8BIT] = 0, \74[XMIT_SZ_16BIT] = 1, \75[XMIT_SZ_32BIT] = 2, \76[XMIT_SZ_64BIT] = 3, \77[XMIT_SZ_128BIT] = 4, \78[XMIT_SZ_256BIT] = 5, \79[XMIT_SZ_128BIT_BLK] = 4, \80[XMIT_SZ_256BIT_BLK] = 5, \81}8283#define TS_INDEX2VAL(i) ((((i) & 3) << CHCR_TS_LOW_SHIFT) | \84(((i) & 0xc) << CHCR_TS_HIGH_SHIFT))8586#else /* CONFIG_CPU_SH4A */8788#define DMAOR_INIT (0x8000 | DMAOR_DME)8990#define CHCR_TS_LOW_MASK 0x7091#define CHCR_TS_LOW_SHIFT 492#define CHCR_TS_HIGH_MASK 093#define CHCR_TS_HIGH_SHIFT 09495/* Transmit sizes and respective CHCR register values */96enum {97XMIT_SZ_8BIT = 1,98XMIT_SZ_16BIT = 2,99XMIT_SZ_32BIT = 3,100XMIT_SZ_64BIT = 0,101XMIT_SZ_256BIT = 4,102};103104/* log2(size / 8) - used to calculate number of transfers */105#define TS_SHIFT { \106[XMIT_SZ_8BIT] = 0, \107[XMIT_SZ_16BIT] = 1, \108[XMIT_SZ_32BIT] = 2, \109[XMIT_SZ_64BIT] = 3, \110[XMIT_SZ_256BIT] = 5, \111}112113#define TS_INDEX2VAL(i) (((i) & 7) << CHCR_TS_LOW_SHIFT)114115#endif /* CONFIG_CPU_SH4A */116117#endif118119120