1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Copyright 2004-2011 Freescale Semiconductor, Inc.
4 *
5 * MPC83xx Internal Memory Map
6 *
7 * Contributors:
8 *	Dave Liu <daveliu@freescale.com>
9 *	Tanya Jiang <tanya.jiang@freescale.com>
10 *	Mandy Lavi <mandy.lavi@freescale.com>
11 *	Eran Liberty <liberty@freescale.com>
12 */
13#ifndef __IMMAP_83xx__
14#define __IMMAP_83xx__
15
16#include <fsl_immap.h>
17#include <asm/types.h>
18#include <asm/fsl_i2c.h>
19#include <asm/mpc8xxx_spi.h>
20#include <asm/fsl_lbc.h>
21#include <asm/fsl_dma.h>
22
23/*
24 * Local Access Window
25 */
26typedef struct law83xx {
27	u32 bar;		/* LBIU local access window base address register */
28	u32 ar;			/* LBIU local access window attribute register */
29} law83xx_t;
30
31/*
32 * System configuration registers
33 */
34typedef struct sysconf83xx {
35	u32 immrbar;		/* Internal memory map base address register */
36	u8 res0[0x04];
37	u32 altcbar;		/* Alternate configuration base address register */
38	u8 res1[0x14];
39	law83xx_t lblaw[4];	/* LBIU local access window */
40	u8 res2[0x20];
41	law83xx_t pcilaw[2];	/* PCI local access window */
42	u8 res3[0x10];
43	law83xx_t pcielaw[2];	/* PCI Express local access window */
44	u8 res4[0x10];
45	law83xx_t ddrlaw[2];	/* DDR local access window */
46	u8 res5[0x50];
47	u32 sgprl;		/* System General Purpose Register Low */
48	u32 sgprh;		/* System General Purpose Register High */
49	u32 spridr;		/* System Part and Revision ID Register */
50	u8 res6[0x04];
51	u32 spcr;		/* System Priority Configuration Register */
52	u32 sicrl;		/* System I/O Configuration Register Low */
53	u32 sicrh;		/* System I/O Configuration Register High */
54	u8 res7[0x04];
55	u32 sidcr0;		/* System I/O Delay Configuration Register 0 */
56	u32 sidcr1;		/* System I/O Delay Configuration Register 1 */
57	u32 ddrcdr;		/* DDR Control Driver Register */
58	u32 ddrdsr;		/* DDR Debug Status Register */
59	u32 obir;		/* Output Buffer Impedance Register */
60	u8 res8[0xC];
61	u32 pecr1;		/* PCI Express control register 1 */
62#if defined(CONFIG_ARCH_MPC830X)
63	u32 sdhccr;		/* eSDHC Control Registers for MPC830x */
64#else
65	u32 pecr2;		/* PCI Express control register 2 */
66#endif
67	u8 res9[0xB8];
68} sysconf83xx_t;
69
70/*
71 * Watch Dog Timer (WDT) Registers
72 */
73typedef struct wdt83xx {
74	u8 res0[4];
75	u32 swcrr;		/* System watchdog control register */
76	u32 swcnr;		/* System watchdog count register */
77	u8 res1[2];
78	u16 swsrr;		/* System watchdog service register */
79	u8 res2[0xF0];
80} wdt83xx_t;
81
82/*
83 * RTC/PIT Module Registers
84 */
85typedef struct rtclk83xx {
86	u32 cnr;		/* control register */
87	u32 ldr;		/* load register */
88	u32 psr;		/* prescale register */
89	u32 ctr;		/* counter value field register */
90	u32 evr;		/* event register */
91	u32 alr;		/* alarm register */
92	u8 res0[0xE8];
93} rtclk83xx_t;
94
95/*
96 * Global timer module
97 */
98typedef struct gtm83xx {
99	u8 cfr1;		/* Timer1/2 Configuration */
100	u8 res0[3];
101	u8 cfr2;		/* Timer3/4 Configuration */
102	u8 res1[11];
103	u16 mdr1;		/* Timer1 Mode Register */
104	u16 mdr2;		/* Timer2 Mode Register */
105	u16 rfr1;		/* Timer1 Reference Register */
106	u16 rfr2;		/* Timer2 Reference Register */
107	u16 cpr1;		/* Timer1 Capture Register */
108	u16 cpr2;		/* Timer2 Capture Register */
109	u16 cnr1;		/* Timer1 Counter Register */
110	u16 cnr2;		/* Timer2 Counter Register */
111	u16 mdr3;		/* Timer3 Mode Register */
112	u16 mdr4;		/* Timer4 Mode Register */
113	u16 rfr3;		/* Timer3 Reference Register */
114	u16 rfr4;		/* Timer4 Reference Register */
115	u16 cpr3;		/* Timer3 Capture Register */
116	u16 cpr4;		/* Timer4 Capture Register */
117	u16 cnr3;		/* Timer3 Counter Register */
118	u16 cnr4;		/* Timer4 Counter Register */
119	u16 evr1;		/* Timer1 Event Register */
120	u16 evr2;		/* Timer2 Event Register */
121	u16 evr3;		/* Timer3 Event Register */
122	u16 evr4;		/* Timer4 Event Register */
123	u16 psr1;		/* Timer1 Prescaler Register */
124	u16 psr2;		/* Timer2 Prescaler Register */
125	u16 psr3;		/* Timer3 Prescaler Register */
126	u16 psr4;		/* Timer4 Prescaler Register */
127	u8 res[0xC0];
128} gtm83xx_t;
129
130/*
131 * Integrated Programmable Interrupt Controller
132 */
133typedef struct ipic83xx {
134	u32 sicfr;		/* System Global Interrupt Configuration Register */
135	u32 sivcr;		/* System Global Interrupt Vector Register */
136	u32 sipnr_h;		/* System Internal Interrupt Pending Register - High */
137	u32 sipnr_l;		/* System Internal Interrupt Pending Register - Low */
138	u32 siprr_a;		/* System Internal Interrupt Group A Priority Register */
139	u32 siprr_b;		/* System Internal Interrupt Group B Priority Register */
140	u32 siprr_c;		/* System Internal Interrupt Group C Priority Register */
141	u32 siprr_d;		/* System Internal Interrupt Group D Priority Register */
142	u32 simsr_h;		/* System Internal Interrupt Mask Register - High */
143	u32 simsr_l;		/* System Internal Interrupt Mask Register - Low */
144	u32 sicnr;		/* System Internal Interrupt Control Register */
145	u32 sepnr;		/* System External Interrupt Pending Register */
146	u32 smprr_a;		/* System Mixed Interrupt Group A Priority Register */
147	u32 smprr_b;		/* System Mixed Interrupt Group B Priority Register */
148	u32 semsr;		/* System External Interrupt Mask Register */
149	u32 secnr;		/* System External Interrupt Control Register */
150	u32 sersr;		/* System Error Status Register */
151	u32 sermr;		/* System Error Mask Register */
152	u32 sercr;		/* System Error Control Register */
153	u32 sepcr;		/* System External Interrupt Polarity Control Register */
154	u32 sifcr_h;		/* System Internal Interrupt Force Register - High */
155	u32 sifcr_l;		/* System Internal Interrupt Force Register - Low */
156	u32 sefcr;		/* System External Interrupt Force Register */
157	u32 serfr;		/* System Error Force Register */
158	u32 scvcr;		/* System Critical Interrupt Vector Register */
159	u32 smvcr;		/* System Management Interrupt Vector Register */
160	u8 res[0x98];
161} ipic83xx_t;
162
163/*
164 * System Arbiter Registers
165 */
166typedef struct arbiter83xx {
167	u32 acr;		/* Arbiter Configuration Register */
168	u32 atr;		/* Arbiter Timers Register */
169	u8 res[4];
170	u32 aer;		/* Arbiter Event Register */
171	u32 aidr;		/* Arbiter Interrupt Definition Register */
172	u32 amr;		/* Arbiter Mask Register */
173	u32 aeatr;		/* Arbiter Event Attributes Register */
174	u32 aeadr;		/* Arbiter Event Address Register */
175	u32 aerr;		/* Arbiter Event Response Register */
176	u8 res1[0xDC];
177} arbiter83xx_t;
178
179/*
180 * Reset Module
181 */
182typedef struct reset83xx {
183	u32 rcwl;		/* Reset Configuration Word Low Register */
184	u32 rcwh;		/* Reset Configuration Word High Register */
185	u8 res0[8];
186	u32 rsr;		/* Reset Status Register */
187	u32 rmr;		/* Reset Mode Register */
188	u32 rpr;		/* Reset protection Register */
189	u32 rcr;		/* Reset Control Register */
190	u32 rcer;		/* Reset Control Enable Register */
191	u8 res1[0xDC];
192} reset83xx_t;
193
194/*
195 * Clock Module
196 */
197typedef struct clk83xx {
198	u32 spmr;		/* system PLL mode Register */
199	u32 occr;		/* output clock control Register */
200	u32 sccr;		/* system clock control Register */
201	u8 res0[0xF4];
202} clk83xx_t;
203
204/*
205 * Power Management Control Module
206 */
207typedef struct pmc83xx {
208	u32 pmccr;		/* PMC Configuration Register */
209	u32 pmcer;		/* PMC Event Register */
210	u32 pmcmr;		/* PMC Mask Register */
211	u32 pmccr1;		/* PMC Configuration Register 1 */
212	u32 pmccr2;		/* PMC Configuration Register 2 */
213	u8 res0[0xEC];
214} pmc83xx_t;
215
216/*
217 * General purpose I/O module
218 */
219typedef struct gpio83xx {
220	u32 dir;		/* direction register */
221	u32 odr;		/* open drain register */
222	u32 dat;		/* data register */
223	u32 ier;		/* interrupt event register */
224	u32 imr;		/* interrupt mask register */
225	u32 icr;		/* external interrupt control register */
226	u8 res0[0xE8];
227} gpio83xx_t;
228
229/*
230 * QE Ports Interrupts Registers
231 */
232typedef struct qepi83xx {
233	u8 res0[0xC];
234	u32 qepier;		/* QE Ports Interrupt Event Register */
235	u32 qepimr;		/* QE Ports Interrupt Mask Register */
236	u32 qepicr;		/* QE Ports Interrupt Control Register */
237	u8 res1[0xE8];
238} qepi83xx_t;
239
240/*
241 * QE Parallel I/O Ports
242 */
243typedef struct gpio_n {
244	u32 podr;		/* Open Drain Register */
245	u32 pdat;		/* Data Register */
246	u32 dir1;		/* direction register 1 */
247	u32 dir2;		/* direction register 2 */
248	u32 ppar1;		/* Pin Assignment Register 1 */
249	u32 ppar2;		/* Pin Assignment Register 2 */
250} gpio_n_t;
251
252typedef struct qegpio83xx {
253	gpio_n_t ioport[0x7];
254	u8 res0[0x358];
255} qepio83xx_t;
256
257/*
258 * QE Secondary Bus Access Windows
259 */
260typedef struct qesba83xx {
261	u32 lbmcsar;		/* Local bus memory controller start address */
262	u32 sdmcsar;		/* Secondary DDR memory controller start address */
263	u8 res0[0x38];
264	u32 lbmcear;		/* Local bus memory controller end address */
265	u32 sdmcear;		/* Secondary DDR memory controller end address */
266	u8 res1[0x38];
267	u32 lbmcar;		/* Local bus memory controller attributes */
268	u32 sdmcar;		/* Secondary DDR memory controller attributes */
269	u8 res2[0x378];
270} qesba83xx_t;
271
272/*
273 * DDR Memory Controller Memory Map for DDR1
274 * The structure of DDR2, or DDR3 is defined in fsl_immap.h
275 */
276#if !defined(CONFIG_SYS_FSL_DDR2) && !defined(CONFIG_SYS_FSL_DDR3)
277typedef struct ddr_cs_bnds {
278	u32 csbnds;
279	u8 res0[4];
280} ddr_cs_bnds_t;
281
282typedef struct ddr83xx {
283	ddr_cs_bnds_t csbnds[4];/* Chip Select x Memory Bounds */
284	u8 res0[0x60];
285	u32 cs_config[4];	/* Chip Select x Configuration */
286	u8 res1[0x70];
287	u32 timing_cfg_3;	/* SDRAM Timing Configuration 3 */
288	u32 timing_cfg_0;	/* SDRAM Timing Configuration 0 */
289	u32 timing_cfg_1;	/* SDRAM Timing Configuration 1 */
290	u32 timing_cfg_2;	/* SDRAM Timing Configuration 2 */
291	u32 sdram_cfg;		/* SDRAM Control Configuration */
292	u32 sdram_cfg2;		/* SDRAM Control Configuration 2 */
293	u32 sdram_mode;		/* SDRAM Mode Configuration */
294	u32 sdram_mode2;	/* SDRAM Mode Configuration 2 */
295	u32 sdram_md_cntl;	/* SDRAM Mode Control */
296	u32 sdram_interval;	/* SDRAM Interval Configuration */
297	u32 ddr_data_init;	/* SDRAM Data Initialization */
298	u8 res2[4];
299	u32 sdram_clk_cntl;	/* SDRAM Clock Control */
300	u8 res3[0x14];
301	u32 ddr_init_addr;	/* DDR training initialization address */
302	u32 ddr_init_ext_addr;	/* DDR training initialization extended address */
303	u8 res4[0xAA8];
304	u32 ddr_ip_rev1;	/* DDR IP block revision 1 */
305	u32 ddr_ip_rev2;	/* DDR IP block revision 2 */
306	u8 res5[0x200];
307	u32 data_err_inject_hi;	/* Memory Data Path Error Injection Mask High */
308	u32 data_err_inject_lo;	/* Memory Data Path Error Injection Mask Low */
309	u32 ecc_err_inject;	/* Memory Data Path Error Injection Mask ECC */
310	u8 res6[0x14];
311	u32 capture_data_hi;	/* Memory Data Path Read Capture High */
312	u32 capture_data_lo;	/* Memory Data Path Read Capture Low */
313	u32 capture_ecc;	/* Memory Data Path Read Capture ECC */
314	u8 res7[0x14];
315	u32 err_detect;		/* Memory Error Detect */
316	u32 err_disable;	/* Memory Error Disable */
317	u32 err_int_en;		/* Memory Error Interrupt Enable */
318	u32 capture_attributes;	/* Memory Error Attributes Capture */
319	u32 capture_address;	/* Memory Error Address Capture */
320	u32 capture_ext_address;/* Memory Error Extended Address Capture */
321	u32 err_sbe;		/* Memory Single-Bit ECC Error Management */
322	u8 res8[0xA4];
323	u32 debug_reg;
324	u8 res9[0xFC];
325} ddr83xx_t;
326#endif
327
328/*
329 * DUART
330 */
331typedef struct duart83xx {
332	u8 urbr_ulcr_udlb;	/* combined register for URBR, UTHR and UDLB */
333	u8 uier_udmb;		/* combined register for UIER and UDMB */
334	u8 uiir_ufcr_uafr;	/* combined register for UIIR, UFCR and UAFR */
335	u8 ulcr;		/* line control register */
336	u8 umcr;		/* MODEM control register */
337	u8 ulsr;		/* line status register */
338	u8 umsr;		/* MODEM status register */
339	u8 uscr;		/* scratch register */
340	u8 res0[8];
341	u8 udsr;		/* DMA status register */
342	u8 res1[3];
343	u8 res2[0xEC];
344} duart83xx_t;
345
346/*
347 * DMA/Messaging Unit
348 */
349typedef struct dma83xx {
350	u32 res0[0xC];		/* 0x0-0x29 reseverd */
351	u32 omisr;		/* 0x30 Outbound message interrupt status register */
352	u32 omimr;		/* 0x34 Outbound message interrupt mask register */
353	u32 res1[0x6];		/* 0x38-0x49 reserved */
354	u32 imr0;		/* 0x50 Inbound message register 0 */
355	u32 imr1;		/* 0x54 Inbound message register 1 */
356	u32 omr0;		/* 0x58 Outbound message register 0 */
357	u32 omr1;		/* 0x5C Outbound message register 1 */
358	u32 odr;		/* 0x60 Outbound doorbell register */
359	u32 res2;		/* 0x64-0x67 reserved */
360	u32 idr;		/* 0x68 Inbound doorbell register */
361	u32 res3[0x5];		/* 0x6C-0x79 reserved */
362	u32 imisr;		/* 0x80 Inbound message interrupt status register */
363	u32 imimr;		/* 0x84 Inbound message interrupt mask register */
364	u32 res4[0x1E];		/* 0x88-0x99 reserved */
365	struct fsl_dma dma[4];
366} dma83xx_t;
367
368/*
369 * PCI Software Configuration Registers
370 */
371typedef struct pciconf83xx {
372	u32 config_address;
373	u32 config_data;
374	u32 int_ack;
375	u8 res[116];
376} pciconf83xx_t;
377
378/*
379 * PCI Outbound Translation Register
380 */
381typedef struct pci_outbound_window {
382	u32 potar;
383	u8 res0[4];
384	u32 pobar;
385	u8 res1[4];
386	u32 pocmr;
387	u8 res2[4];
388} pot83xx_t;
389
390/*
391 * Sequencer
392 */
393typedef struct ios83xx {
394	pot83xx_t pot[6];
395	u8 res0[0x60];
396	u32 pmcr;
397	u8 res1[4];
398	u32 dtcr;
399	u8 res2[4];
400} ios83xx_t;
401
402/*
403 * PCI Controller Control and Status Registers
404 */
405typedef struct pcictrl83xx {
406	u32 esr;
407	u32 ecdr;
408	u32 eer;
409	u32 eatcr;
410	u32 eacr;
411	u32 eeacr;
412	u32 edlcr;
413	u32 edhcr;
414	u32 gcr;
415	u32 ecr;
416	u32 gsr;
417	u8 res0[12];
418	u32 pitar2;
419	u8 res1[4];
420	u32 pibar2;
421	u32 piebar2;
422	u32 piwar2;
423	u8 res2[4];
424	u32 pitar1;
425	u8 res3[4];
426	u32 pibar1;
427	u32 piebar1;
428	u32 piwar1;
429	u8 res4[4];
430	u32 pitar0;
431	u8 res5[4];
432	u32 pibar0;
433	u8 res6[4];
434	u32 piwar0;
435	u8 res7[132];
436} pcictrl83xx_t;
437
438/*
439 * USB
440 */
441typedef struct usb83xx {
442	u8 fixme[0x1000];
443} usb83xx_t;
444
445/*
446 * TSEC
447 */
448typedef struct tsec83xx {
449	u8 fixme[0x1000];
450} tsec83xx_t;
451
452/*
453 * Security
454 */
455typedef struct security83xx {
456	u8 fixme[0x10000];
457} security83xx_t;
458
459/*
460 *  PCI Express
461 */
462struct pex_inbound_window {
463	u32 ar;
464	u32 tar;
465	u32 barl;
466	u32 barh;
467};
468
469struct pex_outbound_window {
470	u32 ar;
471	u32 bar;
472	u32 tarl;
473	u32 tarh;
474};
475
476struct pex_csb_bridge {
477	u32 pex_csb_ver;
478	u32 pex_csb_cab;
479	u32 pex_csb_ctrl;
480	u8 res0[8];
481	u32 pex_dms_dstmr;
482	u8 res1[4];
483	u32 pex_cbs_stat;
484	u8 res2[0x20];
485	u32 pex_csb_obctrl;
486	u32 pex_csb_obstat;
487	u8 res3[0x98];
488	u32 pex_csb_ibctrl;
489	u32 pex_csb_ibstat;
490	u8 res4[0xb8];
491	u32 pex_wdma_ctrl;
492	u32 pex_wdma_addr;
493	u32 pex_wdma_stat;
494	u8 res5[0x94];
495	u32 pex_rdma_ctrl;
496	u32 pex_rdma_addr;
497	u32 pex_rdma_stat;
498	u8 res6[0xd4];
499	u32 pex_ombcr;
500	u32 pex_ombdr;
501	u8 res7[0x38];
502	u32 pex_imbcr;
503	u32 pex_imbdr;
504	u8 res8[0x38];
505	u32 pex_int_enb;
506	u32 pex_int_stat;
507	u32 pex_int_apio_vec1;
508	u32 pex_int_apio_vec2;
509	u8 res9[0x10];
510	u32 pex_int_ppio_vec1;
511	u32 pex_int_ppio_vec2;
512	u32 pex_int_wdma_vec1;
513	u32 pex_int_wdma_vec2;
514	u32 pex_int_rdma_vec1;
515	u32 pex_int_rdma_vec2;
516	u32 pex_int_misc_vec;
517	u8 res10[4];
518	u32 pex_int_axi_pio_enb;
519	u32 pex_int_axi_wdma_enb;
520	u32 pex_int_axi_rdma_enb;
521	u32 pex_int_axi_misc_enb;
522	u32 pex_int_axi_pio_stat;
523	u32 pex_int_axi_wdma_stat;
524	u32 pex_int_axi_rdma_stat;
525	u32 pex_int_axi_misc_stat;
526	u8 res11[0xa0];
527	struct pex_outbound_window pex_outbound_win[4];
528	u8 res12[0x100];
529	u32 pex_epiwtar0;
530	u32 pex_epiwtar1;
531	u32 pex_epiwtar2;
532	u32 pex_epiwtar3;
533	u8 res13[0x70];
534	struct pex_inbound_window pex_inbound_win[4];
535};
536
537typedef struct pex83xx {
538	u8 pex_cfg_header[0x404];
539	u32 pex_ltssm_stat;
540	u8 res0[0x30];
541	u32 pex_ack_replay_timeout;
542	u8 res1[4];
543	u32 pex_gclk_ratio;
544	u8 res2[0xc];
545	u32 pex_pm_timer;
546	u32 pex_pme_timeout;
547	u8 res3[4];
548	u32 pex_aspm_req_timer;
549	u8 res4[0x18];
550	u32 pex_ssvid_update;
551	u8 res5[0x34];
552	u32 pex_cfg_ready;
553	u8 res6[0x24];
554	u32 pex_bar_sizel;
555	u8 res7[4];
556	u32 pex_bar_sel;
557	u8 res8[0x20];
558	u32 pex_bar_pf;
559	u8 res9[0x88];
560	u32 pex_pme_to_ack_tor;
561	u8 res10[0xc];
562	u32 pex_ss_intr_mask;
563	u8 res11[0x25c];
564	struct pex_csb_bridge bridge;
565	u8 res12[0x160];
566} pex83xx_t;
567
568/*
569 * SATA
570 */
571typedef struct sata83xx {
572	u8 fixme[0x1000];
573} sata83xx_t;
574
575/*
576 * eSDHC
577 */
578typedef struct sdhc83xx {
579	u8 fixme[0x1000];
580} sdhc83xx_t;
581
582/*
583 * SerDes
584 */
585typedef struct serdes83xx {
586	u32 srdscr0;
587	u32 srdscr1;
588	u32 srdscr2;
589	u32 srdscr3;
590	u32 srdscr4;
591	u8 res0[0xc];
592	u32 srdsrstctl;
593	u8 res1[0xdc];
594} serdes83xx_t;
595
596/*
597 * On Chip ROM
598 */
599typedef struct rom83xx {
600	u8 mem[0x10000];
601} rom83xx_t;
602
603/*
604 * TDM
605 */
606typedef struct tdm83xx {
607	u8 fixme[0x200];
608} tdm83xx_t;
609
610/*
611 * TDM DMAC
612 */
613typedef struct tdmdmac83xx {
614	u8 fixme[0x2000];
615} tdmdmac83xx_t;
616
617#if defined(CONFIG_ARCH_MPC834X)
618typedef struct immap {
619	sysconf83xx_t		sysconf;	/* System configuration */
620	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */
621	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */
622	rtclk83xx_t		pit;		/* Periodic Interval Timer */
623	gtm83xx_t		gtm[2];		/* Global Timers Module */
624	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */
625	arbiter83xx_t		arbiter;	/* System Arbiter Registers */
626	reset83xx_t		reset;		/* Reset Module */
627	clk83xx_t		clk;		/* System Clock Module */
628	pmc83xx_t		pmc;		/* Power Management Control Module */
629	gpio83xx_t		gpio[2];	/* General purpose I/O module */
630	u8			res0[0x200];
631	u8			dll_ddr[0x100];
632	u8			dll_lbc[0x100];
633	u8			res1[0xE00];
634#if defined(CONFIG_SYS_FSL_DDR2) || defined(CONFIG_SYS_FSL_DDR3)
635	struct ccsr_ddr		ddr;	/* DDR Memory Controller Memory */
636#else
637	ddr83xx_t		ddr;	/* DDR Memory Controller Memory */
638#endif
639	fsl_i2c_t		i2c[2];		/* I2C Controllers */
640	u8			res2[0x1300];
641	duart83xx_t		duart[2];	/* DUART */
642	u8			res3[0x900];
643	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */
644	u8			res4[0x1000];
645	spi8xxx_t		spi;		/* Serial Peripheral Interface */
646	dma83xx_t		dma;		/* DMA */
647	pciconf83xx_t		pci_conf[2];	/* PCI Software Configuration Registers */
648	ios83xx_t		ios;		/* Sequencer */
649	pcictrl83xx_t		pci_ctrl[2];	/* PCI Controller Control and Status Registers */
650	u8			res5[0x19900];
651	usb83xx_t		usb[2];
652	tsec83xx_t		tsec[2];
653	u8			res6[0xA000];
654	security83xx_t		security;
655	u8			res7[0xC0000];
656} immap_t;
657
658#elif defined(CONFIG_ARCH_MPC8313)
659typedef struct immap {
660	sysconf83xx_t		sysconf;	/* System configuration */
661	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */
662	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */
663	rtclk83xx_t		pit;		/* Periodic Interval Timer */
664	gtm83xx_t		gtm[2];		/* Global Timers Module */
665	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */
666	arbiter83xx_t		arbiter;	/* System Arbiter Registers */
667	reset83xx_t		reset;		/* Reset Module */
668	clk83xx_t		clk;		/* System Clock Module */
669	pmc83xx_t		pmc;		/* Power Management Control Module */
670	gpio83xx_t		gpio[1];	/* General purpose I/O module */
671	u8			res0[0x1300];
672	ddr83xx_t		ddr;		/* DDR Memory Controller Memory */
673	fsl_i2c_t		i2c[2];		/* I2C Controllers */
674	u8			res1[0x1300];
675	duart83xx_t		duart[2];	/* DUART */
676	u8			res2[0x900];
677	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */
678	u8			res3[0x1000];
679	spi8xxx_t		spi;		/* Serial Peripheral Interface */
680	dma83xx_t		dma;		/* DMA */
681	pciconf83xx_t		pci_conf[1];	/* PCI Software Configuration Registers */
682	u8			res4[0x80];
683	ios83xx_t		ios;		/* Sequencer */
684	pcictrl83xx_t		pci_ctrl[1];	/* PCI Controller Control and Status Registers */
685	u8			res5[0x1aa00];
686	usb83xx_t		usb[1];
687	tsec83xx_t		tsec[2];
688	u8			res6[0xA000];
689	security83xx_t		security;
690	u8			res7[0xC0000];
691} immap_t;
692
693#elif defined(CONFIG_ARCH_MPC8308)
694typedef struct immap {
695	sysconf83xx_t		sysconf;	/* System configuration */
696	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */
697	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */
698	rtclk83xx_t		pit;		/* Periodic Interval Timer */
699	gtm83xx_t		gtm[1];		/* Global Timers Module */
700	u8			res0[0x100];
701	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */
702	arbiter83xx_t		arbiter;	/* System Arbiter Registers */
703	reset83xx_t		reset;		/* Reset Module */
704	clk83xx_t		clk;		/* System Clock Module */
705	pmc83xx_t		pmc;		/* Power Management Control Module */
706	gpio83xx_t		gpio[1];	/* General purpose I/O module */
707	u8			res1[0x1300];
708	ddr83xx_t		ddr;		/* DDR Memory Controller Memory */
709	fsl_i2c_t		i2c[2];		/* I2C Controllers */
710	u8			res2[0x1300];
711	duart83xx_t		duart[2];	/* DUART */
712	u8			res3[0x900];
713	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */
714	u8			res4[0x1000];
715	spi8xxx_t		spi;		/* Serial Peripheral Interface */
716	u8			res5[0x1000];
717	pex83xx_t		pciexp[1];	/* PCI Express Controller */
718	u8			res6[0x19000];
719	usb83xx_t		usb[1];		/* USB DR Controller */
720	tsec83xx_t		tsec[2];
721	u8			res7[0x6000];
722	tdmdmac83xx_t		tdmdmac;	/* TDM DMAC */
723	sdhc83xx_t		sdhc;		/* SDHC Controller */
724	u8			res8[0xb4000];
725	serdes83xx_t		serdes[1];	/* SerDes Registers */
726	u8			res9[0x1CF00];
727} immap_t;
728
729#elif defined(CONFIG_ARCH_MPC837X)
730typedef struct immap {
731	sysconf83xx_t		sysconf;	/* System configuration */
732	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */
733	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */
734	rtclk83xx_t		pit;		/* Periodic Interval Timer */
735	gtm83xx_t		gtm[2];		/* Global Timers Module */
736	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */
737	arbiter83xx_t		arbiter;	/* System Arbiter Registers */
738	reset83xx_t		reset;		/* Reset Module */
739	clk83xx_t		clk;		/* System Clock Module */
740	pmc83xx_t		pmc;		/* Power Management Control Module */
741	gpio83xx_t		gpio[2];	/* General purpose I/O module */
742	u8			res0[0x1200];
743	ddr83xx_t		ddr;		/* DDR Memory Controller Memory */
744	fsl_i2c_t		i2c[2];		/* I2C Controllers */
745	u8			res1[0x1300];
746	duart83xx_t		duart[2];	/* DUART */
747	u8			res2[0x900];
748	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */
749	u8			res3[0x1000];
750	spi8xxx_t		spi;		/* Serial Peripheral Interface */
751	dma83xx_t		dma;		/* DMA */
752	pciconf83xx_t		pci_conf[1];	/* PCI Software Configuration Registers */
753	u8			res4[0x80];
754	ios83xx_t		ios;		/* Sequencer */
755	pcictrl83xx_t		pci_ctrl[1];	/* PCI Controller Control and Status Registers */
756	u8			res5[0xa00];
757	pex83xx_t		pciexp[2];	/* PCI Express Controller */
758	u8			res6[0xd000];
759	sata83xx_t		sata[4];	/* SATA Controller */
760	u8			res7[0x7000];
761	usb83xx_t		usb[1];		/* USB DR Controller */
762	tsec83xx_t		tsec[2];
763	u8			res8[0x8000];
764	sdhc83xx_t		sdhc;		/* SDHC Controller */
765	u8			res9[0x1000];
766	security83xx_t		security;
767	u8			res10[0xA3000];
768	serdes83xx_t		serdes[2];	/* SerDes Registers */
769	u8			res11[0xCE00];
770	rom83xx_t		rom;		/* On Chip ROM */
771} immap_t;
772
773#elif defined(CONFIG_ARCH_MPC8360)
774typedef struct immap {
775	sysconf83xx_t		sysconf;	/* System configuration */
776	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */
777	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */
778	rtclk83xx_t		pit;		/* Periodic Interval Timer */
779	u8			res0[0x200];
780	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */
781	arbiter83xx_t		arbiter;	/* System Arbiter Registers */
782	reset83xx_t		reset;		/* Reset Module */
783	clk83xx_t		clk;		/* System Clock Module */
784	pmc83xx_t		pmc;		/* Power Management Control Module */
785	qepi83xx_t		qepi;		/* QE Ports Interrupts Registers */
786	u8			res1[0x300];
787	u8			dll_ddr[0x100];
788	u8			dll_lbc[0x100];
789	u8			res2[0x200];
790	qepio83xx_t		qepio;		/* QE Parallel I/O ports */
791	qesba83xx_t		qesba;		/* QE Secondary Bus Access Windows */
792	u8			res3[0x400];
793	ddr83xx_t		ddr;		/* DDR Memory Controller Memory */
794	fsl_i2c_t		i2c[2];		/* I2C Controllers */
795	u8			res4[0x1300];
796	duart83xx_t		duart[2];	/* DUART */
797	u8			res5[0x900];
798	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */
799	u8			res6[0x2000];
800	dma83xx_t		dma;		/* DMA */
801	pciconf83xx_t		pci_conf[1];	/* PCI Software Configuration Registers */
802	u8			res7[128];
803	ios83xx_t		ios;		/* Sequencer (IOS) */
804	pcictrl83xx_t		pci_ctrl[1];	/* PCI Controller Control and Status Registers */
805	u8			res8[0x4A00];
806	ddr83xx_t		ddr_secondary;	/* Secondary DDR Memory Controller Memory Map */
807	u8			res9[0x22000];
808	security83xx_t		security;
809	u8			res10[0xC0000];
810	u8			qe[0x100000];	/* QE block */
811} immap_t;
812
813#elif defined(CONFIG_ARCH_MPC832X)
814typedef struct immap {
815	sysconf83xx_t		sysconf;	/* System configuration */
816	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */
817	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */
818	rtclk83xx_t		pit;		/* Periodic Interval Timer */
819	gtm83xx_t		gtm[2];		/* Global Timers Module */
820	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */
821	arbiter83xx_t		arbiter;	/* System Arbiter Registers */
822	reset83xx_t		reset;		/* Reset Module */
823	clk83xx_t		clk;		/* System Clock Module */
824	pmc83xx_t		pmc;		/* Power Management Control Module */
825	qepi83xx_t		qepi;		/* QE Ports Interrupts Registers */
826	u8			res0[0x300];
827	u8			dll_ddr[0x100];
828	u8			dll_lbc[0x100];
829	u8			res1[0x200];
830	qepio83xx_t		qepio;		/* QE Parallel I/O ports */
831	u8			res2[0x800];
832	ddr83xx_t		ddr;		/* DDR Memory Controller Memory */
833	fsl_i2c_t		i2c[2];		/* I2C Controllers */
834	u8			res3[0x1300];
835	duart83xx_t		duart[2];	/* DUART */
836	u8			res4[0x900];
837	fsl_lbc_t		im_lbc;		/* Local Bus Controller Regs */
838	u8			res5[0x2000];
839	dma83xx_t		dma;		/* DMA */
840	pciconf83xx_t		pci_conf[1];	/* PCI Software Configuration Registers */
841	u8			res6[128];
842	ios83xx_t		ios;		/* Sequencer (IOS) */
843	pcictrl83xx_t		pci_ctrl[1];	/* PCI Controller Control and Status Registers */
844	u8			res7[0x27A00];
845	security83xx_t		security;
846	u8			res8[0xC0000];
847	u8			qe[0x100000];	/* QE block */
848} immap_t;
849#endif
850
851struct ccsr_gpio {
852	u32	gpdir;
853	u32	gpodr;
854	u32	gpdat;
855	u32	gpier;
856	u32	gpimr;
857	u32	gpicr;
858	union	{
859			u32	gpibe;
860			u8	res0[0xE8];
861	};
862};
863
864#define CFG_SYS_MPC8xxx_DDR_OFFSET	(0x2000)
865#define CFG_SYS_FSL_DDR_ADDR \
866			(CONFIG_SYS_IMMR + CFG_SYS_MPC8xxx_DDR_OFFSET)
867#define CFG_SYS_MPC83xx_DMA_OFFSET	(0x8000)
868#define CFG_SYS_MPC83xx_DMA_ADDR \
869			(CONFIG_SYS_IMMR + CFG_SYS_MPC83xx_DMA_OFFSET)
870#define CFG_SYS_MPC83xx_ESDHC_OFFSET	(0x2e000)
871#define CFG_SYS_MPC83xx_ESDHC_ADDR \
872			(CONFIG_SYS_IMMR + CFG_SYS_MPC83xx_ESDHC_OFFSET)
873
874#define CFG_SYS_LBC_ADDR (&((immap_t *)CONFIG_SYS_IMMR)->im_lbc)
875
876#endif				/* __IMMAP_83xx__ */
877