~ubuntu-branches/ubuntu/maverick/u-boot-omap3/maverick

« back to all changes in this revision

Viewing changes to include/ambapp.h

  • Committer: Bazaar Package Importer
  • Author(s): Oliver Grawert
  • Date: 2010-03-22 15:06:23 UTC
  • Revision ID: james.westby@ubuntu.com-20100322150623-i21g8rgiyl5dohag
Tags: upstream-2010.3git20100315
ImportĀ upstreamĀ versionĀ 2010.3git20100315

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Interface for accessing Gaisler AMBA Plug&Play Bus.
 
2
 * The AHB bus can be interfaced with a simpler bus -
 
3
 * the APB bus, also freely available in GRLIB at
 
4
 * www.gaisler.com.
 
5
 *
 
6
 * (C) Copyright 2007
 
7
 * Daniel Hellstrom, Gaisler Research, daniel@gaisler.com.
 
8
 *
 
9
 * See file CREDITS for list of people who contributed to this
 
10
 * project.
 
11
 *
 
12
 * This program is free software; you can redistribute it and/or
 
13
 * modify it under the terms of the GNU General Public License as
 
14
 * published by the Free Software Foundation; either version 2 of
 
15
 * the License, or (at your option) any later version.
 
16
 *
 
17
 * This program is distributed in the hope that it will be useful,
 
18
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
19
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
20
 * GNU General Public License for more details.
 
21
 *
 
22
 * You should have received a copy of the GNU General Public License
 
23
 * along with this program; if not, write to the Free Software
 
24
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 
25
 * MA 02111-1307 USA
 
26
 *
 
27
 */
 
28
 
 
29
#ifndef __AMBAPP_H__
 
30
#define __AMBAPP_H__
 
31
 
 
32
/* Default location of Plug&Play info
 
33
 * normally 0xfffff000 for AHB masters
 
34
 * and 0xfffff800 for AHB slaves.
 
35
 * Normally no need to change this.
 
36
 */
 
37
#define LEON3_IO_AREA 0xfff00000
 
38
#define LEON3_CONF_AREA  0xff000
 
39
#define LEON3_AHB_SLAVE_CONF_AREA (1 << 11)
 
40
 
 
41
/* Max devices this software will support */
 
42
#define LEON3_AHB_MASTERS 16
 
43
#define LEON3_AHB_SLAVES 16
 
44
/*#define LEON3_APB_MASTERS 1*/ /* Number of APB buses that has Plug&Play */
 
45
#define LEON3_APB_SLAVES 16     /* Total number of APB slaves per APB bus */
 
46
 
 
47
/* Vendor codes */
 
48
#define VENDOR_GAISLER       1
 
49
#define VENDOR_PENDER        2
 
50
#define VENDOR_ESA           4
 
51
#define VENDOR_ASTRIUM       6
 
52
#define VENDOR_OPENCHIP      7
 
53
#define VENDOR_OPENCORES     8
 
54
#define VENDOR_CONTRIB       9
 
55
#define VENDOR_EONIC         11
 
56
#define VENDOR_RADIONOR      15
 
57
#define VENDOR_GLEICHMANN    16
 
58
#define VENDOR_MENTA         17
 
59
#define VENDOR_SUN           19
 
60
#define VENDOR_EMBEDDIT      234
 
61
#define VENDOR_CAL           202
 
62
 
 
63
/* Gaisler Research device id's */
 
64
#define GAISLER_LEON3    0x003
 
65
#define GAISLER_LEON3DSU 0x004
 
66
#define GAISLER_ETHAHB   0x005
 
67
#define GAISLER_APBMST   0x006
 
68
#define GAISLER_AHBUART  0x007
 
69
#define GAISLER_SRCTRL   0x008
 
70
#define GAISLER_SDCTRL   0x009
 
71
#define GAISLER_APBUART  0x00C
 
72
#define GAISLER_IRQMP    0x00D
 
73
#define GAISLER_AHBRAM   0x00E
 
74
#define GAISLER_GPTIMER  0x011
 
75
#define GAISLER_PCITRG   0x012
 
76
#define GAISLER_PCISBRG  0x013
 
77
#define GAISLER_PCIFBRG  0x014
 
78
#define GAISLER_PCITRACE 0x015
 
79
#define GAISLER_PCIDMA   0x016
 
80
#define GAISLER_AHBTRACE 0x017
 
81
#define GAISLER_ETHDSU   0x018
 
82
#define GAISLER_PIOPORT  0x01A
 
83
#define GAISLER_AHBJTAG  0x01c
 
84
#define GAISLER_SPW      0x01f
 
85
#define GAISLER_ATACTRL  0x024
 
86
#define GAISLER_VGA      0x061
 
87
#define GAISLER_KBD      0X060
 
88
#define GAISLER_ETHMAC   0x01D
 
89
#define GAISLER_DDRSPA   0x025
 
90
#define GAISLER_EHCI     0x026
 
91
#define GAISLER_UHCI     0x027
 
92
#define GAISLER_SPW2     0x029
 
93
#define GAISLER_DDR2SPA  0x02E
 
94
#define GAISLER_AHBSTAT  0x052
 
95
#define GAISLER_FTMCTRL  0x054
 
96
 
 
97
#define GAISLER_L2TIME   0xffd  /* internal device: leon2 timer */
 
98
#define GAISLER_L2C      0xffe  /* internal device: leon2compat */
 
99
#define GAISLER_PLUGPLAY 0xfff  /* internal device: plug & play configarea */
 
100
 
 
101
/* European Space Agency device id's */
 
102
#define ESA_LEON2        0x2
 
103
#define ESA_MCTRL        0xF
 
104
 
 
105
/* Opencores device id's */
 
106
#define OPENCORES_PCIBR  0x4
 
107
#define OPENCORES_ETHMAC 0x5
 
108
 
 
109
/* Vendor codes */
 
110
 
 
111
/*
 
112
 *
 
113
 * Macros for manipulating Configuration registers
 
114
 *
 
115
 */
 
116
 
 
117
#define amba_vendor(x) (((x) >> 24) & 0xff)
 
118
 
 
119
#define amba_device(x) (((x) >> 12) & 0xfff)
 
120
 
 
121
#define amba_membar_start(mbar) \
 
122
 (((mbar) & 0xfff00000) & (((mbar) & 0xfff0) << 16))
 
123
 
 
124
#define amba_iobar_start(base, iobar) \
 
125
 ((base) | ((((iobar) & 0xfff00000)>>12) & (((iobar) & 0xfff0)<<4)) )
 
126
 
 
127
#define amba_irq(conf) ((conf) & 0xf)
 
128
 
 
129
#define amba_ver(conf) (((conf)>>5) & 0x1f)
 
130
 
 
131
#define amba_membar_type(mbar) ((mbar) & 0xf)
 
132
 
 
133
#define amba_membar_mask(mbar) (((mbar)>>4) & 0xfff)
 
134
 
 
135
#define AMBA_TYPE_APBIO 0x1
 
136
#define AMBA_TYPE_MEM   0x2
 
137
#define AMBA_TYPE_AHBIO 0x3
 
138
 
 
139
#define AMBA_TYPE_AHBIO_ADDR(addr) (LEON3_IO_AREA | ((addr) >> 12))
 
140
 
 
141
#ifndef __ASSEMBLER__
 
142
 
 
143
#ifdef CONFIG_CMD_AMBAPP
 
144
 
 
145
/* AMBA Plug&Play relocation & initialization */
 
146
int ambapp_init_reloc(void);
 
147
 
 
148
/* AMBA Plug&Play Name of Vendors and devices */
 
149
 
 
150
/* Return name of device */
 
151
char *ambapp_device_id2str(int vendor, int id);
 
152
 
 
153
/* Return name of vendor */
 
154
char *ambapp_vendor_id2str(int vendor);
 
155
#endif
 
156
 
 
157
/*
 
158
 *  Types and structure used for AMBA Plug & Play bus scanning
 
159
 */
 
160
 
 
161
/* AMBA Plug&Play AHB information layout */
 
162
typedef struct {
 
163
        unsigned int conf;
 
164
        unsigned int userdef[3];
 
165
        unsigned int bars[4];
 
166
} ahbctrl_pp_dev;
 
167
 
 
168
/* Prototypes for scanning AMBA Plug&Play bus for AMBA
 
169
 *  i)   AHB Masters
 
170
 *  ii)  AHB Slaves
 
171
 *  iii) APB Slaves (APB MST is a AHB Slave)
 
172
 */
 
173
 
 
174
typedef struct {
 
175
        unsigned char irq;
 
176
        unsigned char ver;
 
177
        unsigned int address;
 
178
} ambapp_apbdev;
 
179
 
 
180
typedef struct {
 
181
        unsigned char irq;
 
182
        unsigned char ver;
 
183
        unsigned int userdef[3];
 
184
        unsigned int address[4];
 
185
} ambapp_ahbdev;
 
186
 
 
187
/* AMBA Plug&Play AHB Masters & Slaves information locations
 
188
 * Max devices is 64 supported by HW, however often only 8
 
189
 * are used.
 
190
 */
 
191
typedef struct {
 
192
        ahbctrl_pp_dev masters[64];
 
193
        ahbctrl_pp_dev slaves[64];
 
194
} ahbctrl_info;
 
195
 
 
196
/* AMBA Plug&Play AHB information layout */
 
197
typedef struct {
 
198
        unsigned int conf;
 
199
        unsigned int bar;
 
200
} apbctrl_pp_dev;
 
201
 
 
202
/* All functions return the number of found devices
 
203
 * 0 = no devices found
 
204
 */
 
205
 
 
206
/****************************** APB SLAVES ******************************/
 
207
int ambapp_apb_count(unsigned int vendor, unsigned int driver);
 
208
 
 
209
int ambapp_apb_first(unsigned int vendor,
 
210
                     unsigned int driver, ambapp_apbdev * dev);
 
211
 
 
212
int ambapp_apb_next(unsigned int vendor,
 
213
                    unsigned int driver, ambapp_apbdev * dev, int index);
 
214
 
 
215
int ambapp_apbs_first(unsigned int vendor,
 
216
                      unsigned int driver, ambapp_apbdev * dev, int max_cnt);
 
217
 
 
218
/****************************** AHB MASTERS ******************************/
 
219
int ambapp_ahbmst_count(unsigned int vendor, unsigned int driver);
 
220
 
 
221
int ambapp_ahbmst_first(unsigned int vendor,
 
222
                        unsigned int driver, ambapp_ahbdev * dev);
 
223
 
 
224
int ambapp_ahbmst_next(unsigned int vendor,
 
225
                       unsigned int driver, ambapp_ahbdev * dev, int index);
 
226
 
 
227
int ambapp_ahbmsts_first(unsigned int vendor,
 
228
                         unsigned int driver, ambapp_ahbdev * dev, int max_cnt);
 
229
 
 
230
/****************************** AHB SLAVES ******************************/
 
231
int ambapp_ahbslv_count(unsigned int vendor, unsigned int driver);
 
232
 
 
233
int ambapp_ahbslv_first(unsigned int vendor,
 
234
                        unsigned int driver, ambapp_ahbdev * dev);
 
235
 
 
236
int ambapp_ahbslv_next(unsigned int vendor,
 
237
                       unsigned int driver, ambapp_ahbdev * dev, int index);
 
238
 
 
239
int ambapp_ahbslvs_first(unsigned int vendor,
 
240
                         unsigned int driver, ambapp_ahbdev * dev, int max_cnt);
 
241
 
 
242
/*************************** AHB/APB only regs functions *************************
 
243
 * During start up, no memory is available we can use the simplified functions
 
244
 * to get to the memory controller.
 
245
 *
 
246
 * Functions uses no stack/memory, only registers.
 
247
 */
 
248
unsigned int ambapp_apb_next_nomem(register unsigned int vendor,        /* Plug&Play Vendor ID */
 
249
                                   register unsigned int driver,        /* Plug&Play Device ID */
 
250
                                   register int index);
 
251
 
 
252
ahbctrl_pp_dev *ambapp_ahb_next_nomem(register unsigned int vendor,     /* Plug&Play Vendor ID */
 
253
                                      register unsigned int driver,     /* Plug&Play Device ID */
 
254
                                      register unsigned int opts,       /* scan for AHB 1=slave, 0=masters */
 
255
                                      register int index);
 
256
 
 
257
unsigned int ambapp_ahb_get_info(ahbctrl_pp_dev * ahb, int info);
 
258
 
 
259
/*************************** AMBA Plug&Play device register MAPS *****************/
 
260
 
 
261
/*
 
262
 *  The following defines the bits in the LEON UART Status Registers.
 
263
 */
 
264
 
 
265
#define LEON_REG_UART_STATUS_DR   0x00000001    /* Data Ready */
 
266
#define LEON_REG_UART_STATUS_TSE  0x00000002    /* TX Send Register Empty */
 
267
#define LEON_REG_UART_STATUS_THE  0x00000004    /* TX Hold Register Empty */
 
268
#define LEON_REG_UART_STATUS_BR   0x00000008    /* Break Error */
 
269
#define LEON_REG_UART_STATUS_OE   0x00000010    /* RX Overrun Error */
 
270
#define LEON_REG_UART_STATUS_PE   0x00000020    /* RX Parity Error */
 
271
#define LEON_REG_UART_STATUS_FE   0x00000040    /* RX Framing Error */
 
272
#define LEON_REG_UART_STATUS_ERR  0x00000078    /* Error Mask */
 
273
 
 
274
/*
 
275
 *  The following defines the bits in the LEON UART Ctrl Registers.
 
276
 */
 
277
 
 
278
#define LEON_REG_UART_CTRL_RE     0x00000001    /* Receiver enable */
 
279
#define LEON_REG_UART_CTRL_TE     0x00000002    /* Transmitter enable */
 
280
#define LEON_REG_UART_CTRL_RI     0x00000004    /* Receiver interrupt enable */
 
281
#define LEON_REG_UART_CTRL_TI     0x00000008    /* Transmitter interrupt enable */
 
282
#define LEON_REG_UART_CTRL_PS     0x00000010    /* Parity select */
 
283
#define LEON_REG_UART_CTRL_PE     0x00000020    /* Parity enable */
 
284
#define LEON_REG_UART_CTRL_FL     0x00000040    /* Flow control enable */
 
285
#define LEON_REG_UART_CTRL_LB     0x00000080    /* Loop Back enable */
 
286
#define LEON_REG_UART_CTRL_DBG    (1<<11)       /* Debug Bit used by GRMON */
 
287
 
 
288
#define LEON3_GPTIMER_EN 1
 
289
#define LEON3_GPTIMER_RL 2
 
290
#define LEON3_GPTIMER_LD 4
 
291
#define LEON3_GPTIMER_IRQEN 8
 
292
 
 
293
/*
 
294
 *  The following defines the bits in the LEON PS/2 Status Registers.
 
295
 */
 
296
 
 
297
#define LEON_REG_PS2_STATUS_DR   0x00000001     /* Data Ready */
 
298
#define LEON_REG_PS2_STATUS_PE   0x00000002     /* Parity error */
 
299
#define LEON_REG_PS2_STATUS_FE   0x00000004     /* Framing error */
 
300
#define LEON_REG_PS2_STATUS_KI   0x00000008     /* Keyboard inhibit */
 
301
 
 
302
/*
 
303
 *  The following defines the bits in the LEON PS/2 Ctrl Registers.
 
304
 */
 
305
 
 
306
#define LEON_REG_PS2_CTRL_RE     0x00000001     /* Receiver enable */
 
307
#define LEON_REG_PS2_CTRL_TE     0x00000002     /* Transmitter enable */
 
308
#define LEON_REG_PS2_CTRL_RI     0x00000004     /* Keyboard receive interrupt  */
 
309
#define LEON_REG_PS2_CTRL_TI     0x00000008     /* Keyboard transmit interrupt */
 
310
 
 
311
typedef struct {
 
312
        volatile unsigned int ilevel;
 
313
        volatile unsigned int ipend;
 
314
        volatile unsigned int iforce;
 
315
        volatile unsigned int iclear;
 
316
        volatile unsigned int mstatus;
 
317
        volatile unsigned int notused[11];
 
318
        volatile unsigned int cpu_mask[16];
 
319
        volatile unsigned int cpu_force[16];
 
320
} ambapp_dev_irqmp;
 
321
 
 
322
typedef struct {
 
323
        volatile unsigned int data;
 
324
        volatile unsigned int status;
 
325
        volatile unsigned int ctrl;
 
326
        volatile unsigned int scaler;
 
327
} ambapp_dev_apbuart;
 
328
 
 
329
typedef struct {
 
330
        volatile unsigned int val;
 
331
        volatile unsigned int rld;
 
332
        volatile unsigned int ctrl;
 
333
        volatile unsigned int unused;
 
334
} ambapp_dev_gptimer_element;
 
335
 
 
336
#define LEON3_GPTIMER_CTRL_EN   0x1     /* Timer enable */
 
337
#define LEON3_GPTIMER_CTRL_RS   0x2     /* Timer reStart  */
 
338
#define LEON3_GPTIMER_CTRL_LD   0x4     /* Timer reLoad */
 
339
#define LEON3_GPTIMER_CTRL_IE   0x8     /* interrupt enable */
 
340
#define LEON3_GPTIMER_CTRL_IP   0x10    /* interrupt flag/pending */
 
341
#define LEON3_GPTIMER_CTRL_CH   0x20    /* Chain with previous timer */
 
342
 
 
343
typedef struct {
 
344
        volatile unsigned int scalar;
 
345
        volatile unsigned int scalar_reload;
 
346
        volatile unsigned int config;
 
347
        volatile unsigned int unused;
 
348
        volatile ambapp_dev_gptimer_element e[8];
 
349
} ambapp_dev_gptimer;
 
350
 
 
351
typedef struct {
 
352
        volatile unsigned int iodata;
 
353
        volatile unsigned int ioout;
 
354
        volatile unsigned int iodir;
 
355
        volatile unsigned int irqmask;
 
356
        volatile unsigned int irqpol;
 
357
        volatile unsigned int irqedge;
 
358
} ambapp_dev_ioport;
 
359
 
 
360
typedef struct {
 
361
        volatile unsigned int write;
 
362
        volatile unsigned int dummy;
 
363
        volatile unsigned int txcolor;
 
364
        volatile unsigned int bgcolor;
 
365
} ambapp_dev_textvga;
 
366
 
 
367
typedef struct {
 
368
        volatile unsigned int data;
 
369
        volatile unsigned int status;
 
370
        volatile unsigned int ctrl;
 
371
} ambapp_dev_apbps2;
 
372
 
 
373
typedef struct {
 
374
        unsigned int mcfg1, mcfg2, mcfg3;
 
375
} ambapp_dev_mctrl;
 
376
 
 
377
typedef struct {
 
378
        unsigned int sdcfg;
 
379
} ambapp_dev_sdctrl;
 
380
 
 
381
typedef struct {
 
382
        unsigned int cfg1;
 
383
        unsigned int cfg2;
 
384
        unsigned int cfg3;
 
385
} ambapp_dev_ddr2spa;
 
386
 
 
387
typedef struct {
 
388
        unsigned int ctrl;
 
389
        unsigned int cfg;
 
390
} ambapp_dev_ddrspa;
 
391
 
 
392
#endif
 
393
 
 
394
#endif