aboutsummaryrefslogtreecommitdiffstats
path: root/arch/cris/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2010-08-08 13:08:26 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2010-08-08 13:08:26 -0400
commit53bcef60633086ad73683d01a4ef9ca678484d2d (patch)
tree8b14cc031124d0aa0da6cd3b60115bc7eaa80061 /arch/cris/include
parent4fd6c6bf83cb16321e9902b00e2af79054f4e0d6 (diff)
parent85d9865721c62a551547984e6cc8bd3ba732e294 (diff)
Merge branch 'for-linus' of git://www.jni.nu/cris
* 'for-linus' of git://www.jni.nu/cris: (51 commits) CRIS: Fix alignment problem for older ld CRIS: Always dump registers for segfaulting process. CRIS: Add config for pausing a seg-faulting process CRIS: Don't take faults while in_atomic CRIS: Fixup lookup for delay slot faults CRIS: Discard exit.text and .data at runtime CRIS: Add cache aligned and read mostly data sections CRIS: Return something from profile write CRIS: Add ARTPEC-3 and timestamps for sync-serial CRIS: Better ARTPEC-3 support for gpio CRIS: Add include guard CRIS: Better handling of pinmux settings CRIS: New DMA defines for ARTPEC-3 CRIS: __do_strncpy_from_user: Don't read the byte beyond the nil CRIS: Pagetable for ARTPEC-3 CRIS: Machine dependent memmap.h CRIS: Check if pointer is set before using it CRIS: Machine dependent dma.h CRIS: Define __read_mostly for CRISv32 CRIS: Discard .note.gnu.build-id section ...
Diffstat (limited to 'arch/cris/include')
-rw-r--r--arch/cris/include/arch-v32/arch/cache.h2
-rw-r--r--arch/cris/include/arch-v32/arch/dma.h80
-rw-r--r--arch/cris/include/arch-v32/arch/io.h20
-rw-r--r--arch/cris/include/arch-v32/arch/memmap.h25
-rw-r--r--arch/cris/include/arch-v32/arch/pgtable.h8
-rw-r--r--arch/cris/include/arch-v32/arch/uaccess.h7
-rw-r--r--arch/cris/include/arch-v32/mach-a3/mach/dma.h27
-rw-r--r--arch/cris/include/arch-v32/mach-a3/mach/startup.inc28
-rw-r--r--arch/cris/include/arch-v32/mach-fs/mach/dma.h79
-rw-r--r--arch/cris/include/arch-v32/mach-fs/mach/memmap.h24
-rw-r--r--arch/cris/include/arch-v32/mach-fs/mach/startup.inc5
-rw-r--r--arch/cris/include/asm/etraxgpio.h96
-rw-r--r--arch/cris/include/asm/sync_serial.h27
13 files changed, 292 insertions, 136 deletions
diff --git a/arch/cris/include/arch-v32/arch/cache.h b/arch/cris/include/arch-v32/arch/cache.h
index dfc73050e6b4..1de779f4f240 100644
--- a/arch/cris/include/arch-v32/arch/cache.h
+++ b/arch/cris/include/arch-v32/arch/cache.h
@@ -7,6 +7,8 @@
7#define L1_CACHE_BYTES 32 7#define L1_CACHE_BYTES 32
8#define L1_CACHE_SHIFT 5 8#define L1_CACHE_SHIFT 5
9 9
10#define __read_mostly __attribute__((__section__(".data.read_mostly")))
11
10void flush_dma_list(dma_descr_data *descr); 12void flush_dma_list(dma_descr_data *descr);
11void flush_dma_descr(dma_descr_data *descr, int flush_buf); 13void flush_dma_descr(dma_descr_data *descr, int flush_buf);
12 14
diff --git a/arch/cris/include/arch-v32/arch/dma.h b/arch/cris/include/arch-v32/arch/dma.h
index 3674081389fd..61906153a9af 100644
--- a/arch/cris/include/arch-v32/arch/dma.h
+++ b/arch/cris/include/arch-v32/arch/dma.h
@@ -1,79 +1 @@
1#ifndef _ASM_ARCH_CRIS_DMA_H #include "mach/dma.h"
2#define _ASM_ARCH_CRIS_DMA_H
3
4/* Defines for using and allocating dma channels. */
5
6#define MAX_DMA_CHANNELS 10
7
8#define NETWORK_ETH0_TX_DMA_NBR 0 /* Ethernet 0 out. */
9#define NETWORK_ETH0 RX_DMA_NBR 1 /* Ethernet 0 in. */
10
11#define IO_PROC_DMA0_TX_DMA_NBR 2 /* IO processor DMA0 out. */
12#define IO_PROC_DMA0_RX_DMA_NBR 3 /* IO processor DMA0 in. */
13
14#define ATA_TX_DMA_NBR 2 /* ATA interface out. */
15#define ATA_RX_DMA_NBR 3 /* ATA interface in. */
16
17#define ASYNC_SER2_TX_DMA_NBR 2 /* Asynchronous serial port 2 out. */
18#define ASYNC_SER2_RX_DMA_NBR 3 /* Asynchronous serial port 2 in. */
19
20#define IO_PROC_DMA1_TX_DMA_NBR 4 /* IO processor DMA1 out. */
21#define IO_PROC_DMA1_RX_DMA_NBR 5 /* IO processor DMA1 in. */
22
23#define ASYNC_SER1_TX_DMA_NBR 4 /* Asynchronous serial port 1 out. */
24#define ASYNC_SER1_RX_DMA_NBR 5 /* Asynchronous serial port 1 in. */
25
26#define SYNC_SER0_TX_DMA_NBR 4 /* Synchronous serial port 0 out. */
27#define SYNC_SER0_RX_DMA_NBR 5 /* Synchronous serial port 0 in. */
28
29#define EXTDMA0_TX_DMA_NBR 6 /* External DMA 0 out. */
30#define EXTDMA1_RX_DMA_NBR 7 /* External DMA 1 in. */
31
32#define ASYNC_SER0_TX_DMA_NBR 6 /* Asynchronous serial port 0 out. */
33#define ASYNC_SER0_RX_DMA_NBR 7 /* Asynchronous serial port 0 in. */
34
35#define SYNC_SER1_TX_DMA_NBR 6 /* Synchronous serial port 1 out. */
36#define SYNC_SER1_RX_DMA_NBR 7 /* Synchronous serial port 1 in. */
37
38#define NETWORK_ETH1_TX_DMA_NBR 6 /* Ethernet 1 out. */
39#define NETWORK_ETH1_RX_DMA_NBR 7 /* Ethernet 1 in. */
40
41#define EXTDMA2_TX_DMA_NBR 8 /* External DMA 2 out. */
42#define EXTDMA3_RX_DMA_NBR 9 /* External DMA 3 in. */
43
44#define STRCOP_TX_DMA_NBR 8 /* Stream co-processor out. */
45#define STRCOP_RX_DMA_NBR 9 /* Stream co-processor in. */
46
47#define ASYNC_SER3_TX_DMA_NBR 8 /* Asynchronous serial port 3 out. */
48#define ASYNC_SER3_RX_DMA_NBR 9 /* Asynchronous serial port 3 in. */
49
50enum dma_owner
51{
52 dma_eth0,
53 dma_eth1,
54 dma_iop0,
55 dma_iop1,
56 dma_ser0,
57 dma_ser1,
58 dma_ser2,
59 dma_ser3,
60 dma_sser0,
61 dma_sser1,
62 dma_ata,
63 dma_strp,
64 dma_ext0,
65 dma_ext1,
66 dma_ext2,
67 dma_ext3
68};
69
70int crisv32_request_dma(unsigned int dmanr, const char * device_id,
71 unsigned options, unsigned bandwidth, enum dma_owner owner);
72void crisv32_free_dma(unsigned int dmanr);
73
74/* Masks used by crisv32_request_dma options: */
75#define DMA_VERBOSE_ON_ERROR 1
76#define DMA_PANIC_ON_ERROR (2|DMA_VERBOSE_ON_ERROR)
77#define DMA_INT_MEM 4
78
79#endif /* _ASM_ARCH_CRIS_DMA_H */
diff --git a/arch/cris/include/arch-v32/arch/io.h b/arch/cris/include/arch-v32/arch/io.h
index 72024452cea9..adc5484351bf 100644
--- a/arch/cris/include/arch-v32/arch/io.h
+++ b/arch/cris/include/arch-v32/arch/io.h
@@ -46,10 +46,12 @@ static inline void crisv32_io_set(struct crisv32_iopin *iopin, int val)
46 unsigned long flags; 46 unsigned long flags;
47 spin_lock_irqsave(&iopin->port->lock, flags); 47 spin_lock_irqsave(&iopin->port->lock, flags);
48 48
49 if (val) 49 if (iopin->port->data) {
50 *iopin->port->data |= iopin->bit; 50 if (val)
51 else 51 *iopin->port->data |= iopin->bit;
52 *iopin->port->data &= ~iopin->bit; 52 else
53 *iopin->port->data &= ~iopin->bit;
54 }
53 55
54 spin_unlock_irqrestore(&iopin->port->lock, flags); 56 spin_unlock_irqrestore(&iopin->port->lock, flags);
55} 57}
@@ -60,10 +62,12 @@ static inline void crisv32_io_set_dir(struct crisv32_iopin* iopin,
60 unsigned long flags; 62 unsigned long flags;
61 spin_lock_irqsave(&iopin->port->lock, flags); 63 spin_lock_irqsave(&iopin->port->lock, flags);
62 64
63 if (dir == crisv32_io_dir_in) 65 if (iopin->port->oe) {
64 *iopin->port->oe &= ~iopin->bit; 66 if (dir == crisv32_io_dir_in)
65 else 67 *iopin->port->oe &= ~iopin->bit;
66 *iopin->port->oe |= iopin->bit; 68 else
69 *iopin->port->oe |= iopin->bit;
70 }
67 71
68 spin_unlock_irqrestore(&iopin->port->lock, flags); 72 spin_unlock_irqrestore(&iopin->port->lock, flags);
69} 73}
diff --git a/arch/cris/include/arch-v32/arch/memmap.h b/arch/cris/include/arch-v32/arch/memmap.h
index d29df5644d3e..81985c0a6789 100644
--- a/arch/cris/include/arch-v32/arch/memmap.h
+++ b/arch/cris/include/arch-v32/arch/memmap.h
@@ -1,24 +1 @@
1#ifndef _ASM_ARCH_MEMMAP_H #include <mach/memmap.h>
2#define _ASM_ARCH_MEMMAP_H
3
4#define MEM_CSE0_START (0x00000000)
5#define MEM_CSE0_SIZE (0x04000000)
6#define MEM_CSE1_START (0x04000000)
7#define MEM_CSE1_SIZE (0x04000000)
8#define MEM_CSR0_START (0x08000000)
9#define MEM_CSR1_START (0x0c000000)
10#define MEM_CSP0_START (0x10000000)
11#define MEM_CSP1_START (0x14000000)
12#define MEM_CSP2_START (0x18000000)
13#define MEM_CSP3_START (0x1c000000)
14#define MEM_CSP4_START (0x20000000)
15#define MEM_CSP5_START (0x24000000)
16#define MEM_CSP6_START (0x28000000)
17#define MEM_CSP7_START (0x2c000000)
18#define MEM_INTMEM_START (0x38000000)
19#define MEM_INTMEM_SIZE (0x00020000)
20#define MEM_DRAM_START (0x40000000)
21
22#define MEM_NON_CACHEABLE (0x80000000)
23
24#endif
diff --git a/arch/cris/include/arch-v32/arch/pgtable.h b/arch/cris/include/arch-v32/arch/pgtable.h
index 08cb7ff7e4e7..c1051a8da33d 100644
--- a/arch/cris/include/arch-v32/arch/pgtable.h
+++ b/arch/cris/include/arch-v32/arch/pgtable.h
@@ -2,8 +2,16 @@
2#define _ASM_CRIS_ARCH_PGTABLE_H 2#define _ASM_CRIS_ARCH_PGTABLE_H
3 3
4/* Define the kernels virtual memory area. */ 4/* Define the kernels virtual memory area. */
5
6/* See head.S for differences between ARTPEC-3 and ETRAX FS. */
7#ifdef CONFIG_CRIS_MACH_ARTPEC3
8#define VMALLOC_START KSEG_E
9#define VMALLOC_END KSEG_F
10#else
5#define VMALLOC_START KSEG_D 11#define VMALLOC_START KSEG_D
6#define VMALLOC_END KSEG_E 12#define VMALLOC_END KSEG_E
13#endif
14
7#define VMALLOC_VMADDR(x) ((unsigned long)(x)) 15#define VMALLOC_VMADDR(x) ((unsigned long)(x))
8 16
9#endif /* _ASM_CRIS_ARCH_PGTABLE_H */ 17#endif /* _ASM_CRIS_ARCH_PGTABLE_H */
diff --git a/arch/cris/include/arch-v32/arch/uaccess.h b/arch/cris/include/arch-v32/arch/uaccess.h
index 6b207f1b6622..3196019706cb 100644
--- a/arch/cris/include/arch-v32/arch/uaccess.h
+++ b/arch/cris/include/arch-v32/arch/uaccess.h
@@ -122,14 +122,14 @@ __do_strncpy_from_user(char *dst, const char *src, long count)
122 __asm__ __volatile__ ( 122 __asm__ __volatile__ (
123 " move.d %3,%0\n" 123 " move.d %3,%0\n"
124 "5: move.b [%2+],$acr\n" 124 "5: move.b [%2+],$acr\n"
125 "1: beq 2f\n" 125 "1: beq 6f\n"
126 " move.b $acr,[%1+]\n" 126 " move.b $acr,[%1+]\n"
127 127
128 " subq 1,%0\n" 128 " subq 1,%0\n"
129 "2: bne 1b\n" 129 "2: bne 1b\n"
130 " move.b [%2+],$acr\n" 130 " move.b [%2+],$acr\n"
131 131
132 " sub.d %3,%0\n" 132 "6: sub.d %3,%0\n"
133 " neg.d %0,%0\n" 133 " neg.d %0,%0\n"
134 "3:\n" 134 "3:\n"
135 " .section .fixup,\"ax\"\n" 135 " .section .fixup,\"ax\"\n"
@@ -140,8 +140,7 @@ __do_strncpy_from_user(char *dst, const char *src, long count)
140 /* The address for a fault at the first move is trivial. 140 /* The address for a fault at the first move is trivial.
141 The address for a fault at the second move is that of 141 The address for a fault at the second move is that of
142 the preceding branch insn, since the move insn is in 142 the preceding branch insn, since the move insn is in
143 its delay-slot. That address is also a branch 143 its delay-slot. Just so you don't get confused... */
144 target. Just so you don't get confused... */
145 " .previous\n" 144 " .previous\n"
146 " .section __ex_table,\"a\"\n" 145 " .section __ex_table,\"a\"\n"
147 " .dword 5b,4b\n" 146 " .dword 5b,4b\n"
diff --git a/arch/cris/include/arch-v32/mach-a3/mach/dma.h b/arch/cris/include/arch-v32/mach-a3/mach/dma.h
index 9e8eb13b601d..f01dca1ad108 100644
--- a/arch/cris/include/arch-v32/mach-a3/mach/dma.h
+++ b/arch/cris/include/arch-v32/mach-a3/mach/dma.h
@@ -5,6 +5,33 @@
5 5
6#define MAX_DMA_CHANNELS 12 /* 8 and 10 not used. */ 6#define MAX_DMA_CHANNELS 12 /* 8 and 10 not used. */
7 7
8#define NETWORK_ETH_TX_DMA_NBR 0 /* Ethernet 0 out. */
9#define NETWORK_ETH_RX_DMA_NBR 1 /* Ethernet 0 in. */
10
11#define IO_PROC_DMA_TX_DMA_NBR 4 /* IO processor DMA0 out. */
12#define IO_PROC_DMA_RX_DMA_NBR 5 /* IO processor DMA0 in. */
13
14#define ASYNC_SER3_TX_DMA_NBR 2 /* Asynchronous serial port 3 out. */
15#define ASYNC_SER3_RX_DMA_NBR 3 /* Asynchronous serial port 3 in. */
16
17#define ASYNC_SER2_TX_DMA_NBR 6 /* Asynchronous serial port 2 out. */
18#define ASYNC_SER2_RX_DMA_NBR 7 /* Asynchronous serial port 2 in. */
19
20#define ASYNC_SER1_TX_DMA_NBR 4 /* Asynchronous serial port 1 out. */
21#define ASYNC_SER1_RX_DMA_NBR 5 /* Asynchronous serial port 1 in. */
22
23#define SYNC_SER_TX_DMA_NBR 6 /* Synchronous serial port 0 out. */
24#define SYNC_SER_RX_DMA_NBR 7 /* Synchronous serial port 0 in. */
25
26#define ASYNC_SER0_TX_DMA_NBR 0 /* Asynchronous serial port 0 out. */
27#define ASYNC_SER0_RX_DMA_NBR 1 /* Asynchronous serial port 0 in. */
28
29#define STRCOP_TX_DMA_NBR 2 /* Stream co-processor out. */
30#define STRCOP_RX_DMA_NBR 3 /* Stream co-processor in. */
31
32#define dma_eth0 dma_eth
33#define dma_eth1 dma_eth
34
8enum dma_owner { 35enum dma_owner {
9 dma_eth, 36 dma_eth,
10 dma_ser0, 37 dma_ser0,
diff --git a/arch/cris/include/arch-v32/mach-a3/mach/startup.inc b/arch/cris/include/arch-v32/mach-a3/mach/startup.inc
index 2f23e5e16f4a..2d52bcc96ed5 100644
--- a/arch/cris/include/arch-v32/mach-a3/mach/startup.inc
+++ b/arch/cris/include/arch-v32/mach-a3/mach/startup.inc
@@ -1,9 +1,19 @@
1#ifndef STARTUP_INC_INCLUDED
2#define STARTUP_INC_INCLUDED
3
1#include <hwregs/asm/reg_map_asm.h> 4#include <hwregs/asm/reg_map_asm.h>
2#include <hwregs/asm/gio_defs_asm.h> 5#include <hwregs/asm/gio_defs_asm.h>
3#include <hwregs/asm/pio_defs_asm.h> 6#include <hwregs/asm/pio_defs_asm.h>
4#include <hwregs/asm/clkgen_defs_asm.h> 7#include <hwregs/asm/clkgen_defs_asm.h>
5#include <hwregs/asm/pinmux_defs_asm.h> 8#include <hwregs/asm/pinmux_defs_asm.h>
6 9
10 .macro GIO_SET_P BITS, OUTREG
11 bmi 1f ; btstq: bit -> N flag
12 nop
13 or.d \BITS, \OUTREG
141:
15 .endm
16
7 .macro GIO_INIT 17 .macro GIO_INIT
8 move.d CONFIG_ETRAX_DEF_GIO_PA_OUT, $r0 18 move.d CONFIG_ETRAX_DEF_GIO_PA_OUT, $r0
9 move.d REG_ADDR(gio, regi_gio, rw_pa_dout), $r1 19 move.d REG_ADDR(gio, regi_gio, rw_pa_dout), $r1
@@ -32,10 +42,23 @@
32 move.d 0xFFFFFFFF, $r0 42 move.d 0xFFFFFFFF, $r0
33 move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pa), $r1 43 move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pa), $r1
34 move.d $r0, [$r1] 44 move.d $r0, [$r1]
35 move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pb), $r1
36 move.d $r0, [$r1]
37 move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pc), $r1 45 move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pc), $r1
38 move.d $r0, [$r1] 46 move.d $r0, [$r1]
47
48 ;; If eth_mdio, eth, geth bits are set in hwprot, don't
49 ;; set them to gpio, as this means they have been configured
50 ;; earlier and shouldn't be changed.
51 move.d 0xFC000000, $r2 ; pins 25..0 are eth_mdio, eth, geth
52 move.d REG_ADDR(pinmux, regi_pinmux, rw_hwprot), $r1
53 move.d [$r1], $r0
54 btstq REG_BIT(pinmux, rw_hwprot, eth), $r0
55 GIO_SET_P 0x00FFFF00, $r2 ;; pins 8..23 are eth
56 btstq REG_BIT(pinmux, rw_hwprot, eth_mdio), $r0
57 GIO_SET_P 0x03000000, $r2 ;; pins 24..25 are eth_mdio
58 btstq REG_BIT(pinmux, rw_hwprot, geth), $r0
59 GIO_SET_P 0x000000FF, $r2 ;; pins 0..7 are geth
60 move.d REG_ADDR(pinmux, regi_pinmux, rw_gio_pb), $r1
61 move.d $r2, [$r1]
39 .endm 62 .endm
40 63
41 .macro START_CLOCKS 64 .macro START_CLOCKS
@@ -58,3 +81,4 @@
58 move.d CONFIG_ETRAX_PIO_CE2_CFG, $r1 81 move.d CONFIG_ETRAX_PIO_CE2_CFG, $r1
59 move.d $r1, [$r0] 82 move.d $r1, [$r0]
60 .endm 83 .endm
84#endif
diff --git a/arch/cris/include/arch-v32/mach-fs/mach/dma.h b/arch/cris/include/arch-v32/mach-fs/mach/dma.h
new file mode 100644
index 000000000000..a8c59292586a
--- /dev/null
+++ b/arch/cris/include/arch-v32/mach-fs/mach/dma.h
@@ -0,0 +1,79 @@
1#ifndef _ASM_ARCH_CRIS_DMA_H
2#define _ASM_ARCH_CRIS_DMA_H
3
4/* Defines for using and allocating dma channels. */
5
6#define MAX_DMA_CHANNELS 10
7
8#define NETWORK_ETH0_TX_DMA_NBR 0 /* Ethernet 0 out. */
9#define NETWORK_ETH0 RX_DMA_NBR 1 /* Ethernet 0 in. */
10
11#define IO_PROC_DMA0_TX_DMA_NBR 2 /* IO processor DMA0 out. */
12#define IO_PROC_DMA0_RX_DMA_NBR 3 /* IO processor DMA0 in. */
13
14#define ATA_TX_DMA_NBR 2 /* ATA interface out. */
15#define ATA_RX_DMA_NBR 3 /* ATA interface in. */
16
17#define ASYNC_SER2_TX_DMA_NBR 2 /* Asynchronous serial port 2 out. */
18#define ASYNC_SER2_RX_DMA_NBR 3 /* Asynchronous serial port 2 in. */
19
20#define IO_PROC_DMA1_TX_DMA_NBR 4 /* IO processor DMA1 out. */
21#define IO_PROC_DMA1_RX_DMA_NBR 5 /* IO processor DMA1 in. */
22
23#define ASYNC_SER1_TX_DMA_NBR 4 /* Asynchronous serial port 1 out. */
24#define ASYNC_SER1_RX_DMA_NBR 5 /* Asynchronous serial port 1 in. */
25
26#define SYNC_SER0_TX_DMA_NBR 4 /* Synchronous serial port 0 out. */
27#define SYNC_SER0_RX_DMA_NBR 5 /* Synchronous serial port 0 in. */
28
29#define EXTDMA0_TX_DMA_NBR 6 /* External DMA 0 out. */
30#define EXTDMA1_RX_DMA_NBR 7 /* External DMA 1 in. */
31
32#define ASYNC_SER0_TX_DMA_NBR 6 /* Asynchronous serial port 0 out. */
33#define ASYNC_SER0_RX_DMA_NBR 7 /* Asynchronous serial port 0 in. */
34
35#define SYNC_SER1_TX_DMA_NBR 6 /* Synchronous serial port 1 out. */
36#define SYNC_SER1_RX_DMA_NBR 7 /* Synchronous serial port 1 in. */
37
38#define NETWORK_ETH1_TX_DMA_NBR 6 /* Ethernet 1 out. */
39#define NETWORK_ETH1_RX_DMA_NBR 7 /* Ethernet 1 in. */
40
41#define EXTDMA2_TX_DMA_NBR 8 /* External DMA 2 out. */
42#define EXTDMA3_RX_DMA_NBR 9 /* External DMA 3 in. */
43
44#define STRCOP_TX_DMA_NBR 8 /* Stream co-processor out. */
45#define STRCOP_RX_DMA_NBR 9 /* Stream co-processor in. */
46
47#define ASYNC_SER3_TX_DMA_NBR 8 /* Asynchronous serial port 3 out. */
48#define ASYNC_SER3_RX_DMA_NBR 9 /* Asynchronous serial port 3 in. */
49
50enum dma_owner {
51 dma_eth0,
52 dma_eth1,
53 dma_iop0,
54 dma_iop1,
55 dma_ser0,
56 dma_ser1,
57 dma_ser2,
58 dma_ser3,
59 dma_sser0,
60 dma_sser1,
61 dma_ata,
62 dma_strp,
63 dma_ext0,
64 dma_ext1,
65 dma_ext2,
66 dma_ext3
67};
68
69int crisv32_request_dma(unsigned int dmanr, const char *device_id,
70 unsigned options, unsigned bandwidth,
71 enum dma_owner owner);
72void crisv32_free_dma(unsigned int dmanr);
73
74/* Masks used by crisv32_request_dma options: */
75#define DMA_VERBOSE_ON_ERROR 1
76#define DMA_PANIC_ON_ERROR (2|DMA_VERBOSE_ON_ERROR)
77#define DMA_INT_MEM 4
78
79#endif /* _ASM_ARCH_CRIS_DMA_H */
diff --git a/arch/cris/include/arch-v32/mach-fs/mach/memmap.h b/arch/cris/include/arch-v32/mach-fs/mach/memmap.h
new file mode 100644
index 000000000000..d29df5644d3e
--- /dev/null
+++ b/arch/cris/include/arch-v32/mach-fs/mach/memmap.h
@@ -0,0 +1,24 @@
1#ifndef _ASM_ARCH_MEMMAP_H
2#define _ASM_ARCH_MEMMAP_H
3
4#define MEM_CSE0_START (0x00000000)
5#define MEM_CSE0_SIZE (0x04000000)
6#define MEM_CSE1_START (0x04000000)
7#define MEM_CSE1_SIZE (0x04000000)
8#define MEM_CSR0_START (0x08000000)
9#define MEM_CSR1_START (0x0c000000)
10#define MEM_CSP0_START (0x10000000)
11#define MEM_CSP1_START (0x14000000)
12#define MEM_CSP2_START (0x18000000)
13#define MEM_CSP3_START (0x1c000000)
14#define MEM_CSP4_START (0x20000000)
15#define MEM_CSP5_START (0x24000000)
16#define MEM_CSP6_START (0x28000000)
17#define MEM_CSP7_START (0x2c000000)
18#define MEM_INTMEM_START (0x38000000)
19#define MEM_INTMEM_SIZE (0x00020000)
20#define MEM_DRAM_START (0x40000000)
21
22#define MEM_NON_CACHEABLE (0x80000000)
23
24#endif
diff --git a/arch/cris/include/arch-v32/mach-fs/mach/startup.inc b/arch/cris/include/arch-v32/mach-fs/mach/startup.inc
index 4a10ccbd6cc1..dd1abbdcbc7a 100644
--- a/arch/cris/include/arch-v32/mach-fs/mach/startup.inc
+++ b/arch/cris/include/arch-v32/mach-fs/mach/startup.inc
@@ -1,3 +1,6 @@
1#ifndef STARTUP_INC_INCLUDED
2#define STARTUP_INC_INCLUDED
3
1#include <hwregs/asm/reg_map_asm.h> 4#include <hwregs/asm/reg_map_asm.h>
2#include <hwregs/asm/bif_core_defs_asm.h> 5#include <hwregs/asm/bif_core_defs_asm.h>
3#include <hwregs/asm/gio_defs_asm.h> 6#include <hwregs/asm/gio_defs_asm.h>
@@ -75,3 +78,5 @@
75 move.d $r10, [$r11] 78 move.d $r10, [$r11]
76#endif 79#endif
77 .endm 80 .endm
81
82#endif
diff --git a/arch/cris/include/asm/etraxgpio.h b/arch/cris/include/asm/etraxgpio.h
index 38f1c8e1770c..d474818a537e 100644
--- a/arch/cris/include/asm/etraxgpio.h
+++ b/arch/cris/include/asm/etraxgpio.h
@@ -21,31 +21,35 @@
21 * /dev/leds minor 2, Access to leds depending on kernelconfig 21 * /dev/leds minor 2, Access to leds depending on kernelconfig
22 * 22 *
23 * For ARTPEC-3 (CONFIG_CRIS_MACH_ARTPEC3): 23 * For ARTPEC-3 (CONFIG_CRIS_MACH_ARTPEC3):
24 * /dev/gpioa minor 0, 8 bit GPIO, each bit can change direction 24 * /dev/gpioa minor 0, 32 bit GPIO, each bit can change direction
25 * /dev/gpiob minor 1, 18 bit GPIO, each bit can change direction 25 * /dev/gpiob minor 1, 32 bit GPIO, each bit can change direction
26 * /dev/gpioc minor 3, 18 bit GPIO, each bit can change direction 26 * /dev/gpioc minor 3, 16 bit GPIO, each bit can change direction
27 * /dev/gpiod minor 4, 18 bit GPIO, each bit can change direction 27 * /dev/gpiod minor 4, 32 bit GPIO, input only
28 * /dev/leds minor 2, Access to leds depending on kernelconfig 28 * /dev/leds minor 2, Access to leds depending on kernelconfig
29 * /dev/pwm0 minor 16, PWM channel 0 on PA30 29 * /dev/pwm0 minor 16, PWM channel 0 on PA30
30 * /dev/pwm1 minor 17, PWM channel 1 on PA31 30 * /dev/pwm1 minor 17, PWM channel 1 on PA31
31 * /dev/pwm2 minor 18, PWM channel 2 on PB26 31 * /dev/pwm2 minor 18, PWM channel 2 on PB26
32 * /dev/ppwm minor 19, PPWM channel
32 * 33 *
33 */ 34 */
34#ifndef _ASM_ETRAXGPIO_H 35#ifndef _ASM_ETRAXGPIO_H
35#define _ASM_ETRAXGPIO_H 36#define _ASM_ETRAXGPIO_H
36 37
38#define GPIO_MINOR_FIRST 0
39
40#define ETRAXGPIO_IOCTYPE 43
41
37/* etraxgpio _IOC_TYPE, bits 8 to 15 in ioctl cmd */ 42/* etraxgpio _IOC_TYPE, bits 8 to 15 in ioctl cmd */
38#ifdef CONFIG_ETRAX_ARCH_V10 43#ifdef CONFIG_ETRAX_ARCH_V10
39#define ETRAXGPIO_IOCTYPE 43
40#define GPIO_MINOR_A 0 44#define GPIO_MINOR_A 0
41#define GPIO_MINOR_B 1 45#define GPIO_MINOR_B 1
42#define GPIO_MINOR_LEDS 2 46#define GPIO_MINOR_LEDS 2
43#define GPIO_MINOR_G 3 47#define GPIO_MINOR_G 3
44#define GPIO_MINOR_LAST 3 48#define GPIO_MINOR_LAST 3
49#define GPIO_MINOR_LAST_REAL GPIO_MINOR_LAST
45#endif 50#endif
46 51
47#ifdef CONFIG_ETRAXFS 52#ifdef CONFIG_ETRAXFS
48#define ETRAXGPIO_IOCTYPE 43
49#define GPIO_MINOR_A 0 53#define GPIO_MINOR_A 0
50#define GPIO_MINOR_B 1 54#define GPIO_MINOR_B 1
51#define GPIO_MINOR_LEDS 2 55#define GPIO_MINOR_LEDS 2
@@ -58,10 +62,10 @@
58#else 62#else
59#define GPIO_MINOR_LAST 5 63#define GPIO_MINOR_LAST 5
60#endif 64#endif
65#define GPIO_MINOR_LAST_REAL GPIO_MINOR_LAST
61#endif 66#endif
62 67
63#ifdef CONFIG_CRIS_MACH_ARTPEC3 68#ifdef CONFIG_CRIS_MACH_ARTPEC3
64#define ETRAXGPIO_IOCTYPE 43
65#define GPIO_MINOR_A 0 69#define GPIO_MINOR_A 0
66#define GPIO_MINOR_B 1 70#define GPIO_MINOR_B 1
67#define GPIO_MINOR_LEDS 2 71#define GPIO_MINOR_LEDS 2
@@ -73,12 +77,17 @@
73#else 77#else
74#define GPIO_MINOR_LAST 4 78#define GPIO_MINOR_LAST 4
75#endif 79#endif
76#define GPIO_MINOR_PWM0 16 80#define GPIO_MINOR_FIRST_PWM 16
77#define GPIO_MINOR_PWM1 17 81#define GPIO_MINOR_PWM0 (GPIO_MINOR_FIRST_PWM+0)
78#define GPIO_MINOR_PWM2 18 82#define GPIO_MINOR_PWM1 (GPIO_MINOR_FIRST_PWM+1)
79#define GPIO_MINOR_LAST_PWM GPIO_MINOR_PWM2 83#define GPIO_MINOR_PWM2 (GPIO_MINOR_FIRST_PWM+2)
84#define GPIO_MINOR_PPWM (GPIO_MINOR_FIRST_PWM+3)
85#define GPIO_MINOR_LAST_PWM GPIO_MINOR_PPWM
86#define GPIO_MINOR_LAST_REAL GPIO_MINOR_LAST_PWM
80#endif 87#endif
81 88
89
90
82/* supported ioctl _IOC_NR's */ 91/* supported ioctl _IOC_NR's */
83 92
84#define IO_READBITS 0x1 /* read and return current port bits (obsolete) */ 93#define IO_READBITS 0x1 /* read and return current port bits (obsolete) */
@@ -125,12 +134,10 @@
125 */ 134 */
126#define IO_READ_INBITS 0x10 /* *arg is result of reading the input pins */ 135#define IO_READ_INBITS 0x10 /* *arg is result of reading the input pins */
127#define IO_READ_OUTBITS 0x11 /* *arg is result of reading the output shadow */ 136#define IO_READ_OUTBITS 0x11 /* *arg is result of reading the output shadow */
128#define IO_SETGET_INPUT 0x12 /* bits set in *arg is set to input, 137#define IO_SETGET_INPUT 0x12 /* bits set in *arg is set to input, */
129 * *arg updated with current input pins. 138 /* *arg updated with current input pins. */
130 */ 139#define IO_SETGET_OUTPUT 0x13 /* bits set in *arg is set to output, */
131#define IO_SETGET_OUTPUT 0x13 /* bits set in *arg is set to output, 140 /* *arg updated with current output pins. */
132 * *arg updated with current output pins.
133 */
134 141
135/* The following ioctl's are applicable to the PWM channels only */ 142/* The following ioctl's are applicable to the PWM channels only */
136 143
@@ -140,7 +147,8 @@ enum io_pwm_mode {
140 PWM_OFF = 0, /* disabled, deallocated */ 147 PWM_OFF = 0, /* disabled, deallocated */
141 PWM_STANDARD = 1, /* 390 kHz, duty cycle 0..255/256 */ 148 PWM_STANDARD = 1, /* 390 kHz, duty cycle 0..255/256 */
142 PWM_FAST = 2, /* variable freq, w/ 10ns active pulse len */ 149 PWM_FAST = 2, /* variable freq, w/ 10ns active pulse len */
143 PWM_VARFREQ = 3 /* individually configurable high/low periods */ 150 PWM_VARFREQ = 3, /* individually configurable high/low periods */
151 PWM_SOFT = 4 /* software generated */
144}; 152};
145 153
146struct io_pwm_set_mode { 154struct io_pwm_set_mode {
@@ -176,4 +184,56 @@ struct io_pwm_set_duty {
176 int duty; /* 0..255 */ 184 int duty; /* 0..255 */
177}; 185};
178 186
187/* Returns information about the latest PWM pulse.
188 * lo: Length of the latest low period, in units of 10ns.
189 * hi: Length of the latest high period, in units of 10ns.
190 * cnt: Time since last detected edge, in units of 10ns.
191 *
192 * The input source to PWM is decied by IO_PWM_SET_INPUT_SRC.
193 *
194 * NOTE: All PWM devices is connected to the same input source.
195 */
196#define IO_PWM_GET_PERIOD 0x23
197
198struct io_pwm_get_period {
199 unsigned int lo;
200 unsigned int hi;
201 unsigned int cnt;
202};
203
204/* Sets the input source for the PWM input. For the src value see the
205 * register description for gio:rw_pwm_in_cfg.
206 *
207 * NOTE: All PWM devices is connected to the same input source.
208 */
209#define IO_PWM_SET_INPUT_SRC 0x24
210struct io_pwm_set_input_src {
211 unsigned int src; /* 0..7 */
212};
213
214/* Sets the duty cycles in steps of 1/256, 0 = 0%, 255 = 100% duty cycle */
215#define IO_PPWM_SET_DUTY 0x25
216
217struct io_ppwm_set_duty {
218 int duty; /* 0..255 */
219};
220
221/* Configuraton struct for the IO_PWMCLK_SET_CONFIG ioctl to configure
222 * PWM capable gpio pins:
223 */
224#define IO_PWMCLK_SETGET_CONFIG 0x26
225struct gpio_pwmclk_conf {
226 unsigned int gpiopin; /* The pin number based on the opened device */
227 unsigned int baseclk; /* The base clock to use, or sw will select one close*/
228 unsigned int low; /* The number of low periods of the baseclk */
229 unsigned int high; /* The number of high periods of the baseclk */
230};
231
232/* Examples:
233 * To get a symmetric 12 MHz clock without knowing anything about the hardware:
234 * baseclk = 12000000, low = 0, high = 0
235 * To just get info of current setting:
236 * baseclk = 0, low = 0, high = 0, the values will be updated by driver.
237 */
238
179#endif 239#endif
diff --git a/arch/cris/include/asm/sync_serial.h b/arch/cris/include/asm/sync_serial.h
index d87c24df2b38..7f827fea30e7 100644
--- a/arch/cris/include/asm/sync_serial.h
+++ b/arch/cris/include/asm/sync_serial.h
@@ -19,6 +19,7 @@
19#define SSP_OPOLARITY _IOR('S', 4, unsigned int) 19#define SSP_OPOLARITY _IOR('S', 4, unsigned int)
20#define SSP_SPI _IOR('S', 5, unsigned int) 20#define SSP_SPI _IOR('S', 5, unsigned int)
21#define SSP_INBUFCHUNK _IOR('S', 6, unsigned int) 21#define SSP_INBUFCHUNK _IOR('S', 6, unsigned int)
22#define SSP_INPUT _IOR('S', 7, unsigned int)
22 23
23/* Values for SSP_SPEED */ 24/* Values for SSP_SPEED */
24#define SSP150 0 25#define SSP150 0
@@ -37,6 +38,7 @@
37#define SSP921600 13 38#define SSP921600 13
38#define SSP3125000 14 39#define SSP3125000 14
39#define CODEC 15 40#define CODEC 15
41#define CODEC_f32768 16
40 42
41#define FREQ_4MHz 0 43#define FREQ_4MHz 0
42#define FREQ_2MHz 1 44#define FREQ_2MHz 1
@@ -46,9 +48,14 @@
46#define FREQ_128kHz 5 48#define FREQ_128kHz 5
47#define FREQ_64kHz 6 49#define FREQ_64kHz 6
48#define FREQ_32kHz 7 50#define FREQ_32kHz 7
51/* FREQ_* with values where bit (value & 0x10) is set are */
52/* used for CODEC_f32768 */
53#define FREQ_4096kHz 16 /* CODEC_f32768 */
49 54
50/* Used by application to set CODEC divider, word rate and frame rate */ 55/* Used by application to set CODEC divider, word rate and frame rate */
51#define CODEC_VAL(freq, clk_per_sync, sync_per_frame) (CODEC | (freq << 8) | (clk_per_sync << 16) | (sync_per_frame << 28)) 56#define CODEC_VAL(freq, clk_per_sync, sync_per_frame) \
57 ((CODEC + ((freq & 0x10) >> 4)) | (freq << 8) | \
58 (clk_per_sync << 16) | (sync_per_frame << 28))
52 59
53/* Used by driver to extract speed */ 60/* Used by driver to extract speed */
54#define GET_SPEED(x) (x & 0xff) 61#define GET_SPEED(x) (x & 0xff)
@@ -68,6 +75,7 @@
68#define NORMAL_SYNC 1 75#define NORMAL_SYNC 1
69#define EARLY_SYNC 2 76#define EARLY_SYNC 2
70#define SECOND_WORD_SYNC 0x40000 77#define SECOND_WORD_SYNC 0x40000
78#define LATE_SYNC 0x80000
71 79
72#define BIT_SYNC 4 80#define BIT_SYNC 4
73#define WORD_SYNC 8 81#define WORD_SYNC 8
@@ -104,4 +112,21 @@
104/* Values for SSP_INBUFCHUNK */ 112/* Values for SSP_INBUFCHUNK */
105/* plain integer with the size of DMA chunks */ 113/* plain integer with the size of DMA chunks */
106 114
115/* To ensure that the timestamps are aligned with the data being read
116 * the read length MUST be a multiple of the length of the DMA buffers.
117 *
118 * Use a multiple of SSP_INPUT_CHUNK_SIZE defined below.
119 */
120#define SSP_INPUT_CHUNK_SIZE 256
121
122/* Request struct to pass through the ioctl interface to read
123 * data with timestamps.
124 */
125struct ssp_request {
126 char __user *buf; /* Where to put the data. */
127 size_t len; /* Size of buf. MUST be a multiple of */
128 /* SSP_INPUT_CHUNK_SIZE! */
129 struct timespec ts; /* The time the data was sampled. */
130};
131
107#endif 132#endif