diff options
author | Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com> | 2009-03-10 04:26:49 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-03-10 04:26:49 -0400 |
commit | 71b973a42c5456824c8712e00659d9616d395919 (patch) | |
tree | 1367c85de45159c66752a93fc062a6f67f616607 /arch/sh/include/cpu-sh4 | |
parent | ae68df5635a191c7edb75f5c1c1406353cb24a9f (diff) |
sh: dma-sh updates for multi IRQ and new SH-4A CPUs.
This adds DMA support for newer SH-4A CPUs, particularly SH7763/64/80/85.
This also enables multi IRQ support for platforms that have multiple
vectors bound to the same IRQ source.
Signed-off-by: Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
Signed-off-by: Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/include/cpu-sh4')
-rw-r--r-- | arch/sh/include/cpu-sh4/cpu/dma-sh4a.h | 94 | ||||
-rw-r--r-- | arch/sh/include/cpu-sh4/cpu/dma-sh7780.h | 39 | ||||
-rw-r--r-- | arch/sh/include/cpu-sh4/cpu/dma.h | 30 |
3 files changed, 108 insertions, 55 deletions
diff --git a/arch/sh/include/cpu-sh4/cpu/dma-sh4a.h b/arch/sh/include/cpu-sh4/cpu/dma-sh4a.h new file mode 100644 index 000000000000..0ed5178fed69 --- /dev/null +++ b/arch/sh/include/cpu-sh4/cpu/dma-sh4a.h | |||
@@ -0,0 +1,94 @@ | |||
1 | #ifndef __ASM_SH_CPU_SH4_DMA_SH7780_H | ||
2 | #define __ASM_SH_CPU_SH4_DMA_SH7780_H | ||
3 | |||
4 | #if defined(CONFIG_CPU_SUBTYPE_SH7343) || \ | ||
5 | defined(CONFIG_CPU_SUBTYPE_SH7722) || \ | ||
6 | defined(CONFIG_CPU_SUBTYPE_SH7730) | ||
7 | #define DMTE0_IRQ 48 | ||
8 | #define DMTE4_IRQ 76 | ||
9 | #define DMAE0_IRQ 78 /* DMA Error IRQ*/ | ||
10 | #define SH_DMAC_BASE0 0xFE008020 | ||
11 | #define SH_DMARS_BASE 0xFE009000 | ||
12 | #elif defined(CONFIG_CPU_SUBTYPE_SH7763) || \ | ||
13 | defined(CONFIG_CPU_SUBTYPE_SH7764) | ||
14 | #define DMTE0_IRQ 34 | ||
15 | #define DMTE4_IRQ 44 | ||
16 | #define DMAE0_IRQ 38 | ||
17 | #define SH_DMAC_BASE0 0xFF608020 | ||
18 | #define SH_DMARS_BASE 0xFF609000 | ||
19 | #elif defined(CONFIG_CPU_SUBTYPE_SH7723) | ||
20 | #define DMTE0_IRQ 48 /* DMAC0A*/ | ||
21 | #define DMTE4_IRQ 40 /* DMAC0B */ | ||
22 | #define DMTE6_IRQ 42 | ||
23 | #define DMTE8_IRQ 76 /* DMAC1A */ | ||
24 | #define DMTE9_IRQ 77 | ||
25 | #define DMTE10_IRQ 72 /* DMAC1B */ | ||
26 | #define DMTE11_IRQ 73 | ||
27 | #define DMAE0_IRQ 78 /* DMA Error IRQ*/ | ||
28 | #define DMAE1_IRQ 74 /* DMA Error IRQ*/ | ||
29 | #define SH_DMAC_BASE0 0xFE008020 | ||
30 | #define SH_DMAC_BASE1 0xFDC08020 | ||
31 | #define SH_DMARS_BASE 0xFDC09000 | ||
32 | #elif defined(CONFIG_CPU_SUBTYPE_SH7780) | ||
33 | #define DMTE0_IRQ 34 | ||
34 | #define DMTE4_IRQ 44 | ||
35 | #define DMTE6_IRQ 46 | ||
36 | #define DMTE8_IRQ 92 | ||
37 | #define DMTE9_IRQ 93 | ||
38 | #define DMTE10_IRQ 94 | ||
39 | #define DMTE11_IRQ 95 | ||
40 | #define DMAE0_IRQ 38 /* DMA Error IRQ */ | ||
41 | #define SH_DMAC_BASE0 0xFC808020 | ||
42 | #define SH_DMAC_BASE1 0xFC818020 | ||
43 | #define SH_DMARS_BASE 0xFC809000 | ||
44 | #else /* SH7785 */ | ||
45 | #define DMTE0_IRQ 33 | ||
46 | #define DMTE4_IRQ 37 | ||
47 | #define DMTE6_IRQ 52 | ||
48 | #define DMTE8_IRQ 54 | ||
49 | #define DMTE9_IRQ 55 | ||
50 | #define DMTE10_IRQ 56 | ||
51 | #define DMTE11_IRQ 57 | ||
52 | #define DMAE0_IRQ 39 /* DMA Error IRQ0 */ | ||
53 | #define DMAE1_IRQ 58 /* DMA Error IRQ1 */ | ||
54 | #define SH_DMAC_BASE0 0xFC808020 | ||
55 | #define SH_DMAC_BASE1 0xFCC08020 | ||
56 | #define SH_DMARS_BASE 0xFC809000 | ||
57 | #endif | ||
58 | |||
59 | #define REQ_HE 0x000000C0 | ||
60 | #define REQ_H 0x00000080 | ||
61 | #define REQ_LE 0x00000040 | ||
62 | #define TM_BURST 0x0000020 | ||
63 | #define TS_8 0x00000000 | ||
64 | #define TS_16 0x00000008 | ||
65 | #define TS_32 0x00000010 | ||
66 | #define TS_16BLK 0x00000018 | ||
67 | #define TS_32BLK 0x00100000 | ||
68 | |||
69 | /* | ||
70 | * The SuperH DMAC supports a number of transmit sizes, we list them here, | ||
71 | * with their respective values as they appear in the CHCR registers. | ||
72 | * | ||
73 | * Defaults to a 64-bit transfer size. | ||
74 | */ | ||
75 | enum { | ||
76 | XMIT_SZ_8BIT, | ||
77 | XMIT_SZ_16BIT, | ||
78 | XMIT_SZ_32BIT, | ||
79 | XMIT_SZ_128BIT, | ||
80 | XMIT_SZ_256BIT, | ||
81 | }; | ||
82 | |||
83 | /* | ||
84 | * The DMA count is defined as the number of bytes to transfer. | ||
85 | */ | ||
86 | static unsigned int ts_shift[] __maybe_unused = { | ||
87 | [XMIT_SZ_8BIT] = 0, | ||
88 | [XMIT_SZ_16BIT] = 1, | ||
89 | [XMIT_SZ_32BIT] = 2, | ||
90 | [XMIT_SZ_128BIT] = 4, | ||
91 | [XMIT_SZ_256BIT] = 5, | ||
92 | }; | ||
93 | |||
94 | #endif /* __ASM_SH_CPU_SH4_DMA_SH7780_H */ | ||
diff --git a/arch/sh/include/cpu-sh4/cpu/dma-sh7780.h b/arch/sh/include/cpu-sh4/cpu/dma-sh7780.h deleted file mode 100644 index 71b426a6e482..000000000000 --- a/arch/sh/include/cpu-sh4/cpu/dma-sh7780.h +++ /dev/null | |||
@@ -1,39 +0,0 @@ | |||
1 | #ifndef __ASM_SH_CPU_SH4_DMA_SH7780_H | ||
2 | #define __ASM_SH_CPU_SH4_DMA_SH7780_H | ||
3 | |||
4 | #define REQ_HE 0x000000C0 | ||
5 | #define REQ_H 0x00000080 | ||
6 | #define REQ_LE 0x00000040 | ||
7 | #define TM_BURST 0x0000020 | ||
8 | #define TS_8 0x00000000 | ||
9 | #define TS_16 0x00000008 | ||
10 | #define TS_32 0x00000010 | ||
11 | #define TS_16BLK 0x00000018 | ||
12 | #define TS_32BLK 0x00100000 | ||
13 | |||
14 | /* | ||
15 | * The SuperH DMAC supports a number of transmit sizes, we list them here, | ||
16 | * with their respective values as they appear in the CHCR registers. | ||
17 | * | ||
18 | * Defaults to a 64-bit transfer size. | ||
19 | */ | ||
20 | enum { | ||
21 | XMIT_SZ_8BIT, | ||
22 | XMIT_SZ_16BIT, | ||
23 | XMIT_SZ_32BIT, | ||
24 | XMIT_SZ_128BIT, | ||
25 | XMIT_SZ_256BIT, | ||
26 | }; | ||
27 | |||
28 | /* | ||
29 | * The DMA count is defined as the number of bytes to transfer. | ||
30 | */ | ||
31 | static unsigned int ts_shift[] __maybe_unused = { | ||
32 | [XMIT_SZ_8BIT] = 0, | ||
33 | [XMIT_SZ_16BIT] = 1, | ||
34 | [XMIT_SZ_32BIT] = 2, | ||
35 | [XMIT_SZ_128BIT] = 4, | ||
36 | [XMIT_SZ_256BIT] = 5, | ||
37 | }; | ||
38 | |||
39 | #endif /* __ASM_SH_CPU_SH4_DMA_SH7780_H */ | ||
diff --git a/arch/sh/include/cpu-sh4/cpu/dma.h b/arch/sh/include/cpu-sh4/cpu/dma.h index 235b7cd1fc9a..bcb30246e85c 100644 --- a/arch/sh/include/cpu-sh4/cpu/dma.h +++ b/arch/sh/include/cpu-sh4/cpu/dma.h | |||
@@ -1,31 +1,29 @@ | |||
1 | #ifndef __ASM_CPU_SH4_DMA_H | 1 | #ifndef __ASM_CPU_SH4_DMA_H |
2 | #define __ASM_CPU_SH4_DMA_H | 2 | #define __ASM_CPU_SH4_DMA_H |
3 | 3 | ||
4 | #define DMAOR_INIT ( 0x8000 | DMAOR_DME ) | ||
5 | |||
6 | /* SH7751/7760/7780 DMA IRQ sources */ | 4 | /* SH7751/7760/7780 DMA IRQ sources */ |
7 | #define DMTE0_IRQ 34 | ||
8 | #define DMTE1_IRQ 35 | ||
9 | #define DMTE2_IRQ 36 | ||
10 | #define DMTE3_IRQ 37 | ||
11 | #define DMTE4_IRQ 44 | ||
12 | #define DMTE5_IRQ 45 | ||
13 | #define DMTE6_IRQ 46 | ||
14 | #define DMTE7_IRQ 47 | ||
15 | #define DMAE_IRQ 38 | ||
16 | 5 | ||
17 | #ifdef CONFIG_CPU_SH4A | 6 | #ifdef CONFIG_CPU_SH4A |
18 | #define SH_DMAC_BASE 0xfc808020 | ||
19 | 7 | ||
8 | #define DMAOR_INIT (DMAOR_DME) | ||
20 | #define CHCR_TS_MASK 0x18 | 9 | #define CHCR_TS_MASK 0x18 |
21 | #define CHCR_TS_SHIFT 3 | 10 | #define CHCR_TS_SHIFT 3 |
22 | 11 | ||
23 | #include <cpu/dma-sh7780.h> | 12 | #include <cpu/dma-sh4a.h> |
24 | #else | 13 | #else /* CONFIG_CPU_SH4A */ |
25 | #define SH_DMAC_BASE 0xffa00000 | 14 | /* |
15 | * SH7750/SH7751/SH7760 | ||
16 | */ | ||
17 | #define DMTE0_IRQ 34 | ||
18 | #define DMTE4_IRQ 44 | ||
19 | #define DMTE6_IRQ 46 | ||
20 | #define DMAE0_IRQ 38 | ||
26 | 21 | ||
22 | #define DMAOR_INIT (0x8000|DMAOR_DME) | ||
23 | #define SH_DMAC_BASE0 0xffa00000 | ||
24 | #define SH_DMAC_BASE1 0xffa00070 | ||
27 | /* Definitions for the SuperH DMAC */ | 25 | /* Definitions for the SuperH DMAC */ |
28 | #define TM_BURST 0x0000080 | 26 | #define TM_BURST 0x00000080 |
29 | #define TS_8 0x00000010 | 27 | #define TS_8 0x00000010 |
30 | #define TS_16 0x00000020 | 28 | #define TS_16 0x00000020 |
31 | #define TS_32 0x00000030 | 29 | #define TS_32 0x00000030 |