source: rtems/c/src/lib/libbsp/powerpc/gen5200/include/mpc5200.h @ ca680bc5

4.104.114.84.95
Last change on this file since ca680bc5 was ca680bc5, checked in by Ralf Corsepius <ralf.corsepius@…>, on 12/31/05 at 05:09:26

New (CVS import Thomas Doerfler <Thomas.Doerfler@…>'s
submission).

  • Property mode set to 100644
File size: 43.0 KB
Line 
1/*===============================================================*\
2| Project: RTEMS generic MPC5200 BSP                              |
3+-----------------------------------------------------------------+
4| File: mpc5200.h
5+-----------------------------------------------------------------+
6| Partially based on the code references which are named below.   |
7| Adaptions, modifications, enhancements and any recent parts of  |
8| the code are:                                                   |
9|                    Copyright (c) 2005                           |
10|                    Embedded Brains GmbH                         |
11|                    Obere Lagerstr. 30                           |
12|                    D-82178 Puchheim                             |
13|                    Germany                                      |
14|                    rtems@embedded-brains.de                     |
15+-----------------------------------------------------------------+
16| The license and distribution terms for this file may be         |
17| found in the file LICENSE in this distribution or at            |
18|                                                                 |
19| http://www.rtems.com/license/LICENSE.                           |
20|                                                                 |
21+-----------------------------------------------------------------+
22| this file contains definitions for the mpc5200 hw registers     |
23+-----------------------------------------------------------------+
24|   date                      history                        ID   |
25| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
26| 01.12.05  creation                                         doe  |
27|*****************************************************************|
28|*CVS information:                                                |
29|*(the following information is created automatically,            |
30|*do not edit here)                                               |
31|*****************************************************************|
32|* $Log$
33|* Revision 1.4  2005/12/09 08:57:03  thomas
34|* added/modifed file headers
35|*
36|* Revision 1.3  2005/12/06 14:30:42  thomas
37|* updated name for peripheral register block
38|*
39|* Revision 1.2  2005/12/06 14:11:12  thomas
40|* added EB file headers
41|*
42 *
43|*****************************************************************|
44\*===============================================================*/
45
46#ifndef __MPC5200_h__
47#define __MPC5200_h__
48
49/* Additional Harpo Core SPR definitions (603le only) */
50#define CSRR0   58              /* Critical Interrupt SRR0 */
51#define CSRR1   59              /* Critical Interrupt SRR1 */
52#define SPRG4   276             /* Special Purpose Register 4 */
53#define SPRG5   277             /* Special Purpose Register 5 */
54#define SPRG6   278             /* Special Purpose Register 6 */
55#define SPRG7   279             /* Special Purpose Register 7 */
56#define IBAT4U  560             /* Instruction BAT #0 Upper/Lower */
57#define IBAT4L  561
58#define IBAT5U  562             /* Instruction BAT #1 Upper/Lower */
59#define IBAT5L  563
60#define IBAT6U  564             /* Instruction BAT #2 Upper/Lower */
61#define IBAT6L  565
62#define IBAT7U  566             /* Instruction BAT #3 Upper/Lower */
63#define IBAT7L  567
64#define DBAT4U  568             /* Data BAT #0 Upper/Lower */
65#define DBAT4L  569
66#define DBAT5U  570             /* Data BAT #1 Upper/Lower */
67#define DBAT5L  571
68#define DBAT6U  572             /* Data BAT #2 Upper/Lower */
69#define DBAT6L  573
70#define DBAT7U  574             /* Data BAT #3 Upper/Lower */
71#define DBAT7L  575
72#define DABR2   1000            /* Data Address Breakpoint #2 */
73#define DBCR    1001            /* Data Address Breakpoint Control */
74#define IBCR    1002            /* Instruction Breakpoint Control */
75#define HID1    1009            /* Hardware Implementation 1 */
76#define HID2    1011            /* Hardware Implementation 2 */
77#define DABR    1013            /* Data Address Breakpoint */
78#define IABR2   1018            /* Instruction Breakpoint #2 */
79
80/*
81 * Initial post-reset location of MGT5100 module base address register (MBAR)
82 */
83#define MBAR_RESET          0x80000000
84
85/*
86 * Location and size of onchip SRAM (relative to MBAR)
87 */
88#define ONCHIP_SRAM_OFFSET  0x8000
89#define ONCHIP_SRAM_SIZE    0x4000
90
91#ifndef ASM
92#include <rtems.h>
93
94#ifdef __cplusplus
95extern "C" {
96#endif
97
98#define MPC5200_CAN_NO                               2
99#define MPC5200_PSC_NO                               6
100  /* XXX: there are only 6 PSCs, but PSC6 has an extra register gap
101   *      from PSC5, therefore we instantiate seven(!) PSC register sets
102   */
103#define MPC5200_PSC_REG_SETS                         7
104
105#define MPC5200_GPT_NO                               8
106#define MPC5200_SLT_NO                               2
107
108/*
109 * Bit fields for FEC interrupts, ievent and imask above.
110 */
111#define FEC_INTR_HBERR          0x80000000      /* heartbeat error                              */
112#define FEC_INTR_BABR           0x40000000      /* babbling receive error               */
113#define FEC_INTR_BABT           0x20000000      /* babbling transmit error              */
114#define FEC_INTR_GRA            0x10000000      /* graceful stop complete               */
115#define FEC_INTR_TFINT          0x08000000      /* transmit frame interrupt             */
116/*                                                      0x04000000      reserved                                                */
117/*                                                      0x02000000      reserved                                                */
118/*                                                      0x01000000      reserved                                                */
119#define FEC_INTR_MII            0x00800000      /* MII interrupt                                */
120/*                                                      0x00400000      reserved                                                */
121#define FEC_INTR_LATE_COL       0x00200000      /* late collision                               */
122#define FEC_INTR_COL_RETRY      0x00100000      /* collision retry limit                */
123#define FEC_INTR_XFIFO_UN       0x00080000      /* transmit FIFO error                  */
124#define FEC_INTR_XFIFO_ERR      0x00040000      /* transmit FIFO error                  */
125#define FEC_INTR_RFIFO_ERR      0x00020000      /* receive FIFO error                   */
126/*                                                      0x00010000      reserved                                                */
127/*                                                      0x0000ffff      reserved                                                */
128#define FEC_INTR_HBEEN          FEC_INTR_HBERR
129#define FEC_INTR_BREN           FEC_INTR_BABR
130#define FEC_INTR_BTEN           FEC_INTR_BABT
131#define FEC_INTR_GRAEN          FEC_INTR_GRA
132#define FEC_INTR_TFINTEN        FEC_INTR_TFINT
133#define FEC_INTR_MIIEN          FEC_INTR_MII
134#define FEC_INTR_LCEN           FEC_INTR_LATE_COL
135#define FEC_INTR_CRLEN          FEC_INTR_COL_RETRY
136#define FEC_INTR_XFUNEN         FEC_INTR_XFIFO_UN
137#define FEC_INTR_XFERREN        FEC_INTR_XFIFO_ERR
138#define FEC_INTR_RFERREN        FEC_INTR_RFIFO_ERR
139#define FEC_INTR_CLEAR_ALL      0xffffffff      /* clear all interrupt events   */
140#define FEC_INTR_MASK_ALL       0x00000000      /* mask all interrupt events    */
141
142/*
143 * Bit fields for FEC ethernet control, ecntrl above.
144 */
145#define FEC_ECNTRL_TAG          0xf0000000      /* TBUS tag bits                                */
146/*                                                      0x08000000      reserved                                                */
147#define FEC_ECNTRL_TESTMD       0x04000000      /* test mode                                    */
148/*                                                      0x03fffff8      reserved                                                */
149#define FEC_ECNTRL_OE           0x00000004      /* FEC output enable                    */
150#define FEC_ECNTRL_EN           0x00000002      /* ethernet enable                              */
151#define FEC_ECNTRL_RESET        0x00000001      /* ethernet controller reset    */
152
153/*
154 * Bit fields for FEC receive control, r_cntrl above.
155 */
156/*                                                      0xf1000000      reserved                                                */
157#define FEC_RCNTRL_MAX_FL       0x07ff0000      /* maximum frame length                 */
158#define FEC_RCNTRL_MAX_FL_SHIFT 16
159/*                                                      0x0000ffc0      reserved                                                */
160#define FEC_RCNTRL_FCE          0x00000020      /* flow control enable                  */
161#define FEC_RCNTRL_BC_REJ       0x00000010      /* broadcast frame reject               */
162#define FEC_RCNTRL_PROM         0x00000008      /* promiscuous mode                             */
163#define FEC_RCNTRL_MII_MODE     0x00000004      /* select 18-wire (MII) mode    */
164#define FEC_RCNTRL_DRT          0x00000002      /* disable receive on transmit  */
165#define FEC_RCNTRL_LOOP         0x00000001      /* internal loopback                    */
166
167/*
168 * Bit fields for FEC transmit control, x_cntrl above.
169 */
170/*                                                      0xffffffe0      reserved                                                */
171#define FEC_XCNTRL_RFC_PAUS 0x00000010  /* FDX flow control pause rx    */
172#define FEC_XCNTRL_TFC_PAUS     0x00000008      /* assert a PAUSE frame                 */
173#define FEC_XCNTRL_FDEN         0x00000004      /* full duplex enable                   */
174#define FEC_XCNTRL_HBC          0x00000002      /* heartbeat control                    */
175#define FEC_XCNTRL_GTS          0x00000001      /* graceful transmit stop               */
176
177/*
178 * Bit fields for FEC transmit status, x_status above.
179 */
180/*                                                      0xfc000000      reserved                                                */
181#define FEC_XSTAT_DEF           0x02000000      /* defer                                                */
182#define FEC_XSTAT_HB            0x01000000      /* heartbeat error                              */
183#define FEC_XSTAT_LC            0x00800000      /* late collision                               */
184#define FEC_XSTAT_RL            0x00400000      /* retry limit                                  */
185#define FEC_XSTAT_RC            0x003c0000      /* retry count                                  */
186#define FEC_XSTAT_UN            0x00020000      /* underrun                                             */
187#define FEX_XSTAT_CSL           0x00010000      /* carrier sense lost                   */
188/*                                                      0x0000ffff      reserved                                                */
189
190/*
191 * Bit fields for FEC transmit FIFO watermark, x_wmrk above.
192 */
193#define FEC_XWMRK_64            0x00000000      /*   64 bytes written to TxFIFO */
194#define FEC_XWMRK_128           0x00000001      /*  128 bytes written to TxFIFO */
195#define FEC_XWMRK_192           0x00000002      /*  192 bytes written to TxFIFO */
196#define FEC_XWMRK_256           0x00000003      /*  256 bytes written to TxFIFO */
197#define FEC_XWMRK_320           0x00000004      /*  320 bytes written to TxFIFO */
198#define FEC_XWMRK_384           0x00000005      /*  384 bytes written to TxFIFO */
199#define FEC_XWMRK_448           0x00000006      /*  448 bytes written to TxFIFO */
200#define FEC_XWMRK_512           0x00000007      /*  512 bytes written to TxFIFO */
201#define FEC_XWMRK_576           0x00000008      /*  576 bytes written to TxFIFO */
202#define FEC_XWMRK_640           0x00000009      /*  640 bytes written to TxFIFO */
203#define FEC_XWMRK_704           0x0000000a      /*  704 bytes written to TxFIFO */
204#define FEC_XWMRK_768           0x0000000b      /*  768 bytes written to TxFIFO */
205#define FEC_XWMRK_832           0x0000000c      /*  832 bytes written to TxFIFO */
206#define FEC_XWMRK_896           0x0000000d      /*  896 bytes written to TxFIFO */
207#define FEC_XWMRK_960           0x0000000e      /*  960 bytes written to TxFIFO */
208#define FEC_XWMRK_1024          0x0000000f      /* 1024 bytes written to TxFIFO */
209
210/*
211 * Bit fields for FEC transmit finite state machine.
212 */
213/*                                                      0xfc000000      reserved                                                */
214#define FEC_FSM_CRC                     0x02000000      /* append CRC (typical use)             */
215#define FEC_FSM_ENFSM           0x01000000      /* enable CRC FSM (typical use) */
216/*                                                      0x00ffffff      reserved                                                */
217
218/*
219 * Bit fields for FEC FIFOs, rfifo_status, rfifo_cntrl, tfifo_status
220 * and tfifo_cntrl.
221 */
222#define FEC_FIFO_STAT_IP        0x80000000      /* illegal pointer, sticky              */
223/*                                                      0x70000000      reserved                                                */
224#define FEC_FIFO_STAT_FRAME     0x0f000000      /* frame indicator                              */
225#define FEC_FIFO_STAT_FAE       0x00800000      /* frame accept error                   */
226#define FEC_FIFO_STAT_RXW       0x00400000      /* receive wait condition               */
227#define FEC_FIFO_STAT_UF        0x00200000      /* underflow                                    */
228#define FEC_FIFO_STAT_OF        0x00100000      /* overflow                                             */
229#define FEC_FIFO_STAT_FR        0x00080000      /* frame ready, read-only               */
230#define FEC_FIFO_STAT_FULL      0x00040000      /* full alarm, read-only                */
231#define FEC_FIFO_STAT_ALARM     0x00020000      /* fifo alarm                                   */
232#define FEC_FIFO_STAT_EMPTY     0x00010000      /* empty, read-only                             */
233/*                                                      0x0000ffff      reserved                                                */
234#define FEC_FIFO_STAT_ERROR     ( FEC_FIFO_STAT_IP      \
235                                                        | FEC_FIFO_STAT_FAE     \
236                                                        | FEC_FIFO_STAT_RXW     \
237                                                        | FEC_FIFO_STAT_UF      \
238                                                        | FEC_FIFO_STAT_OF      \
239                                                        )
240
241/*                                                              0x80000000      reserved                                                */
242#define FEC_FIFO_CNTRL_WCTL             0x40000000      /* write control                                */
243#define FEC_FIFO_CNTRL_WFR              0x20000000      /* write frame                                  */
244/*                                                              0x10000000      reserved                                                */
245#define FEC_FIFO_CNTRL_FRAME    0x08000000      /* frame mode enable    */
246#define FEC_FIFO_CNTRL_GR               0x07000000      /* last transfer granularity    */
247#define FEC_FIFO_CNTRL_GR_SHIFT 24
248#define FEC_FIFO_CNTRL_IP_MASK  0x00800000      /* illegal pointer mask                 */
249#define FEC_FIFO_CNTRL_FAE_MASK 0x00400000      /* frame accept mask                    */
250#define FEC_FIFO_CNTRL_RXW_MASK 0x00200000      /* receive wait mask                    */
251#define FEC_FIFO_CNTRL_UF_MASK  0x00100000      /* underflow mask                               */
252#define FEC_FIFO_CNTRL_OF_MASK  0x00080000      /* overflow mask                                */
253/*                                                              0x0007ffff      reserved                                                */
254
255/*
256*************************************************************************
257*                 MPC5x00 internal register memory map                  *
258*************************************************************************
259*/
260typedef struct mpc5200_
261        {
262        /*
263         * memory map registers (MBAR + 0)
264         */
265        volatile uint8_t                mm[0x80];
266
267        /*
268         * arbiter registers (processor bus) (MBAR + 0x80)
269         */
270        volatile uint8_t                arb[0x80];
271
272        /*
273         * SDRAM memory controller registers (MBAR + 0x100)
274         */
275        volatile uint8_t                mc[0x100];
276
277        /*
278         * clock distribution module registers (MBAR + 0x200)
279         */
280        volatile uint8_t                cdm[0x100];
281
282        /*
283         * chip selct controller registers(MBAR + 0x300)
284         */
285        volatile uint8_t                csc[0x100];
286
287        /*
288         * SmartComm timer registers (MBAR + 0x400)
289         */
290        volatile uint8_t                sct[0x100];
291
292        /*
293         * interrupt controller registers (MBAR + 0x500)
294         */
295    volatile uint32_t    per_mask;                      /* + 0x00 */
296        volatile uint32_t    per_pri_1;                 /* + 0x04 */
297        volatile uint32_t    per_pri_2;                 /* + 0x08 */
298        volatile uint32_t    per_pri_3;                 /* + 0x0C */
299        volatile uint32_t    ext_en_type;               /* + 0x10 */
300        volatile uint32_t    crit_pri_main_mask;/* + 0x14 */
301        volatile uint32_t    main_pri_1;        /* + 0x18 */
302        volatile uint32_t    main_pri_2;                /* + 0x1C */
303        volatile uint32_t    res1;                              /* + 0x20 */
304        volatile uint32_t    pmce;                              /* + 0x24 */
305        volatile uint32_t    csa;                               /* + 0x28 */
306        volatile uint32_t    msa;                               /* + 0x2C */
307        volatile uint32_t    psa;                               /* + 0x30 */
308        volatile uint32_t    res2;                              /* + 0x34 */
309        volatile uint32_t    psa_be;                    /* + 0x38 */
310        volatile uint8_t     res3[0xC4];                /* + 0x3C */
311
312        /*
313         * general pupose timer registers (MBAR + 0x600/+0x610/+0x620/+0x630/+0x640/+0x650/+0x660/+0x670)
314         */
315  struct mpc5200_gpt
316    {
317        volatile uint32_t        emsel;     /* + 0x00 */
318        volatile uint32_t    count_in;  /* + 0x04 */
319        volatile uint32_t    pwm_conf;  /* + 0x08 */
320        volatile uint32_t    status;    /* + 0x0C */
321    } gpt[MPC5200_GPT_NO];
322
323#define GPT_STATUS_RESET           0x0000000F
324#define GPT_STATUS_TEXP            (1 << 3)
325#define GPT_STATUS_PIN             (1 << 8)
326#define GPT_EMSEL_GPIO_OUT_HIGH    (3 << 4)
327#define GPT_EMSEL_TIMER_MS_GPIO    (4 << 0)
328#define GPT_EMSEL_GPIO_IN          (0 << 0)
329#define GPT_EMSEL_CE               (1 << 12)
330#define GPT_EMSEL_ST_CONT          (1 << 10)
331#define GPT_EMSEL_INTEN            (1 << 8)
332
333#define GPT0                       0
334#define GPT1                       1
335#define GPT2                       2
336#define GPT3                       3
337#define GPT4                       4
338#define GPT5                       5
339#define GPT6                       6
340#define GPT7                       7
341
342        volatile uint8_t         gpt_res[0x80];
343
344        /*
345         * slice time registers (MBAR + 0x700/+0x710)
346         */
347  struct mpc5200_slt
348    {
349        volatile uint32_t        tcr;       /* + 0x00 */
350        volatile uint32_t        cntrl;     /* + 0x04 */
351        volatile uint32_t        cvr;       /* + 0x08 */
352        volatile uint32_t        tsr;       /* + 0x0C */
353    } slt[MPC5200_SLT_NO];
354
355    volatile uint8_t     slt_res[0xE0];
356
357        /*
358         * real time clock registers (MBAR + 0x800)
359         */
360        volatile uint8_t                rtc[0x100];
361
362
363    /*
364     * MSCAN registers (MBAR + 0x900 /+0x980)
365     */
366  struct mpc5200_mscan
367    {
368        volatile uint8_t                ctl0;           /* + 0x0 */
369        volatile uint8_t                ctl1;           /* + 0x1 */
370        volatile uint8_t                res1;           /* + 0x2 */
371        volatile uint8_t                res2;           /* + 0x3 */
372        volatile uint8_t                btr0;           /* + 0x4 */
373        volatile uint8_t                btr1;           /* + 0x5 */
374        volatile uint8_t                res3;           /* + 0x6 */
375        volatile uint8_t                res4;           /* + 0x7 */
376        volatile uint8_t                rflg;           /* + 0x8 */
377        volatile uint8_t                rier;           /* + 0x9 */
378        volatile uint8_t                res5;           /* + 0xA */
379        volatile uint8_t                res6;           /* + 0xB */
380        volatile uint8_t                tflg;           /* + 0xC */
381        volatile uint8_t                tier;           /* + 0xD */
382        volatile uint8_t                res7;           /* + 0xE */
383        volatile uint8_t                res8;           /* + 0xF */
384        volatile uint8_t                tarq;           /* + 0x10 */
385        volatile uint8_t                taak;           /* + 0x11 */
386        volatile uint8_t                res9;           /* + 0x12 */
387        volatile uint8_t                res10;          /* + 0x13 */
388        volatile uint8_t                bsel;           /* + 0x14 */
389        volatile uint8_t                idac;           /* + 0x15 */
390        volatile uint8_t                res11;          /* + 0x16 */
391        volatile uint8_t                res12;          /* + 0x17 */
392        volatile uint8_t                res13;          /* + 0x18 */
393        volatile uint8_t                res14;          /* + 0x19 */
394        volatile uint8_t                res15;          /* + 0x1A */
395        volatile uint8_t                res16;          /* + 0x1B */
396        volatile uint8_t                rxerr;          /* + 0x1C */
397        volatile uint8_t                txerr;          /* + 0x1D */
398        volatile uint8_t                res17;          /* + 0x1E */
399        volatile uint8_t                res18;          /* + 0x1F */
400        volatile uint8_t                idar0;          /* + 0x20 */
401        volatile uint8_t                idar1;          /* + 0x21 */
402        volatile uint8_t                res19;          /* + 0x22 */
403        volatile uint8_t                res20;          /* + 0x23 */
404        volatile uint8_t                idar2;          /* + 0x24 */
405        volatile uint8_t                idar3;          /* + 0x25 */
406        volatile uint8_t                res21;          /* + 0x26 */
407        volatile uint8_t                res22;          /* + 0x27 */
408        volatile uint8_t                idmr0;          /* + 0x28 */
409        volatile uint8_t                idmr1;          /* + 0x29 */
410        volatile uint8_t                res23;          /* + 0x2A */
411        volatile uint8_t                res24;          /* + 0x2B */
412        volatile uint8_t                idmr2;          /* + 0x2C */
413        volatile uint8_t                idmr3;          /* + 0x2D */
414        volatile uint8_t                res25;          /* + 0x2E */
415        volatile uint8_t                res26;          /* + 0x2F */
416        volatile uint8_t                idar4;          /* + 0x30 */
417        volatile uint8_t                idar5;          /* + 0x31 */
418        volatile uint8_t                res27;          /* + 0x32 */
419        volatile uint8_t                res28;          /* + 0x33 */
420        volatile uint8_t                idar6;          /* + 0x34 */
421        volatile uint8_t                idar7;          /* + 0x35 */
422        volatile uint8_t                res29;          /* + 0x36 */
423        volatile uint8_t                res30;          /* + 0x37 */
424        volatile uint8_t                idmr4;          /* + 0x38 */
425        volatile uint8_t                idmr5;          /* + 0x39 */
426        volatile uint8_t                res31;          /* + 0x3A */
427        volatile uint8_t                res32;          /* + 0x3B */
428        volatile uint8_t                idmr6;          /* + 0x3C */
429        volatile uint8_t                idmr7;          /* + 0x3D */
430        volatile uint8_t                res33;          /* + 0x3E */
431        volatile uint8_t                res34;          /* + 0x3F */
432        volatile uint8_t                rxidr0;     /* + 0x40 */
433        volatile uint8_t                rxidr1;     /* + 0x41 */
434        volatile uint8_t                res35;          /* + 0x42 */
435        volatile uint8_t                res36;          /* + 0x43 */
436        volatile uint8_t                rxidr2;     /* + 0x44 */
437        volatile uint8_t                rxidr3;     /* + 0x45 */
438        volatile uint8_t                res37;          /* + 0x46 */
439        volatile uint8_t                res38;          /* + 0x47 */
440        volatile uint8_t                rxdsr0;     /* + 0x48 */
441        volatile uint8_t                rxdsr1;     /* + 0x49 */
442        volatile uint8_t                res39;          /* + 0x4A */
443        volatile uint8_t                res40;          /* + 0x4B */
444        volatile uint8_t                rxdsr2;     /* + 0x4C */
445        volatile uint8_t                rxdsr3;     /* + 0x4D */
446        volatile uint8_t                res41;          /* + 0x4E */
447        volatile uint8_t                res42;          /* + 0x4F */
448        volatile uint8_t                rxdsr4;     /* + 0x50 */
449        volatile uint8_t                rxdsr5;     /* + 0x51 */
450        volatile uint8_t                res43;          /* + 0x52 */
451        volatile uint8_t                res44;          /* + 0x53 */
452        volatile uint8_t                rxdsr6;     /* + 0x54 */
453        volatile uint8_t                rxdsr7;     /* + 0x55 */
454        volatile uint8_t                res45;          /* + 0x56 */
455        volatile uint8_t                res46;          /* + 0x57 */
456        volatile uint8_t                rxdlr;          /* + 0x58 */
457        volatile uint8_t                res47;          /* + 0x59 */
458        volatile uint8_t                res48;          /* + 0x5A */
459        volatile uint8_t                res49;          /* + 0x5B */
460        volatile uint8_t                rxtimh;     /* + 0x5C */
461        volatile uint8_t                rxtiml;     /* + 0x5D */
462        volatile uint8_t                res50;          /* + 0x5E */
463        volatile uint8_t                res51;          /* + 0x5F */
464        volatile uint8_t                txidr0;     /* + 0x60 */
465        volatile uint8_t                txidr1;     /* + 0x61 */
466        volatile uint8_t                res52;          /* + 0x62 */
467        volatile uint8_t                res53;          /* + 0x63 */
468        volatile uint8_t                txidr2;     /* + 0x64 */
469        volatile uint8_t                txidr3;     /* + 0x65 */
470        volatile uint8_t                res54;          /* + 0x66 */
471        volatile uint8_t                res55;          /* + 0x67 */
472        volatile uint8_t                txdsr0;     /* + 0x68 */
473        volatile uint8_t                txdsr1;     /* + 0x69 */
474        volatile uint8_t                res56;          /* + 0x6A */
475        volatile uint8_t                res57;          /* + 0x6B */
476        volatile uint8_t                txdsr2;     /* + 0x6C */
477        volatile uint8_t                txdsr3;     /* + 0x6D */
478        volatile uint8_t                res58;          /* + 0x6E */
479        volatile uint8_t                res59;          /* + 0x6F */
480        volatile uint8_t                txdsr4;     /* + 0x70 */
481        volatile uint8_t                txdsr5;     /* + 0x71 */
482        volatile uint8_t                res60;          /* + 0x72 */
483        volatile uint8_t                res61;          /* + 0x73 */
484        volatile uint8_t                txdsr6;     /* + 0x74 */
485        volatile uint8_t                txdsr7;     /* + 0x75 */
486        volatile uint8_t                res62;          /* + 0x76 */
487        volatile uint8_t                res63;          /* + 0x77 */
488        volatile uint8_t                txdlr;          /* + 0x78 */
489        volatile uint8_t                txtbpr;     /* + 0x79 */
490        volatile uint8_t                res64;          /* + 0x7A */
491        volatile uint8_t                res65;          /* + 0x7B */
492        volatile uint8_t                txtimh;     /* + 0x7C */
493        volatile uint8_t                txtiml;     /* + 0x7D */
494        volatile uint8_t                res66;          /* + 0x7E */
495        volatile uint8_t                res67;          /* + 0x7F */
496    } mscan[MPC5200_CAN_NO];
497
498        volatile uint8_t                res[0x100];
499
500        /*
501         * GPIO standard registers (MBAR + 0xB00)
502         */
503    volatile uint32_t gpiopcr;      /* + 0x00 */
504    volatile uint32_t gpiosen;      /* + 0x04 */
505    volatile uint32_t gpiosod;      /* + 0x08 */
506    volatile uint32_t gpiosdd;      /* + 0x0C */
507    volatile uint32_t gpiosdo;      /* + 0x10 */
508    volatile uint32_t gpiosdi;      /* + 0x14 */
509    volatile uint32_t gpiooe;       /* + 0x18 */
510    volatile uint32_t gpioodo;      /* + 0x1C */
511    volatile uint32_t gpiosie;      /* + 0x20 */
512    volatile uint32_t gpiosiod;     /* + 0x24 */
513    volatile uint32_t gpiosidd;     /* + 0x28 */
514    volatile uint32_t gpiosido;     /* + 0x2C */
515    volatile uint32_t gpiosiie;     /* + 0x30 */
516    volatile uint32_t gpiosiit;     /* + 0x34 */
517    volatile uint32_t gpiosime;     /* + 0x38 */
518    volatile uint32_t gpiosist;     /* + 0x3C */
519    volatile uint8_t  res4[0xC0];
520
521        /*
522         * GPIO wakeup registers (MBAR + 0xC00)
523         */
524        volatile uint32_t gpiowe;           /* + 0x00 */
525        volatile uint32_t gpiowod;          /* + 0x04 */
526        volatile uint32_t gpiowdd;          /* + 0x08 */
527        volatile uint32_t gpiowdo;          /* + 0x0C */
528        volatile uint32_t gpiowue;          /* + 0x10 */
529        volatile uint32_t gpiowsie;         /* + 0x14 */
530        volatile uint32_t gpiowt;           /* + 0x18 */
531        volatile uint32_t gpiowme;          /* + 0x1C */
532        volatile uint32_t gpiowi;           /* + 0x20 */
533        volatile uint32_t gpiows;           /* + 0x24 */
534        volatile uint8_t  gpiow_res[0xD8];
535
536        /*
537         * PPC PCI registers (MBAR + 0xD00)
538         */
539        volatile uint8_t                ppci[0x100];
540
541        /*
542         * consumer infrared registers (MBAR + 0xE00)
543         */
544        volatile uint8_t                ir[0x100];
545
546        /*
547         * serial peripheral interface registers (MBAR + 0xF00)
548         */
549        volatile uint8_t                spi[0x100];
550
551        /*
552         * universal serial bus registers (MBAR + 0x1000)
553         */
554        volatile uint8_t                usb[0x200];
555
556        /*
557         * SmartComm DMA registers (MBAR + 0x1200)
558         */
559        volatile uint32_t taskBar;                      /* + 0x00 sdTpb */
560        volatile uint32_t currentPointer;       /* + 0x04 sdMdeComplex */
561        volatile uint32_t endPointer;           /* + 0x08 sdMdeComplex */
562        volatile uint32_t variablePointer;      /* + 0x0c sdMdeComplex */
563
564        /*
565         * The following are Priority Task Decoder (ptd) regs in sdma/rtl_v/sdPtd.v.
566         * The ptd register map below is from the smartcomm spec, table 3-2, page 3-54.
567         * The spec shows the ptd map as 20 words, but sdPtd.v has only implemented 19.
568         * The word commented out below is the one which is not implemented.
569         */
570
571        /*  volatile uint8_t  IntVect; *//*
572         * + 0xXX sdPtd read only
573         */
574
575        /*  volatile uint8_t  res0[3]; *//*
576         * + 0xXX sdPtd read only
577         */
578        volatile uint8_t IntVect1;          /* + 0x10 sdPtd */
579        volatile uint8_t IntVect2;          /* + 0x11 sdPtd */
580        volatile uint16_t PtdCntrl;         /* + 0x12 sdPtd */
581
582        volatile uint32_t IntPend;          /* + 0x14 sdPtd */
583        volatile uint32_t IntMask;          /* + 0x18 sdPtd */
584
585        volatile uint32_t TCR01;                    /* + 0x1c sdPtd */
586        volatile uint32_t TCR23;                    /* + 0x20 sdPtd */
587        volatile uint32_t TCR45;                    /* + 0x24 sdPtd */
588        volatile uint32_t TCR67;                    /* + 0x28 sdPtd */
589        volatile uint32_t TCR89;                    /* + 0x2c sdPtd */
590        volatile uint32_t TCRAB;                    /* + 0x30 sdPtd */
591        volatile uint32_t TCRCD;                    /* + 0x34 sdPtd */
592        volatile uint32_t TCREF;                    /* + 0x38 sdPtd */
593
594        volatile uint8_t IPR0;              /* + 0x3c sdPtd */
595        volatile uint8_t IPR1;              /* + 0x3d sdPtd */
596        volatile uint8_t IPR2;              /* + 0x3e sdPtd */
597        volatile uint8_t IPR3;              /* + 0x3f sdPtd */
598        volatile uint8_t IPR4;              /* + 0x40 sdPtd */
599        volatile uint8_t IPR5;              /* + 0x41 sdPtd */
600        volatile uint8_t IPR6;              /* + 0x42 sdPtd */
601        volatile uint8_t IPR7;              /* + 0x43 sdPtd */
602        volatile uint8_t IPR8;              /* + 0x44 sdPtd */
603        volatile uint8_t IPR9;              /* + 0x45 sdPtd */
604        volatile uint8_t IPR10;             /* + 0x46 sdPtd */
605        volatile uint8_t IPR11;             /* + 0x47 sdPtd */
606        volatile uint8_t IPR12;             /* + 0x48 sdPtd */
607        volatile uint8_t IPR13;             /* + 0x49 sdPtd */
608        volatile uint8_t IPR14;             /* + 0x4a sdPtd */
609        volatile uint8_t IPR15;             /* + 0x4b sdPtd */
610        volatile uint8_t IPR16;             /* + 0x4c sdPtd */
611        volatile uint8_t IPR17;             /* + 0x4d sdPtd */
612        volatile uint8_t IPR18;             /* + 0x4e sdPtd */
613        volatile uint8_t IPR19;             /* + 0x4f sdPtd */
614        volatile uint8_t IPR20;             /* + 0x50 sdPtd */
615        volatile uint8_t IPR21;             /* + 0x51 sdPtd */
616        volatile uint8_t IPR22;             /* + 0x52 sdPtd */
617        volatile uint8_t IPR23;             /* + 0x53 sdPtd */
618        volatile uint8_t IPR24;             /* + 0x54 sdPtd */
619        volatile uint8_t IPR25;             /* + 0x55 sdPtd */
620        volatile uint8_t IPR26;             /* + 0x56 sdPtd */
621        volatile uint8_t IPR27;             /* + 0x57 sdPtd */
622        volatile uint8_t IPR28;             /* + 0x58 sdPtd */
623        volatile uint8_t IPR29;             /* + 0x59 sdPtd */
624        volatile uint8_t IPR30;             /* + 0x5a sdPtd */
625        volatile uint8_t IPR31;             /* + 0x5b sdPtd */
626
627        volatile uint32_t res5;             /* reserved */
628        volatile uint32_t res6;             /* reserved */
629        volatile uint32_t res7;             /* reserved */
630        volatile uint32_t MDEDebug;         /* + 0x68 sdMdeComplex */
631        volatile uint32_t ADSDebug;         /* + 0x6c sdAdsTop */
632        volatile uint32_t Value1;           /* + 0x70 sdDbg */
633        volatile uint32_t Value2;           /* + 0x74 sdDbg */
634        volatile uint32_t Control;          /* + 0x78 sdDbg */
635        volatile uint32_t Status;           /* + 0x7c sdDbg */
636        volatile uint32_t EU00;             /* + 0x80 sdMac macer reg */
637        volatile uint32_t EU01;             /* + 0x84 sdMac macemr reg */
638        volatile uint32_t EU02;             /* + 0x88 unused */
639        volatile uint32_t EU03;             /* + 0x8c unused */
640        volatile uint32_t EU04;             /* + 0x90 unused */
641        volatile uint32_t EU05;             /* + 0x94 unused */
642        volatile uint32_t EU06;             /* + 0x98 unused */
643        volatile uint32_t EU07;             /* + 0x9c unused */
644        volatile uint32_t EU10;             /* + 0xa0 unused */
645        volatile uint32_t EU11;             /* + 0xa4 unused */
646        volatile uint32_t EU12;             /* + 0xa8 unused */
647        volatile uint32_t EU13;             /* + 0xac unused */
648        volatile uint32_t EU14;             /* + 0xb0 unused */
649        volatile uint32_t EU15;             /* + 0xb4 unused */
650        volatile uint32_t EU16;             /* + 0xb8 unused */
651        volatile uint32_t EU17;             /* + 0xbc unused */
652        volatile uint32_t EU20;             /* + 0xc0 unused */
653        volatile uint32_t EU21;             /* + 0xc4 unused */
654        volatile uint32_t EU22;             /* + 0xc8 unused */
655        volatile uint32_t EU23;             /* + 0xcc unused */
656        volatile uint32_t EU24;             /* + 0xd0 unused */
657        volatile uint32_t EU25;             /* + 0xd4 unused */
658        volatile uint32_t EU26;             /* + 0xd8 unused */
659        volatile uint32_t EU27;             /* + 0xdc unused */
660        volatile uint32_t EU30;             /* + 0xe0 unused */
661        volatile uint32_t EU31;             /* + 0xe4 unused */
662        volatile uint32_t EU32;             /* + 0xe8 unused */
663        volatile uint32_t EU33;             /* + 0xec unused */
664        volatile uint32_t EU34;             /* + 0xf0 unused */
665        volatile uint32_t EU35;             /* + 0xf4 unused */
666        volatile uint32_t EU36;             /* + 0xf8 unused */
667        volatile uint32_t EU37;             /* + 0xfc unused */
668#if 0
669        volatile uint32_t res8[0x340];
670#else
671        volatile uint8_t res_1300[0xc00];
672
673        volatile uint32_t reserved0;                    /* MBAR_XLB_ARB + 0x0000 reserved */
674        volatile uint32_t reserved1;                    /* MBAR_XLB_ARB + 0x0004 reserved */
675        volatile uint32_t reserved2;                    /* MBAR_XLB_ARB + 0x0008 reserved */
676        volatile uint32_t reserved3;                    /* MBAR_XLB_ARB + 0x000c reserved */
677        volatile uint32_t reserved4;                    /* MBAR_XLB_ARB + 0x0010 reserved */
678        volatile uint32_t reserved5;                    /* MBAR_XLB_ARB + 0x0014 reserved */
679        volatile uint32_t reserved6;                    /* MBAR_XLB_ARB + 0x0018 reserved */
680        volatile uint32_t reserved7;                    /* MBAR_XLB_ARB + 0x001c reserved */
681        volatile uint32_t reserved8;                    /* MBAR_XLB_ARB + 0x0020 reserved */
682        volatile uint32_t reserved9;                    /* MBAR_XLB_ARB + 0x0024 reserved */
683        volatile uint32_t reserved10;                   /* MBAR_XLB_ARB + 0x0028 reserved */
684        volatile uint32_t reserved11;                   /* MBAR_XLB_ARB + 0x002c reserved */
685        volatile uint32_t reserved12;                   /* MBAR_XLB_ARB + 0x0030 reserved */
686        volatile uint32_t reserved13;                   /* MBAR_XLB_ARB + 0x0034 reserved */
687        volatile uint32_t reserved14;                   /* MBAR_XLB_ARB + 0x0038 reserved */
688        volatile uint32_t reserved15;                   /* MBAR_XLB_ARB + 0x003c reserved */
689
690        volatile uint32_t config;                               /* MBAR_XLB_ARB + 0x0040 */
691        volatile uint32_t version;                      /* MBAR_XLB_ARB + 0x0044 read only = 0x0001 */
692        volatile uint32_t xlb_status;                   /* MBAR_XLB_ARB + 0x0048 */
693        volatile uint32_t int_enable;                   /* MBAR_XLB_ARB + 0x004c */
694        volatile uint32_t add_capture;          /* MBAR_XLB_ARB + 0x0050 read only */
695        volatile uint32_t bus_sig_capture;      /* MBAR_XLB_ARB + 0x0054 read only */
696        volatile uint32_t add_time_out;         /* MBAR_XLB_ARB + 0x0058 */
697        volatile uint32_t data_time_out;                /* MBAR_XLB_ARB + 0x005c */
698        volatile uint32_t bus_time_out;         /* MBAR_XLB_ARB + 0x0060 */
699        volatile uint32_t priority_enable;      /* MBAR_XLB_ARB + 0x0064 */
700        volatile uint32_t priority;                     /* MBAR_XLB_ARB + 0x0068 */
701        volatile uint32_t arb_base_addr2;               /* MBAR_XLB_ARB + 0x006c */
702        volatile uint32_t snoop_window;         /* MBAR_XLB_ARB + 0x0070 */
703
704        volatile uint32_t reserved16;                   /* MBAR_XLB_ARB + 0x0074 reserved */
705        volatile uint32_t reserved17;                   /* MBAR_XLB_ARB + 0x0078 reserved */
706        volatile uint32_t reserved18;                   /* MBAR_XLB_ARB + 0x007c reserved */
707
708        volatile uint32_t control;                      /* MBAR_XLB_ARB + 0x0080 */
709        volatile uint32_t init_total_count;     /* MBAR_XLB_ARB + 0x0084 */
710        volatile uint32_t int_total_count;      /* MBAR_XLB_ARB + 0x0088 */
711
712        volatile uint32_t reserved19;                   /* MBAR_XLB_ARB + 0x008c reserved */
713
714        volatile uint32_t lower_address;                /* MBAR_XLB_ARB + 0x0090 */
715        volatile uint32_t higher_address;               /* MBAR_XLB_ARB + 0x0094 */
716        volatile uint32_t int_window_count;     /* MBAR_XLB_ARB + 0x0098 */
717        volatile uint32_t window_ter_count;     /* MBAR_XLB_ARB + 0x009c */
718          volatile uint8_t  res_0x1fa0[0x60];
719
720
721#endif
722        /*
723     * programmable serial controller 1 (MBAR + 0x2000)
724     */
725
726  struct mpc5200_psc
727    {
728    volatile uint8_t  mr;            /* +0x00 */
729    volatile uint8_t  res1[3];
730    volatile uint16_t sr_csr;        /* +0x04 */
731    volatile uint16_t res2[1];
732    volatile uint16_t cr;            /* +0x08 */
733    volatile uint16_t res3[1];
734    volatile uint32_t rb_tb;         /* +0x0c */
735    volatile uint16_t ipcr_acr;      /* +0x10 */
736    volatile uint16_t res4[1];
737    volatile uint16_t isr_imr;       /* +0x14 */
738#define ISR_TX_RDY      (1 << 8)
739#define ISR_RX_RDY_FULL (1 << 9)
740#define ISR_RB                  (1 << 15)
741#define ISR_FE          (1 << 14)
742#define ISR_PE          (1 << 13)
743#define ISR_OE          (1 << 12)
744#define ISR_ERROR       (ISR_FE | ISR_PE | ISR_OE)
745
746#define IMR_TX_RDY      (1 << 8)
747#define IMR_RX_RDY_FULL (1 << 9)
748    volatile uint16_t res5[1];
749    volatile uint8_t  ctur;          /* +0x18 */
750    volatile uint8_t  res6[3];
751    volatile uint8_t  ctlr;          /* +0x1C */
752    volatile uint8_t  res7[0x13];
753    volatile uint8_t  ivr;           /* +0x30 */
754    volatile uint8_t  res8[3];
755    volatile uint8_t  ip;            /* +0x34 */
756    volatile uint8_t  res9[3];
757    volatile uint8_t  op1;           /* +0x38 */
758    volatile uint8_t  res10[3];
759    volatile uint8_t  op0;           /* +0x3C */
760    volatile uint8_t  res11[3];
761    volatile uint8_t  sicr;          /* +0x40 */
762    volatile uint8_t  res12[0x17];
763    volatile uint16_t rfnum;         /* +0x58 */
764    volatile uint16_t res13[1];
765    volatile uint16_t tfnum;         /* +0x5C */
766        volatile uint16_t res14[1];
767    volatile uint16_t rfdata;        /* +0x60 */
768    volatile uint16_t res15[1];
769    volatile uint16_t rfstat;        /* +0x64 */
770    volatile uint16_t res16[1];
771    volatile uint8_t  rfcntl;        /* +0x68 */
772    volatile uint8_t  res17[5];
773    volatile uint16_t rfalarm;       /* +0x6E */
774    volatile uint8_t  res18[2];
775    volatile uint16_t rfrptr;        /* +0x72 */
776        volatile uint16_t res19[1];
777        volatile uint16_t rfwptr;        /* +0x76 */
778        volatile uint16_t res20[1];
779        volatile uint16_t rflrfptr;      /* +0x7A */
780        volatile uint16_t rflwfptr;      /* +0x7C */
781        volatile uint16_t res21[1];
782        volatile uint16_t tfdata;        /* +0x80 */
783        volatile uint16_t res22[1];
784    volatile uint16_t tfstat;        /* +0x84 */
785        volatile uint16_t res23[1];
786        volatile uint8_t  tfcntl;        /* +0x88 */
787        volatile uint8_t  res24[5];
788        volatile uint16_t tfalarm;       /* +0x8E */
789        volatile uint8_t  res25[2];
790        volatile uint16_t tfrptr;        /* +0x92 */
791        volatile uint16_t res26[1];
792        volatile uint16_t tfwptr;        /* +0x96 */
793        volatile uint16_t res27[1];
794        volatile uint16_t tflrfptr;      /* +0x96 */
795        volatile uint16_t tflwfptr;      /* +0x9C */
796        volatile uint16_t res28[1];      /* end at offset 0x9F */
797    volatile uint8_t  res29[0x160];
798    } psc[MPC5200_PSC_REG_SETS];
799  /* XXX: there are only 6 PSCs, but PSC6 has an extra register gap
800   *      from PSC5, therefore we instantiate seven(!) PSC register sets
801   */
802
803#define TX_FIFO_SIZE    256
804#define RX_FIFO_SIZE    512
805
806
807        volatile uint8_t         irda[0x200];
808
809        /*
810         * ethernet registers (MBAR + 0x3000)
811         */
812
813        /*  Control and status Registers (offset 000-1FF) */
814
815        volatile uint32_t fec_id;                       /* + 0x000 */
816        volatile uint32_t ievent;                       /* + 0x004 */
817        volatile uint32_t imask;                                /* + 0x008 */
818
819        volatile uint32_t res9[1];                      /* + 0x00C */
820        volatile uint32_t r_des_active;         /* + 0x010 */
821        volatile uint32_t x_des_active;         /* + 0x014 */
822        volatile uint32_t r_des_active_cl;      /* + 0x018 */
823        volatile uint32_t x_des_active_cl;      /* + 0x01C */
824        volatile uint32_t ivent_set;                    /* + 0x020 */
825        volatile uint32_t ecntrl;                       /* + 0x024 */
826
827        volatile uint32_t res10[6];                     /* + 0x028-03C */
828        volatile uint32_t mii_data;                     /* + 0x040 */
829        volatile uint32_t mii_speed;                    /* + 0x044 */
830        volatile uint32_t mii_status;           /* + 0x048 */
831
832        volatile uint32_t res11[5];                     /* + 0x04C-05C */
833        volatile uint32_t mib_data;                     /* + 0x060 */
834        volatile uint32_t mib_control;          /* + 0x064 */
835
836        volatile uint32_t res12[6];                     /* + 0x068-7C */
837        volatile uint32_t r_activate;           /* + 0x080 */
838        volatile uint32_t r_cntrl;                      /* + 0x084 */
839        volatile uint32_t r_hash;                       /* + 0x088 */
840        volatile uint32_t r_data;                       /* + 0x08C */
841        volatile uint32_t ar_done;                      /* + 0x090 */
842        volatile uint32_t r_test;                       /* + 0x094 */
843        volatile uint32_t r_mib;                                /* + 0x098 */
844        volatile uint32_t r_da_low;                     /* + 0x09C */
845        volatile uint32_t r_da_high;                    /* + 0x0A0 */
846
847        volatile uint32_t res13[7];                     /* + 0x0A4-0BC */
848        volatile uint32_t x_activate;           /* + 0x0C0 */
849        volatile uint32_t x_cntrl;                      /* + 0x0C4 */
850        volatile uint32_t backoff;                      /* + 0x0C8 */
851        volatile uint32_t x_data;                       /* + 0x0CC */
852        volatile uint32_t x_status;                     /* + 0x0D0 */
853        volatile uint32_t x_mib;                                /* + 0x0D4 */
854        volatile uint32_t x_test;                       /* + 0x0D8 */
855        volatile uint32_t fdxfc_da1;                    /* + 0x0DC */
856        volatile uint32_t fdxfc_da2;                    /* + 0x0E0 */
857        volatile uint32_t paddr1;                       /* + 0x0E4 */
858        volatile uint32_t paddr2;                       /* + 0x0E8 */
859        volatile uint32_t op_pause;                     /* + 0x0EC */
860
861        volatile uint32_t res14[4];                     /* + 0x0F0-0FC */
862        volatile uint32_t instr_reg;                    /* + 0x100 */
863        volatile uint32_t context_reg;          /* + 0x104 */
864        volatile uint32_t test_cntrl;           /* + 0x108 */
865        volatile uint32_t acc_reg;                      /* + 0x10C */
866        volatile uint32_t ones;                         /* + 0x110 */
867        volatile uint32_t zeros;                                /* + 0x114 */
868        volatile uint32_t iaddr1;                       /* + 0x118 */
869        volatile uint32_t iaddr2;                       /* + 0x11C */
870        volatile uint32_t gaddr1;                       /* + 0x120 */
871        volatile uint32_t gaddr2;                       /* + 0x124 */
872        volatile uint32_t random;                       /* + 0x128 */
873        volatile uint32_t rand1;                                /* + 0x12C */
874        volatile uint32_t tmp;                          /* + 0x130 */
875
876        volatile uint32_t res15[3];                     /* + 0x134-13C */
877        volatile uint32_t fifo_id;                      /* + 0x140 */
878        volatile uint32_t x_wmrk;                       /* + 0x144 */
879        volatile uint32_t fcntrl;                       /* + 0x148 */
880        volatile uint32_t r_bound;                      /* + 0x14C */
881        volatile uint32_t r_fstart;                     /* + 0x150 */
882        volatile uint32_t r_count;                      /* + 0x154 */
883        volatile uint32_t r_lag;                                /* + 0x158 */
884        volatile uint32_t r_read;                       /* + 0x15C */
885        volatile uint32_t r_write;                      /* + 0x160 */
886        volatile uint32_t x_count;                      /* + 0x164 */
887        volatile uint32_t x_lag;                                /* + 0x168 */
888        volatile uint32_t x_retry;                      /* + 0x16C */
889        volatile uint32_t x_write;                      /* + 0x170 */
890        volatile uint32_t x_read;                       /* + 0x174 */
891
892        volatile uint32_t res16[2];                     /* + 0x178-17C */
893        volatile uint32_t fm_cntrl;                     /* + 0x180 */
894        volatile uint32_t rfifo_data;           /* + 0x184 */
895        volatile uint32_t rfifo_status;         /* + 0x188 */
896        volatile uint32_t rfifo_cntrl;          /* + 0x18C */
897        volatile uint32_t rfifo_lrf_ptr;                /* + 0x190 */
898        volatile uint32_t rfifo_lwf_ptr;                /* + 0x194 */
899        volatile uint32_t rfifo_alarm;          /* + 0x198 */
900        volatile uint32_t rfifo_rdptr;          /* + 0x19C */
901        volatile uint32_t rfifo_wrptr;          /* + 0x1A0 */
902        volatile uint32_t tfifo_data;           /* + 0x1A4 */
903        volatile uint32_t tfifo_status;         /* + 0x1A8 */
904        volatile uint32_t tfifo_cntrl;          /* + 0x1AC */
905        volatile uint32_t tfifo_lrf_ptr;                /* + 0x1B0 */
906        volatile uint32_t tfifo_lwf_ptr;                /* + 0x1B4 */
907        volatile uint32_t tfifo_alarm;          /* + 0x1B8 */
908        volatile uint32_t tfifo_rdptr;          /* + 0x1BC */
909        volatile uint32_t tfifo_wrptr;          /* + 0x1C0 */
910
911        volatile uint32_t reset_cntrl;          /* + 0x1C4 */
912        volatile uint32_t xmit_fsm;                     /* + 0x1C8 */
913
914        volatile uint32_t res17[3];                     /* + 0x1CC-1D4 */
915        volatile uint32_t rdes_data0;           /* + 0x1D8 */
916        volatile uint32_t rdes_data1;           /* + 0x1DC */
917        volatile uint32_t r_length;                     /* + 0x1E0 */
918        volatile uint32_t x_length;                     /* + 0x1E4 */
919        volatile uint32_t x_addr;                       /* + 0x1E8 */
920        volatile uint32_t cdes_data;                    /* + 0x1EC */
921        volatile uint32_t status;                       /* + 0x1F0 */
922        volatile uint32_t dma_control;          /* + 0x1F4 */
923        volatile uint32_t des_cmnd;                     /* + 0x1F8 */
924        volatile uint32_t data;                         /* + 0x1FC */
925
926        volatile uint8_t  RES[0x600];
927
928
929#if 0
930        /* MIB COUNTERS (Offset 200-2FF) */
931
932        volatile uint32_t rmon_t_drop;          /* + 0x200 */
933        volatile uint32_t rmon_t_packets;       /* + 0x204 */
934        volatile uint32_t rmon_t_bc_pkt;                /* + 0x208 */
935        volatile uint32_t rmon_t_mc_pkt;                /* + 0x20C */
936        volatile uint32_t rmon_t_crc_align;     /* + 0x210 */
937        volatile uint32_t rmon_t_undersize;     /* + 0x214 */
938        volatile uint32_t rmon_t_oversize;      /* + 0x218 */
939        volatile uint32_t rmon_t_frag;          /* + 0x21C */
940        volatile uint32_t rmon_t_jab;           /* + 0x220 */
941        volatile uint32_t rmon_t_col;           /* + 0x224 */
942        volatile uint32_t rmon_t_p64;           /* + 0x228 */
943        volatile uint32_t rmon_t_p65to127;      /* + 0x22C */
944        volatile uint32_t rmon_t_p128to255;     /* + 0x230 */
945        volatile uint32_t rmon_t_p256to511;     /* + 0x234 */
946        volatile uint32_t rmon_t_p512to1023;    /* + 0x238 */
947        volatile uint32_t rmon_t_p1024to2047;/* + 0x23C */
948        volatile uint32_t rmon_t_p_gte2048;     /* + 0x240 */
949        volatile uint32_t rmon_t_octets;                /* + 0x244 */
950        volatile uint32_t ieee_t_drop;          /* + 0x248 */
951        volatile uint32_t ieee_t_frame_ok;      /* + 0x24C */
952        volatile uint32_t ieee_t_1col;          /* + 0x250 */
953        volatile uint32_t ieee_t_mcol;          /* + 0x254 */
954        volatile uint32_t ieee_t_def;           /* + 0x258 */
955        volatile uint32_t ieee_t_lcol;          /* + 0x25C */
956        volatile uint32_t ieee_t_excol;         /* + 0x260 */
957        volatile uint32_t ieee_t_macerr;                /* + 0x264 */
958        volatile uint32_t ieee_t_cserr;         /* + 0x268 */
959        volatile uint32_t ieee_t_sqe;           /* + 0x26C */
960        volatile uint32_t t_fdxfc;                      /* + 0x270 */
961        volatile uint32_t ieee_t_octets_ok;     /* + 0x274 */
962
963        volatile uint32_t res18[2];                     /* + 0x278-27C */
964        volatile uint32_t rmon_r_drop;          /* + 0x280 */
965        volatile uint32_t rmon_r_packets;       /* + 0x284 */
966        volatile uint32_t rmon_r_bc_pkt;                /* + 0x288 */
967        volatile uint32_t rmon_r_mc_pkt;                /* + 0x28C */
968        volatile uint32_t rmon_r_crc_align;     /* + 0x290 */
969        volatile uint32_t rmon_r_undersize;     /* + 0x294 */
970        volatile uint32_t rmon_r_oversize;      /* + 0x298 */
971        volatile uint32_t rmon_r_frag;          /* + 0x29C */
972        volatile uint32_t rmon_r_jab;           /* + 0x2A0 */
973
974        volatile uint32_t rmon_r_resvd_0;       /* + 0x2A4 */
975
976        volatile uint32_t rmon_r_p64;           /* + 0x2A8 */
977        volatile uint32_t rmon_r_p65to127;      /* + 0x2AC */
978        volatile uint32_t rmon_r_p128to255;     /* + 0x2B0 */
979        volatile uint32_t rmon_r_p256to511;     /* + 0x2B4 */
980        volatile uint32_t rmon_r_p512to1023;    /* + 0x2B8 */
981        volatile uint32_t rmon_r_p1024to2047;/* + 0x2BC */
982        volatile uint32_t rmon_r_p_gte2048;     /* + 0x2C0 */
983        volatile uint32_t rmon_r_octets;                /* + 0x2C4 */
984        volatile uint32_t ieee_r_drop;          /* + 0x2C8 */
985        volatile uint32_t ieee_r_frame_ok;      /* + 0x2CC */
986        volatile uint32_t ieee_r_crc;           /* + 0x2D0 */
987        volatile uint32_t ieee_r_align;         /* + 0x2D4 */
988        volatile uint32_t r_macerr;                     /* + 0x2D8 */
989        volatile uint32_t r_fdxfc;                      /* + 0x2DC */
990        volatile uint32_t ieee_r_octets_ok;     /* + 0x2E0 */
991
992        volatile uint32_t res19[6];                     /* + 0x2E4-2FC */
993
994        volatile uint32_t res20[64];                    /* + 0x300-3FF */
995
996        volatile uint32_t res21[256];        /* + 0x400-800 */
997#endif
998
999        /*
1000         * SmartComm DMA PCI registers (MBAR + 0x3800)
1001         */
1002        volatile uint8_t                pci[0x200];
1003
1004        /*
1005         * advanced technology attachment registers (MBAR + 0x3A00)
1006         */
1007
1008        /* ATA host registers (offset 0x00-0x28) */
1009        volatile uint32_t       ata_hcfg;               /* + 0x00 */
1010        volatile uint32_t       ata_hsr;                /* + 0x04 */
1011        volatile uint32_t       ata_pio1;               /* + 0x08 */
1012        volatile uint32_t       ata_pio2;               /* + 0x0C */
1013        volatile uint32_t       ata_dma1;               /* + 0x10 */
1014        volatile uint32_t       ata_dma2;               /* + 0x14 */
1015        volatile uint32_t       ata_udma1;              /* + 0x18 */
1016        volatile uint32_t       ata_udma2;              /* + 0x1C */
1017        volatile uint32_t       ata_udma3;              /* + 0x20 */
1018        volatile uint32_t       ata_udma4;              /* + 0x24 */
1019        volatile uint32_t       ata_udma5;              /* + 0x28 */
1020        volatile uint32_t       ata_res1[4];    /* + 0x2C-0x3C */
1021
1022        /* ATA FIFO registers (offset 0x3C-0x50) */
1023        volatile uint32_t       ata_rtfdwr;             /* + 0x3C */
1024        volatile uint32_t       ata_rtfsr;              /* + 0x40 */
1025        volatile uint32_t       ata_rtfcr;              /* + 0x44 */
1026        volatile uint32_t       ata_rtfar;              /* + 0x48 */
1027        volatile uint32_t       ata_rtfrpr;             /* + 0x4C */
1028        volatile uint32_t       ata_rtfwpr;             /* + 0x50 */
1029        volatile uint32_t       ata_res2[2];    /* + 0x54-0x5C */
1030
1031    /* ATA drive registers (offset 0x5C-0x80) */
1032          volatile uint32_t     ata_dctr_dasr;  /* + 0x5C */
1033          volatile uint32_t     ata_ddr;                /* + 0x60 */
1034          volatile uint32_t     ata_dfr_der;    /* + 0x64 */
1035          volatile uint32_t     ata_dscr;               /* + 0x68 */
1036          volatile uint32_t     ata_dsnr;               /* + 0x6C */
1037          volatile uint32_t     ata_dclr;               /* + 0x70 */
1038          volatile uint32_t     ata_dchr;               /* + 0x74 */
1039          volatile uint32_t     ata_ddhr;               /* + 0x78 */
1040          volatile uint32_t     ata_dcr_dsr;    /* + 0x7C */
1041          volatile uint32_t     ata_res3[0xA0]; /* + 0x80-0x200 */
1042
1043        /*
1044         * inter-integrated circuit registers (MBAR + 0x3D00)
1045         */
1046          struct mpc5200_i2c_regs_s {
1047            volatile uint8_t  madr;   /* i2c address reg.       +0x00 */
1048            volatile uint8_t  res_1[3];
1049            volatile uint8_t  mfdr;   /* i2c freq. divider reg. +0x04 */
1050            volatile uint8_t  res_5[3];
1051            volatile uint8_t  mcr;    /* i2c control reg.       +0x08 */
1052            volatile uint8_t  res_9[3];
1053
1054#define MPC5200_I2C_MCR_MEN    (1 << (7-0))
1055#define MPC5200_I2C_MCR_MIEN   (1 << (7-1))
1056#define MPC5200_I2C_MCR_MSTA   (1 << (7-2))
1057#define MPC5200_I2C_MCR_MTX    (1 << (7-3))
1058#define MPC5200_I2C_MCR_TXAK   (1 << (7-4))
1059#define MPC5200_I2C_MCR_RSTA   (1 << (7-5))
1060
1061            volatile uint8_t  msr;    /* i2c status reg.        +0x0C */
1062            volatile uint8_t  res_d[3];
1063#define MPC5200_I2C_MSR_CF    (1 << (7-0))
1064#define MPC5200_I2C_MSR_MAAS  (1 << (7-1))
1065#define MPC5200_I2C_MSR_BB    (1 << (7-2))
1066#define MPC5200_I2C_MSR_MAL   (1 << (7-3))
1067#define MPC5200_I2C_MSR_SRW   (1 << (7-5))
1068#define MPC5200_I2C_MSR_MIF   (1 << (7-6))
1069#define MPC5200_I2C_MSR_RXAK  (1 << (7-7))
1070            volatile uint8_t  mdr;    /* i2c data I/O reg.      +0x10 */
1071            volatile uint8_t  res_11[3];
1072            volatile uint8_t  res_14[12];  /* reserved          +0x14 */
1073            volatile uint8_t  icr;   /* i2c irq ctrl reg.      +0x20 */
1074#define MPC5200_I2C_ICR_BNBE2  (1 << (7-0))
1075#define MPC5200_I2C_ICR_TE2    (1 << (7-1))
1076#define MPC5200_I2C_ICR_RE2    (1 << (7-2))
1077#define MPC5200_I2C_ICR_IE2    (1 << (7-3))
1078#define MPC5200_I2C_ICR_MASK2  (MPC5200_I2C_ICR_BNBE2|MPC5200_I2C_ICR_TE2\
1079                               |MPC5200_I2C_ICR_RE2|MPC5200_I2C_ICR_IE2)
1080#define MPC5200_I2C_ICR_BNBE1  (1 << (7-4))
1081#define MPC5200_I2C_ICR_TE1    (1 << (7-5))
1082#define MPC5200_I2C_ICR_RE1    (1 << (7-6))
1083#define MPC5200_I2C_ICR_IE1    (1 << (7-7))
1084#define MPC5200_I2C_ICR_MASK1  (MPC5200_I2C_ICR_BNBE1|MPC5200_I2C_ICR_TE1\
1085                               |MPC5200_I2C_ICR_RE1|MPC5200_I2C_ICR_IE1)
1086            volatile uint8_t  res_21[3];
1087            volatile uint32_t res_24[7];   /* reserved          +0x24 */
1088          } i2c_regs[2];
1089          volatile uint8_t              res_3d80[0x280];
1090
1091        /*
1092         * on-chip static RAM memory locations (MBAR + 0x4000)
1093         */
1094        volatile uint8_t                sram_res0x4000[0x4000];
1095        volatile uint8_t                sram[0x4000];
1096
1097        } mpc5200_t;
1098
1099extern volatile mpc5200_t mpc5200;
1100
1101#ifdef __cplusplus
1102}
1103#endif
1104
1105#endif  /*ASM*/
1106
1107#endif /* __MPC5200_h__ */
Note: See TracBrowser for help on using the repository browser.