summaryrefslogtreecommitdiffstats
path: root/arch/mips/include/asm/emma/emma2rh.h
blob: a41f84e9bc4e6109fb65300554f9f722b51d371e (plain)
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
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
/*
 *  arch/mips/include/asm/emma/emma2rh.h
 *      This file is EMMA2RH common header.
 *
 *  Copyright (C) NEC Electronics Corporation 2005-2006
 *
 *  This file based on include/asm-mips/ddb5xxx/ddb5xxx.h
 *          Copyright 2001 MontaVista Software Inc.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
#ifndef __ASM_EMMA_EMMA2RH_H
#define __ASM_EMMA_EMMA2RH_H

#include <irq.h>

/*
 * EMMA2RH registers
 */
#define REGBASE 0x10000000

#define EMMA2RH_BHIF_STRAP_0	(0x000010+REGBASE)
#define EMMA2RH_BHIF_INT_ST_0	(0x000030+REGBASE)
#define EMMA2RH_BHIF_INT_ST_1	(0x000034+REGBASE)
#define EMMA2RH_BHIF_INT_ST_2	(0x000038+REGBASE)
#define EMMA2RH_BHIF_INT_EN_0	(0x000040+REGBASE)
#define EMMA2RH_BHIF_INT_EN_1	(0x000044+REGBASE)
#define EMMA2RH_BHIF_INT_EN_2	(0x000048+REGBASE)
#define EMMA2RH_BHIF_INT1_EN_0	(0x000050+REGBASE)
#define EMMA2RH_BHIF_INT1_EN_1	(0x000054+REGBASE)
#define EMMA2RH_BHIF_INT1_EN_2	(0x000058+REGBASE)
#define EMMA2RH_BHIF_SW_INT	(0x000070+REGBASE)
#define EMMA2RH_BHIF_SW_INT_EN	(0x000080+REGBASE)
#define EMMA2RH_BHIF_SW_INT_CLR	(0x000090+REGBASE)
#define EMMA2RH_BHIF_MAIN_CTRL	(0x0000b4+REGBASE)
#define EMMA2RH_BHIF_EXCEPT_VECT_BASE_ADDRESS	(0x0000c0+REGBASE)
#define EMMA2RH_GPIO_DIR	(0x110d20+REGBASE)
#define EMMA2RH_GPIO_INT_ST	(0x110d30+REGBASE)
#define EMMA2RH_GPIO_INT_MASK	(0x110d3c+REGBASE)
#define EMMA2RH_GPIO_INT_MODE	(0x110d48+REGBASE)
#define EMMA2RH_GPIO_INT_CND_A	(0x110d54+REGBASE)
#define EMMA2RH_GPIO_INT_CND_B	(0x110d60+REGBASE)
#define EMMA2RH_PBRD_INT_EN	(0x100010+REGBASE)
#define EMMA2RH_PBRD_CLKSEL	(0x100028+REGBASE)
#define EMMA2RH_PFUR0_BASE	(0x101000+REGBASE)
#define EMMA2RH_PFUR1_BASE	(0x102000+REGBASE)
#define EMMA2RH_PFUR2_BASE	(0x103000+REGBASE)
#define EMMA2RH_PIIC0_BASE	(0x107000+REGBASE)
#define EMMA2RH_PIIC1_BASE	(0x108000+REGBASE)
#define EMMA2RH_PIIC2_BASE	(0x109000+REGBASE)
#define EMMA2RH_PCI_CONTROL	(0x200000+REGBASE)
#define EMMA2RH_PCI_ARBIT_CTR	(0x200004+REGBASE)
#define EMMA2RH_PCI_IWIN0_CTR	(0x200010+REGBASE)
#define EMMA2RH_PCI_IWIN1_CTR	(0x200014+REGBASE)
#define EMMA2RH_PCI_INIT_ESWP	(0x200018+REGBASE)
#define EMMA2RH_PCI_INT		(0x200020+REGBASE)
#define EMMA2RH_PCI_INT_EN	(0x200024+REGBASE)
#define EMMA2RH_PCI_TWIN_CTR	(0x200030+REGBASE)
#define EMMA2RH_PCI_TWIN_BADR	(0x200034+REGBASE)
#define EMMA2RH_PCI_TWIN0_DADR	(0x200038+REGBASE)
#define EMMA2RH_PCI_TWIN1_DADR	(0x20003c+REGBASE)

/*
 *  Memory map (physical address)
 *
 *  Note most of the following address must be properly aligned by the
 *  corresponding size.  For example, if PCI_IO_SIZE is 16MB, then
 *  PCI_IO_BASE must be aligned along 16MB boundary.
 */

/* the actual ram size is detected at run-time */
#define EMMA2RH_RAM_BASE	0x00000000
#define EMMA2RH_RAM_SIZE	0x10000000	/* less than 256MB */

#define EMMA2RH_IO_BASE		0x10000000
#define EMMA2RH_IO_SIZE		0x01000000	/* 16 MB */

#define EMMA2RH_GENERALIO_BASE	0x11000000
#define EMMA2RH_GENERALIO_SIZE	0x01000000	/* 16 MB */

#define EMMA2RH_PCI_IO_BASE	0x12000000
#define EMMA2RH_PCI_IO_SIZE	0x02000000	/* 32 MB */

#define EMMA2RH_PCI_MEM_BASE	0x14000000
#define EMMA2RH_PCI_MEM_SIZE	0x08000000	/* 128 MB */

#define EMMA2RH_ROM_BASE	0x1c000000
#define EMMA2RH_ROM_SIZE	0x04000000	/* 64 MB */

#define EMMA2RH_PCI_CONFIG_BASE	EMMA2RH_PCI_IO_BASE
#define EMMA2RH_PCI_CONFIG_SIZE	EMMA2RH_PCI_IO_SIZE

#define NUM_CPU_IRQ		8
#define NUM_EMMA2RH_IRQ		96

#define CPU_EMMA2RH_CASCADE	2
#define CPU_IRQ_BASE		MIPS_CPU_IRQ_BASE
#define EMMA2RH_IRQ_BASE	(CPU_IRQ_BASE + NUM_CPU_IRQ)

/*
 * emma2rh irq defs
 */

#define EMMA2RH_IRQ_INT0	(0 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT1	(1 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT2	(2 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT3	(3 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT4	(4 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT5	(5 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT6	(6 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT7	(7 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT8	(8 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT9	(9 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT10	(10 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT11	(11 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT12	(12 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT13	(13 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT14	(14 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT15	(15 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT16	(16 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT17	(17 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT18	(18 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT19	(19 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT20	(20 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT21	(21 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT22	(22 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT23	(23 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT24	(24 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT25	(25 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT26	(26 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT27	(27 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT28	(28 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT29	(29 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT30	(30 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT31	(31 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT32	(32 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT33	(33 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT34	(34 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT35	(35 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT36	(36 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT37	(37 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT38	(38 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT39	(39 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT40	(40 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT41	(41 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT42	(42 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT43	(43 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT44	(44 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT45	(45 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT46	(46 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT47	(47 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT48	(48 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT49	(49 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT50	(50 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT51	(51 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT52	(52 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT53	(53 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT54	(54 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT55	(55 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT56	(56 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT57	(57 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT58	(58 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT59	(59 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT60	(60 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT61	(61 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT62	(62 + EMMA2RH_IRQ_BASE)
#define EMMA2RH_IRQ_INT63	(63 + EMMA2RH_IRQ_BASE)

#define EMMA2RH_IRQ_PFUR0	EMMA2RH_IRQ_INT49
#define EMMA2RH_IRQ_PFUR1	EMMA2RH_IRQ_INT50
#define EMMA2RH_IRQ_PFUR2	EMMA2RH_IRQ_INT51
#define EMMA2RH_IRQ_PIIC0	EMMA2RH_IRQ_INT56
#define EMMA2RH_IRQ_PIIC1	EMMA2RH_IRQ_INT57
#define EMMA2RH_IRQ_PIIC2	EMMA2RH_IRQ_INT58

/*
 *  EMMA2RH Register Access
 */

#define EMMA2RH_BASE (0xa0000000)

static inline void emma2rh_sync(void)
{
	volatile u32 *p = (volatile u32 *)0xbfc00000;
	(void)(*p);
}

static inline void emma2rh_out32(u32 offset, u32 val)
{
	*(volatile u32 *)(EMMA2RH_BASE | offset) = val;
	emma2rh_sync();
}

static inline u32 emma2rh_in32(u32 offset)
{
	u32 val = *(volatile u32 *)(EMMA2RH_BASE | offset);
	emma2rh_sync();
	return val;
}

static inline void emma2rh_out16(u32 offset, u16 val)
{
	*(volatile u16 *)(EMMA2RH_BASE | offset) = val;
	emma2rh_sync();
}

static inline u16 emma2rh_in16(u32 offset)
{
	u16 val = *(volatile u16 *)(EMMA2RH_BASE | offset);
	emma2rh_sync();
	return val;
}

static inline void emma2rh_out8(u32 offset, u8 val)
{
	*(volatile u8 *)(EMMA2RH_BASE | offset) = val;
	emma2rh_sync();
}

static inline u8 emma2rh_in8(u32 offset)
{
	u8 val = *(volatile u8 *)(EMMA2RH_BASE | offset);
	emma2rh_sync();
	return val;
}

/**
 * IIC registers map
 **/

/*---------------------------------------------------------------------------*/
/* CNT - Control register (00H R/W)                                          */
/*---------------------------------------------------------------------------*/
#define SPT         0x00000001
#define STT         0x00000002
#define ACKE        0x00000004
#define WTIM        0x00000008
#define SPIE        0x00000010
#define WREL        0x00000020
#define LREL        0x00000040
#define IICE        0x00000080
#define CNT_RESERVED    0x000000ff	/* reserved bit 0 */

#define I2C_EMMA_START      (IICE | STT)
#define I2C_EMMA_STOP       (IICE | SPT)
#define I2C_EMMA_REPSTART   I2C_EMMA_START

/*---------------------------------------------------------------------------*/
/* STA - Status register (10H Read)                                          */
/*---------------------------------------------------------------------------*/
#define MSTS        0x00000080
#define ALD         0x00000040
#define EXC         0x00000020
#define COI         0x00000010
#define TRC         0x00000008
#define ACKD        0x00000004
#define STD         0x00000002
#define SPD         0x00000001

/*---------------------------------------------------------------------------*/
/* CSEL - Clock select register (20H R/W)                                    */
/*---------------------------------------------------------------------------*/
#define FCL         0x00000080
#define ND50        0x00000040
#define CLD         0x00000020
#define DAD         0x00000010
#define SMC         0x00000008
#define DFC         0x00000004
#define CL          0x00000003
#define CSEL_RESERVED   0x000000ff	/* reserved bit 0 */

#define FAST397     0x0000008b
#define FAST297     0x0000008a
#define FAST347     0x0000000b
#define FAST260     0x0000000a
#define FAST130     0x00000008
#define STANDARD108 0x00000083
#define STANDARD83  0x00000082
#define STANDARD95  0x00000003
#define STANDARD73  0x00000002
#define STANDARD36  0x00000001
#define STANDARD71  0x00000000

/*---------------------------------------------------------------------------*/
/* SVA - Slave address register (30H R/W)                                    */
/*---------------------------------------------------------------------------*/
#define SVA         0x000000fe

/*---------------------------------------------------------------------------*/
/* SHR - Shift register (40H R/W)                                            */
/*---------------------------------------------------------------------------*/
#define SR          0x000000ff

/*---------------------------------------------------------------------------*/
/* INT - Interrupt register (50H R/W)                                        */
/* INTM - Interrupt mask register (60H R/W)                                  */
/*---------------------------------------------------------------------------*/
#define INTE0       0x00000001

/***********************************************************************
 * I2C registers
 ***********************************************************************
 */
#define I2C_EMMA_CNT            0x00
#define I2C_EMMA_STA            0x10
#define I2C_EMMA_CSEL           0x20
#define I2C_EMMA_SVA            0x30
#define I2C_EMMA_SHR            0x40
#define I2C_EMMA_INT            0x50
#define I2C_EMMA_INTM           0x60

/*
 * include the board dependent part
 */
#ifdef CONFIG_NEC_MARKEINS
#include <asm/emma/markeins.h>
#else
#error "Unknown EMMA2RH board!"
#endif

#endif /* __ASM_EMMA_EMMA2RH_H */