/*
 * MCF5272 Internal Memory Map
 *
 * Copyright (c) 2003 Josef Baumgartner <josef.baumgartner@telex.de>
 *
 * See file CREDITS for list of people who contributed to this
 * project.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 * MA 02111-1307 USA
 */

#ifndef __IMMAP_5272__
#define __IMMAP_5272__

#define MMAP_CFG	(CFG_MBAR + 0x00000000)
#define MMAP_INTC	(CFG_MBAR + 0x00000020)
#define MMAP_FBCS	(CFG_MBAR + 0x00000040)
#define MMAP_GPIO	(CFG_MBAR + 0x00000080)
#define MMAP_QSPI	(CFG_MBAR + 0x000000A0)
#define MMAP_PWM	(CFG_MBAR + 0x000000C0)
#define MMAP_DMA0	(CFG_MBAR + 0x000000E0)
#define MMAP_UART0	(CFG_MBAR + 0x00000100)
#define MMAP_UART1	(CFG_MBAR + 0x00000140)
#define MMAP_SDRAM	(CFG_MBAR + 0x00000180)
#define MMAP_TMR0	(CFG_MBAR + 0x00000200)
#define MMAP_TMR1	(CFG_MBAR + 0x00000220)
#define MMAP_TMR2	(CFG_MBAR + 0x00000240)
#define MMAP_TMR3	(CFG_MBAR + 0x00000260)
#define MMAP_WDOG	(CFG_MBAR + 0x00000280)
#define MMAP_PLIC	(CFG_MBAR + 0x00000300)
#define MMAP_FEC	(CFG_MBAR + 0x00000840)
#define MMAP_USB	(CFG_MBAR + 0x00001000)

/* System configuration registers */
typedef struct sys_ctrl {
	uint sc_mbar;
	ushort sc_scr;
	ushort sc_spr;
	uint sc_pmr;
	char res1[2];
	ushort sc_alpr;
	uint sc_dir;
	char res2[12];
} sysctrl_t;

/* Interrupt module registers */
typedef struct int_ctrl {
	uint int_icr1;
	uint int_icr2;
	uint int_icr3;
	uint int_icr4;
	uint int_isr;
	uint int_pitr;
	uint int_piwr;
	uchar res1[3];
	uchar int_pivr;
} intctrl_t;

/* Chip select module registers */
typedef struct cs_ctlr {
	uint cs_br0;
	uint cs_or0;
	uint cs_br1;
	uint cs_or1;
	uint cs_br2;
	uint cs_or2;
	uint cs_br3;
	uint cs_or3;
	uint cs_br4;
	uint cs_or4;
	uint cs_br5;
	uint cs_or5;
	uint cs_br6;
	uint cs_or6;
	uint cs_br7;
	uint cs_or7;
} csctrl_t;

/* GPIO port registers */
typedef struct gpio_ctrl {
	uint gpio_pacnt;
	ushort gpio_paddr;
	ushort gpio_padat;
	uint gpio_pbcnt;
	ushort gpio_pbddr;
	ushort gpio_pbdat;
	uchar res1[4];
	ushort gpio_pcddr;
	ushort gpio_pcdat;
	uint gpio_pdcnt;
	uchar res2[4];
} gpio_t;

/* QSPI module registers */
typedef struct qspi_ctrl {
	ushort qspi_qmr;
	uchar res1[2];
	ushort qspi_qdlyr;
	uchar res2[2];
	ushort qspi_qwr;
	uchar res3[2];
	ushort qspi_qir;
	uchar res4[2];
	ushort qspi_qar;
	uchar res5[2];
	ushort qspi_qdr;
	uchar res6[10];
} qspi_t;

/* PWM module registers */
typedef struct pwm_ctrl {
	uchar pwm_pwcr0;
	uchar res1[3];
	uchar pwm_pwcr1;
	uchar res2[3];
	uchar pwm_pwcr2;
	uchar res3[7];
	uchar pwm_pwwd0;
	uchar res4[3];
	uchar pwm_pwwd1;
	uchar res5[3];
	uchar pwm_pwwd2;
	uchar res6[7];
} pwm_t;

/* DMA module registers */
typedef struct dma_ctrl {
	ulong dma_dmr;
	uchar res1[2];
	ushort dma_dir;
	ulong dma_dbcr;
	ulong dma_dsar;
	ulong dma_ddar;
	uchar res2[12];
} dma_t;

/* SDRAM controller registers, offset: 0x180 */
typedef struct sdram_ctrl {
	uchar res1[2];
	ushort sdram_sdcr;
	uchar res2[2];
	ushort sdram_sdtr;
	uchar res3[120];
} sdramctrl_t;

/* Watchdog registers */
typedef struct wdog_ctrl {
	ushort wdog_wrrr;
	ushort res1;
	ushort wdog_wirr;
	ushort res2;
	ushort wdog_wcr;
	ushort res3;
	ushort wdog_wer;
	uchar res4[114];
} wdog_t;

/* PLIC module registers */
typedef struct plic_ctrl {
	ulong plic_p0b1rr;
	ulong plic_p1b1rr;
	ulong plic_p2b1rr;
	ulong plic_p3b1rr;
	ulong plic_p0b2rr;
	ulong plic_p1b2rr;
	ulong plic_p2b2rr;
	ulong plic_p3b2rr;
	uchar plic_p0drr;
	uchar plic_p1drr;
	uchar plic_p2drr;
	uchar plic_p3drr;
	uchar res1[4];
	ulong plic_p0b1tr;
	ulong plic_p1b1tr;
	ulong plic_p2b1tr;
	ulong plic_p3b1tr;
	ulong plic_p0b2tr;
	ulong plic_p1b2tr;
	ulong plic_p2b2tr;
	ulong plic_p3b2tr;
	uchar plic_p0dtr;
	uchar plic_p1dtr;
	uchar plic_p2dtr;
	uchar plic_p3dtr;
	uchar res2[4];
	ushort plic_p0cr;
	ushort plic_p1cr;
	ushort plic_p2cr;
	ushort plic_p3cr;
	ushort plic_p0icr;
	ushort plic_p1icr;
	ushort plic_p2icr;
	ushort plic_p3icr;
	ushort plic_p0gmr;
	ushort plic_p1gmr;
	ushort plic_p2gmr;
	ushort plic_p3gmr;
	ushort plic_p0gmt;
	ushort plic_p1gmt;
	ushort plic_p2gmt;
	ushort plic_p3gmt;
	uchar res3;
	uchar plic_pgmts;
	uchar plic_pgmta;
	uchar res4;
	uchar plic_p0gcir;
	uchar plic_p1gcir;
	uchar plic_p2gcir;
	uchar plic_p3gcir;
	uchar plic_p0gcit;
	uchar plic_p1gcit;
	uchar plic_p2gcit;
	uchar plic_p3gcit;
	uchar res5[3];
	uchar plic_pgcitsr;
	uchar res6[3];
	uchar plic_pdcsr;
	ushort plic_p0psr;
	ushort plic_p1psr;
	ushort plic_p2psr;
	ushort plic_p3psr;
	ushort plic_pasr;
	uchar res7;
	uchar plic_plcr;
	ushort res8;
	ushort plic_pdrqr;
	ushort plic_p0sdr;
	ushort plic_p1sdr;
	ushort plic_p2sdr;
	ushort plic_p3sdr;
	ushort res9;
	ushort plic_pcsr;
	uchar res10[1184];
} plic_t;

/* USB module registers */
typedef struct usb {
	ushort res1;
	ushort usb_fnr;
	ushort res2;
	ushort usb_fnmr;
	ushort res3;
	ushort usb_rfmr;
	ushort res4;
	ushort usb_rfmmr;
	uchar res5[3];
	uchar usb_far;
	ulong usb_asr;
	ulong usb_drr1;
	ulong usb_drr2;
	ushort res6;
	ushort usb_specr;
	ushort res7;
	ushort usb_ep0sr;
	ulong usb_iep0cfg;
	ulong usb_oep0cfg;
	ulong usb_ep1cfg;
	ulong usb_ep2cfg;
	ulong usb_ep3cfg;
	ulong usb_ep4cfg;
	ulong usb_ep5cfg;
	ulong usb_ep6cfg;
	ulong usb_ep7cfg;
	ulong usb_ep0ctl;
	ushort res8;
	ushort usb_ep1ctl;
	ushort res9;
	ushort usb_ep2ctl;
	ushort res10;
	ushort usb_ep3ctl;
	ushort res11;
	ushort usb_ep4ctl;
	ushort res12;
	ushort usb_ep5ctl;
	ushort res13;
	ushort usb_ep6ctl;
	ushort res14;
	ushort usb_ep7ctl;
	ulong usb_ep0isr;
	ushort res15;
	ushort usb_ep1isr;
	ushort res16;
	ushort usb_ep2isr;
	ushort res17;
	ushort usb_ep3isr;
	ushort res18;
	ushort usb_ep4isr;
	ushort res19;
	ushort usb_ep5isr;
	ushort res20;
	ushort usb_ep6isr;
	ushort res21;
	ushort usb_ep7isr;
	ulong usb_ep0imr;
	ushort res22;
	ushort usb_ep1imr;
	ushort res23;
	ushort usb_ep2imr;
	ushort res24;
	ushort usb_ep3imr;
	ushort res25;
	ushort usb_ep4imr;
	ushort res26;
	ushort usb_ep5imr;
	ushort res27;
	ushort usb_ep6imr;
	ushort res28;
	ushort usb_ep7imr;
	ulong usb_ep0dr;
	ulong usb_ep1dr;
	ulong usb_ep2dr;
	ulong usb_ep3dr;
	ulong usb_ep4dr;
	ulong usb_ep5dr;
	ulong usb_ep6dr;
	ulong usb_ep7dr;
	ushort res29;
	ushort usb_ep0dpr;
	ushort res30;
	ushort usb_ep1dpr;
	ushort res31;
	ushort usb_ep2dpr;
	ushort res32;
	ushort usb_ep3dpr;
	ushort res33;
	ushort usb_ep4dpr;
	ushort res34;
	ushort usb_ep5dpr;
	ushort res35;
	ushort usb_ep6dpr;
	ushort res36;
	ushort usb_ep7dpr;
	uchar res37[788];
	uchar usb_cfgram[1024];
} usb_t;

#endif				/* __IMMAP_5272__ */