summaryrefslogtreecommitdiff
path: root/include/asm-v850/rte_me2_cb.h
blob: 9922c85c85a83b15dea5d2ca6075c925ce0f52f7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
/*
 * include/asm-v850/rte_me2_cb.h -- Midas labs RTE-V850E/ME2-CB board
 *
 *  Copyright (C) 2001,02,03  NEC Corporation
 *  Copyright (C) 2001,02,03  Miles Bader <miles@gnu.org>
 *
 * 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.
 *
 * Written by Miles Bader <miles@gnu.org>
 */

#ifndef __V850_RTE_ME2_CB_H__
#define __V850_RTE_ME2_CB_H__

#include <asm/rte_cb.h>		/* Common defs for Midas RTE-CB boards.  */


#define PLATFORM		"rte-v850e/me2-cb"
#define PLATFORM_LONG		"Midas lab RTE-V850E/ME2-CB"

#define CPU_CLOCK_FREQ		150000000 /* 150MHz */
#define FIXED_BOGOMIPS		50

/* 32MB of onbard SDRAM.  */
#define SDRAM_ADDR		0x00800000
#define SDRAM_SIZE		0x02000000 /* 32MB */


/* CPU addresses of GBUS memory spaces.  */
#define GCS0_ADDR		0x04000000 /* GCS0 - Common SRAM (2MB) */
#define GCS0_SIZE		0x00800000 /*   8MB */
#define GCS1_ADDR		0x04800000 /* GCS1 - Flash ROM (8MB) */
#define GCS1_SIZE		0x00800000 /*   8MB */
#define GCS2_ADDR		0x07000000 /* GCS2 - I/O registers */
#define GCS2_SIZE		0x00800000 /*   8MB */
#define GCS5_ADDR		0x08000000 /* GCS5 - PCI bus space */
#define GCS5_SIZE		0x02000000 /*   32MB */
#define GCS6_ADDR		0x07800000 /* GCS6 - PCI control registers */
#define GCS6_SIZE		0x00800000 /*   8MB */


/* For <asm/page.h> */
#define PAGE_OFFSET 		SDRAM_ADDR


#ifdef CONFIG_ROM_KERNEL
/* Kernel is in ROM, starting at address 0.  */

#define INTV_BASE		0
#define ROOT_FS_IMAGE_RW	0

#else /* !CONFIG_ROM_KERNEL */
/* Using RAM-kernel.  Assume some sort of boot-loader got us loaded at
   address 0.  */

#define INTV_BASE		0
#define ROOT_FS_IMAGE_RW	1

#endif /* CONFIG_ROM_KERNEL */


/* Some misc. on-board devices.  */

/* Seven-segment LED display (four digits).  */
#define LED_ADDR(n)		(0x0FE02000 + (n))
#define LED(n)			(*(volatile unsigned char *)LED_ADDR(n))
#define LED_NUM_DIGITS		4


/* On-board PIC.  */

#define CB_PIC_BASE_ADDR 	0x0FE04000

#define CB_PIC_INT0M_ADDR 	(CB_PIC_BASE_ADDR + 0x00)
#define CB_PIC_INT0M      	(*(volatile u16 *)CB_PIC_INT0M_ADDR)
#define CB_PIC_INT1M_ADDR 	(CB_PIC_BASE_ADDR + 0x10)
#define CB_PIC_INT1M      	(*(volatile u16 *)CB_PIC_INT1M_ADDR)
#define CB_PIC_INTR_ADDR  	(CB_PIC_BASE_ADDR + 0x20)
#define CB_PIC_INTR       	(*(volatile u16 *)CB_PIC_INTR_ADDR)
#define CB_PIC_INTEN_ADDR 	(CB_PIC_BASE_ADDR + 0x30)
#define CB_PIC_INTEN      	(*(volatile u16 *)CB_PIC_INTEN_ADDR)

#define CB_PIC_INT0EN        	0x0001
#define CB_PIC_INT1EN        	0x0002
#define CB_PIC_INT0SEL       	0x0080

/* The PIC interrupts themselves.  */
#define CB_PIC_BASE_IRQ		NUM_CPU_IRQS
#define IRQ_CB_PIC_NUM		10

/* Some specific CB_PIC interrupts. */
#define IRQ_CB_EXTTM0		(CB_PIC_BASE_IRQ + 0)
#define IRQ_CB_EXTSIO		(CB_PIC_BASE_IRQ + 1)
#define IRQ_CB_TOVER		(CB_PIC_BASE_IRQ + 2)
#define IRQ_CB_GINT0		(CB_PIC_BASE_IRQ + 3)
#define IRQ_CB_USB		(CB_PIC_BASE_IRQ + 4)
#define IRQ_CB_LANC		(CB_PIC_BASE_IRQ + 5)
#define IRQ_CB_USB_VBUS_ON	(CB_PIC_BASE_IRQ + 6)
#define IRQ_CB_USB_VBUS_OFF	(CB_PIC_BASE_IRQ + 7)
#define IRQ_CB_EXTTM1		(CB_PIC_BASE_IRQ + 8)
#define IRQ_CB_EXTTM2		(CB_PIC_BASE_IRQ + 9)

/* The GBUS GINT1 - GINT3 (note, not GINT0!) interrupts are connected to
   the INTP65 - INTP67 pins on the CPU.  These are shared among the GBUS
   interrupts.  */
#define IRQ_GINT(n)		IRQ_INTP((n) + 9)  /* 0 is unused! */
#define IRQ_GINT_NUM		4		   /* 0 is unused! */

/* The shared interrupt line from the PIC is connected to CPU pin INTP23.  */
#define IRQ_CB_PIC		IRQ_INTP(4) /* P23 */

/* Used by <asm/rte_cb.h> to derive NUM_MACH_IRQS.  */
#define NUM_RTE_CB_IRQS		(NUM_CPU_IRQS + IRQ_CB_PIC_NUM)


#ifndef __ASSEMBLY__
struct cb_pic_irq_init {
	const char *name;	/* name of interrupt type */

	/* Range of kernel irq numbers for this type:
	   BASE, BASE+INTERVAL, ..., BASE+INTERVAL*NUM  */
	unsigned base, num, interval;

	unsigned priority;	/* interrupt priority to assign */
};
struct hw_interrupt_type;	/* fwd decl */

/* Enable interrupt handling for interrupt IRQ.  */
extern void cb_pic_enable_irq (unsigned irq);
/* Disable interrupt handling for interrupt IRQ.  Note that any interrupts
   received while disabled will be delivered once the interrupt is enabled
   again, unless they are explicitly cleared using `cb_pic_clear_pending_irq'.  */
extern void cb_pic_disable_irq (unsigned irq);
/* Initialize HW_IRQ_TYPES for PIC irqs described in array INITS (which is
   terminated by an entry with the name field == 0).  */
extern void cb_pic_init_irq_types (struct cb_pic_irq_init *inits,
				   struct hw_interrupt_type *hw_irq_types);
/* Initialize PIC interrupts.  */
extern void cb_pic_init_irqs (void);
#endif /* __ASSEMBLY__ */


/* TL16C550C on board UART see also asm/serial.h */
#define CB_UART_BASE    	0x0FE08000
#define CB_UART_REG_GAP 	0x10
#define CB_UART_CLOCK   	0x16000000

/* CompactFlash setting */
#define CB_CF_BASE     		0x0FE0C000
#define CB_CF_CCR_ADDR 		(CB_CF_BASE+0x200)
#define CB_CF_CCR      		(*(volatile u8 *)CB_CF_CCR_ADDR)
#define CB_CF_REG0_ADDR		(CB_CF_BASE+0x1000)
#define CB_CF_REG0     		(*(volatile u16 *)CB_CF_REG0_ADDR)
#define CB_CF_STS0_ADDR		(CB_CF_BASE+0x1004)
#define CB_CF_STS0     		(*(volatile u16 *)CB_CF_STS0_ADDR)
#define CB_PCATA_BASE  		(CB_CF_BASE+0x800)
#define CB_IDE_BASE    		(CB_CF_BASE+0x9F0)
#define CB_IDE_CTRL    		(CB_CF_BASE+0xBF6)
#define CB_IDE_REG_OFFS		0x1


/* SMSC LAN91C111 setting */
#if defined(CONFIG_SMC91111)
#define CB_LANC_BASE 		0x0FE10300
#define CONFIG_SMC16BITONLY
#define ETH0_ADDR 		CB_LANC_BASE
#define ETH0_IRQ 		IRQ_CB_LANC
#endif /* CONFIG_SMC16BITONLY */


#undef V850E_UART_PRE_CONFIGURE
#define V850E_UART_PRE_CONFIGURE	rte_me2_cb_uart_pre_configure
#ifndef __ASSEMBLY__
extern void rte_me2_cb_uart_pre_configure (unsigned chan,
					   unsigned cflags, unsigned baud);
#endif /* __ASSEMBLY__ */

/* This board supports RTS/CTS for the on-chip UART, but only for channel 0. */

/* CTS for UART channel 0 is pin P22 (bit 2 of port 2).  */
#define V850E_UART_CTS(chan)	((chan) == 0 ? !(ME2_PORT2_IO & 0x4) : 1)
/* RTS for UART channel 0 is pin P21 (bit 1 of port 2).  */
#define V850E_UART_SET_RTS(chan, val)					      \
   do {									      \
	   if (chan == 0) {						      \
		   unsigned old = ME2_PORT2_IO; 			      \
		   if (val)						      \
			   ME2_PORT2_IO = old & ~0x2;			      \
		   else							      \
			   ME2_PORT2_IO = old | 0x2;			      \
	   }								      \
   } while (0)


#ifndef __ASSEMBLY__
extern void rte_me2_cb_init_irqs (void);
#endif /* !__ASSEMBLY__ */


#endif /* __V850_RTE_ME2_CB_H__ */