/*
 * (C) Copyright 2001-2003
 * Wolfgang Denk, DENX Software Engineering, wd@denx.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
 */

/*
 *
 * Configuration settings for the CPC45 board.
 *
 */

/* ------------------------------------------------------------------------- */

/*
 * board/config.h - configuration options, board specific
 */

#ifndef __CONFIG_H
#define __CONFIG_H

/*
 * High Level Configuration Options
 * (easy to change)
 */

#define CONFIG_MPC824X		1
#define CONFIG_MPC8245		1
#define CONFIG_CPC45		1


#define CONFIG_CONS_INDEX	1
#define CONFIG_BAUDRATE		9600
#define CFG_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600, 115200 }

#define CONFIG_CLOCKS_IN_MHZ	1	/* clocks passsed to Linux in MHz	*/

#define CONFIG_PREBOOT	"echo;echo Type \"run flash_nfs\" to mount root filesystem over NFS;echo"

#define CONFIG_BOOTDELAY	5

#define CONFIG_BOOTP_MASK	(CONFIG_BOOTP_DEFAULT | CONFIG_BOOTP_BOOTFILESIZE)

#define CONFIG_COMMANDS	      ( CONFIG_CMD_DFL	| \
				CFG_CMD_BEDBUG  | \
				CFG_CMD_DHCP	| \
				CFG_CMD_PCI	| \
				0 /* CFG_CMD_DATE */	)

/* This must be included AFTER the definition of CONFIG_COMMANDS (if any)
 */
#include <cmd_confdefs.h>


/*
 * Miscellaneous configurable options
 */
#define CFG_LONGHELP			/* undef to save memory		*/
#define CFG_PROMPT	"=> "		/* Monitor Command Prompt	*/
#define CFG_CBSIZE	256		/* Console I/O Buffer Size	*/

#if 1
#define	CFG_HUSH_PARSER		1	/* use "hush" command parser	*/
#endif
#ifdef	CFG_HUSH_PARSER
#define	CFG_PROMPT_HUSH_PS2	"> "
#endif

/* Print Buffer Size
 */
#define CFG_PBSIZE	(CFG_CBSIZE + sizeof(CFG_PROMPT) + 16)

#define	CFG_MAXARGS	16		/* max number of command args	*/
#define CFG_BARGSIZE	CFG_CBSIZE	/* Boot Argument Buffer Size	*/
#define CFG_LOAD_ADDR	0x00100000	/* Default load address		*/

/*-----------------------------------------------------------------------
 * Start addresses for the final memory configuration
 * (Set up by the startup code)
 * Please note that CFG_SDRAM_BASE _must_ start at 0
 */

#define CFG_SDRAM_BASE	    0x00000000

#if defined(CONFIG_BOOT_ROM)
#define CFG_FLASH_BASE	    0xFF000000
#else
#define CFG_FLASH_BASE	    0xFF800000
#endif

#define CFG_RESET_ADDRESS   0xFFF00100

#define CFG_EUMB_ADDR	    0xFCE00000

#define CFG_MONITOR_BASE    TEXT_BASE

#define CFG_MONITOR_LEN	    (256 << 10) /* Reserve 256 kB for Monitor	*/
#define CFG_MALLOC_LEN	    (128 << 10) /* Reserve 128 kB for malloc()	*/

#define CFG_MEMTEST_START   0x00004000	/* memtest works on		*/
#define CFG_MEMTEST_END	    0x02000000	/* 0 ... 32 MB in DRAM		*/

	/* Maximum amount of RAM.
	 */
#define CFG_MAX_RAM_SIZE    0x10000000


#if CFG_MONITOR_BASE >= CFG_FLASH_BASE
#undef CFG_RAMBOOT
#else
#define CFG_RAMBOOT
#endif


/*-----------------------------------------------------------------------
 * Definitions for initial stack pointer and data area
 */

	/* Size in bytes reserved for initial data
	 */
#define CFG_GBL_DATA_SIZE    128

#define CFG_INIT_RAM_ADDR     0x40000000
#define CFG_INIT_RAM_END      0x1000
#define CFG_GBL_DATA_OFFSET  (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)

/*
 * NS16550 Configuration
 */
#define CFG_NS16550
#define CFG_NS16550_SERIAL

#define CFG_NS16550_REG_SIZE	1

#define CFG_NS16550_CLK		get_bus_freq(0)

#define CFG_NS16550_COM1	(CFG_EUMB_ADDR + 0x4500)
#define CFG_NS16550_COM2	(CFG_EUMB_ADDR + 0x4600)
#define	DUART_DCR		(CFG_EUMB_ADDR + 0x4511)

/*
 * Low Level Configuration Settings
 * (address mappings, register initial values, etc.)
 * You should know what you are doing if you make changes here.
 * For the detail description refer to the MPC8240 user's manual.
 */

#define CONFIG_SYS_CLK_FREQ  33000000
#define CFG_HZ		     1000
/*
 * SDRAM Configuration Settings
 * Please note: currently only 64 and 128 MB SDRAM size supported
 * set CFG_SDRAM_SIZE to 64 or 128
 * Memory configuration using SPD information stored on the SODIMMs
 * not yet supported.
 */

#define	CFG_SDRAM_SIZE    64		/* SDRAM size -- 64 or 128 MB supported */

	/* Bit-field values for MCCR1.
	 */
#define CFG_ROMNAL	    0
#define CFG_ROMFAL	    7

#if (CFG_SDRAM_SIZE == 64)			/* 64 MB */
#define CFG_BANK0_ROW	0			/* SDRAM bank 7-0 row address */
#elif (CFG_SDRAM_SIZE == 128)			/* 128 MB */
#define CFG_BANK0_ROW	2			/* SDRAM bank 7-0 row address */
#else
#  error "SDRAM size not supported"
#endif
#define CFG_BANK1_ROW	0
#define CFG_BANK2_ROW	0
#define CFG_BANK3_ROW	0
#define CFG_BANK4_ROW	0
#define CFG_BANK5_ROW	0
#define CFG_BANK6_ROW	0
#define CFG_BANK7_ROW	0

	/* Bit-field values for MCCR2.
	 */
#define CFG_REFINT	    430	    /* Refresh interval			*/

	/* Burst To Precharge. Bits of this value go to MCCR3 and MCCR4.
	 */
#define CFG_BSTOPRE	    192

	/* Bit-field values for MCCR3.
	 */
#define CFG_REFREC	    2	    /* Refresh to activate interval	*/
#define CFG_RDLAT	    3	    /* Data latancy from read command	*/

	/* Bit-field values for MCCR4.
	 */
#define CFG_PRETOACT	    2	    /* Precharge to activate interval	*/
#define CFG_ACTTOPRE	    5	    /* Activate to Precharge interval	*/
#define CFG_SDMODE_CAS_LAT  2	    /* SDMODE CAS latancy		*/
#define CFG_SDMODE_WRAP	    0	    /* SDMODE wrap type			*/
#define CFG_SDMODE_BURSTLEN 2	    /* SDMODE Burst length		*/
#define CFG_ACTORW	    2
#define CFG_REGISTERD_TYPE_BUFFER 1
#define CFG_EXTROM	    1
#define CFG_REGDIMM	    0

/* Memory bank settings.
 * Only bits 20-29 are actually used from these vales to set the
 * start/end addresses. The upper two bits will always be 0, and the lower
 * 20 bits will be 0x00000 for a start address, or 0xfffff for an end
 * address. Refer to the MPC8240 book.
 */

#define CFG_BANK0_START	    0x00000000
#define CFG_BANK0_END	    (CFG_MAX_RAM_SIZE - 1)
#define CFG_BANK0_ENABLE    1
#define CFG_BANK1_START	    0x3ff00000
#define CFG_BANK1_END	    0x3fffffff
#define CFG_BANK1_ENABLE    0
#define CFG_BANK2_START	    0x3ff00000
#define CFG_BANK2_END	    0x3fffffff
#define CFG_BANK2_ENABLE    0
#define CFG_BANK3_START	    0x3ff00000
#define CFG_BANK3_END	    0x3fffffff
#define CFG_BANK3_ENABLE    0
#define CFG_BANK4_START	    0x3ff00000
#define CFG_BANK4_END	    0x3fffffff
#define CFG_BANK4_ENABLE    0
#define CFG_BANK5_START	    0x3ff00000
#define CFG_BANK5_END	    0x3fffffff
#define CFG_BANK5_ENABLE    0
#define CFG_BANK6_START	    0x3ff00000
#define CFG_BANK6_END	    0x3fffffff
#define CFG_BANK6_ENABLE    0
#define CFG_BANK7_START	    0x3ff00000
#define CFG_BANK7_END	    0x3fffffff
#define CFG_BANK7_ENABLE    0

#define CFG_ODCR	    0xff

#define CFG_IBAT0L  (CFG_SDRAM_BASE | BATL_PP_10 | BATL_MEMCOHERENCE)
#define CFG_IBAT0U  (CFG_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)

#define CFG_IBAT1L  (CFG_INIT_RAM_ADDR | BATL_PP_10 | BATL_MEMCOHERENCE)
#define CFG_IBAT1U  (CFG_INIT_RAM_ADDR | BATU_BL_128K | BATU_VS | BATU_VP)

#define CFG_IBAT2L  (0x80000000 | BATL_PP_10 | BATL_CACHEINHIBIT)
#define CFG_IBAT2U  (0x80000000 | BATU_BL_256M | BATU_VS | BATU_VP)

#define CFG_IBAT3L  (0xFC000000 | BATL_PP_10 | BATL_CACHEINHIBIT)
#define CFG_IBAT3U  (0xFC000000 | BATU_BL_64M | BATU_VS | BATU_VP)

#define CFG_DBAT0L  CFG_IBAT0L
#define CFG_DBAT0U  CFG_IBAT0U
#define CFG_DBAT1L  CFG_IBAT1L
#define CFG_DBAT1U  CFG_IBAT1U
#define CFG_DBAT2L  CFG_IBAT2L
#define CFG_DBAT2U  CFG_IBAT2U
#define CFG_DBAT3L  CFG_IBAT3L
#define CFG_DBAT3U  CFG_IBAT3U

/*
 * For booting Linux, the board info and command line data
 * have to be in the first 8 MB of memory, since this is
 * the maximum mapped by the Linux kernel during initialization.
 */
#define CFG_BOOTMAPSZ	    (8 << 20)	/* Initial Memory map for Linux */

/*-----------------------------------------------------------------------
 * FLASH organization
 */
#define CFG_MAX_FLASH_BANKS	1	/* Max number of flash banks		*/
#define CFG_MAX_FLASH_SECT	39	/* Max number of sectors in one bank	*/
#define INTEL_ID_28F160F3T	0x88F388F3	/*  16M = 1M x 16 top boot sector	*/
#define CFG_FLASH_ERASE_TOUT	120000	/* Timeout for Flash Erase (in ms)	*/
#define CFG_FLASH_WRITE_TOUT	500	/* Timeout for Flash Write (in ms)	*/

	/* Warining: environment is not EMBEDDED in the ppcboot code.
	 * It's stored in flash separately.
	 */
#define CFG_ENV_IS_IN_FLASH	    1

#define CFG_ENV_ADDR		(CFG_FLASH_BASE + 0x7C0000)
#define CFG_ENV_SIZE		0x4000	/* Size of the Environment		*/
#define CFG_ENV_OFFSET		0	/* starting right at the beginning	*/
#define CFG_ENV_SECT_SIZE	0x8000 /* Size of the Environment Sector	*/

/*-----------------------------------------------------------------------
 * Cache Configuration
 */
#define CFG_CACHELINE_SIZE	32
#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
#  define CFG_CACHELINE_SHIFT	5	/* log base 2 of the above value	*/
#endif

/*
 * Internal Definitions
 *
 * Boot Flags
 */
#define BOOTFLAG_COLD		0x01	/* Normal Power-On: Boot from FLASH	*/
#define BOOTFLAG_WARM		0x02	/* Software reboot			*/


#define	SRAM_BASE		0x80000000	/* SRAM base address 	*/
#define	SRAM_END		0x801FFFFF

/*---------------------------------------------------------------------*/
/* CPC45 Memory Map                                                    */
/*---------------------------------------------------------------------*/
#define	SRAM_BASE	0x80000000	/* SRAM base address            */
#define	ST16552_A_BASE	0x80200000	/* ST16552 channel A		*/
#define	ST16552_B_BASE	0x80400000	/* ST16552 channel A		*/
#define	BCSR_BASE	0x80600000	/* board control / status registers */
#define	DISPLAY_BASE	0x80600040	/* DISPLAY base			*/
#define	PCMCIA_MEM_BASE	0x81000000	/* PCMCIA memory window base        */
#define	PCMCIA_IO_BASE	0xFE000000	/* PCMCIA IO window base            */


/*---------------------------------------------------------------------*/
/* CPC45 Control/Status Registers                                      */
/*---------------------------------------------------------------------*/
#define	IRQ_ENA_1		*((volatile uchar*)(BCSR_BASE + 0x00))
#define	IRQ_STAT_1		*((volatile uchar*)(BCSR_BASE + 0x01))
#define	IRQ_ENA_2		*((volatile uchar*)(BCSR_BASE + 0x02))
#define	IRQ_STAT_2		*((volatile uchar*)(BCSR_BASE + 0x03))
#define	BOARD_CTRL		*((volatile uchar*)(BCSR_BASE + 0x04))
#define	BOARD_STAT		*((volatile uchar*)(BCSR_BASE + 0x05))
#define	WDG_START		*((volatile uchar*)(BCSR_BASE + 0x06))
#define	WDG_PRESTOP		*((volatile uchar*)(BCSR_BASE + 0x06))
#define	WDG_STOP		*((volatile uchar*)(BCSR_BASE + 0x06))
#define	BOARD_REV		*((volatile uchar*)(BCSR_BASE + 0x07))

/* IRQ_ENA_1 bit definitions */
#define	I_ENA_1_IERA	0x80		/* INTA enable 			*/
#define	I_ENA_1_IERB	0x40		/* INTB enable			*/
#define	I_ENA_1_IERC	0x20		/* INTC enable			*/
#define	I_ENA_1_IERD	0x10		/* INTD enable			*/

/* IRQ_STAT_1 bit definitions */
#define	I_STAT_1_INTA	0x80		/* INTA status			*/
#define	I_STAT_1_INTB	0x40		/* INTB status			*/
#define	I_STAT_1_INTC	0x20		/* INTC status			*/
#define	I_STAT_1_INTD	0x10		/* INTD status			*/

/* IRQ_ENA_2 bit definitions */
#define	I_ENA_2_IEAB	0x80		/* ABORT IRQ enable		*/
#define	I_ENA_2_IEK1	0x40		/* KEY1 IRQ enable		*/
#define	I_ENA_2_IEK2	0x20		/* KEY2 IRQ enable		*/
#define	I_ENA_2_IERT	0x10		/* RTC IRQ enable		*/
#define	I_ENA_2_IESM	0x08		/* LM81 IRQ enable		*/
#define	I_ENA_2_IEDG	0x04		/* DEGENERATING IRQ enable	*/
#define	I_ENA_2_IES2	0x02		/* ST16552/B IRQ enable		*/
#define	I_ENA_2_IES1	0x01		/* ST16552/A IRQ enable		*/

/* IRQ_STAT_2 bit definitions */
#define	I_STAT_2_ABO	0x80		/* ABORT IRQ status		*/
#define	I_STAT_2_KY1	0x40		/* KEY1 IRQ status		*/
#define	I_STAT_2_KY2	0x20		/* KEY2 IRQ status		*/
#define	I_STAT_2_RTC	0x10		/* RTC IRQ status		*/
#define	I_STAT_2_SMN	0x08		/* LM81 IRQ status		*/
#define	I_STAT_2_DEG	0x04		/* DEGENERATING IRQ status	*/
#define	I_STAT_2_SIO2	0x02		/* ST16552/B IRQ status		*/
#define	I_STAT_2_SIO1	0x01		/* ST16552/A IRQ status		*/

/* BOARD_CTRL bit definitions */
#define	USER_LEDS		2			/* 2 user LEDs	*/

#if (USER_LEDS == 4)
#define	B_CTRL_WRSE		0x80
#define	B_CTRL_KRSE		0x40
#define	B_CTRL_FWRE		0x20		/* Flash write enable		*/
#define	B_CTRL_FWPT		0x10		/* Flash write protect		*/
#define	B_CTRL_LED3		0x08		/* LED 3 control		*/
#define	B_CTRL_LED2		0x04		/* LED 2 control		*/
#define	B_CTRL_LED1		0x02		/* LED 1 control		*/
#define	B_CTRL_LED0		0x01		/* LED 0 control		*/
#else
#define	B_CTRL_WRSE		0x80
#define	B_CTRL_KRSE		0x40
#define	B_CTRL_FWRE_1		0x20		/* Flash write enable		*/
#define	B_CTRL_FWPT_1		0x10		/* Flash write protect		*/
#define	B_CTRL_LED1		0x08		/* LED 1 control		*/
#define	B_CTRL_LED0		0x04		/* LED 0 control		*/
#define	B_CTRL_FWRE_0		0x02		/* Flash write enable		*/
#define	B_CTRL_FWPT_0		0x01		/* Flash write protect		*/
#endif

/* BOARD_STAT bit definitions */
#define	B_STAT_WDGE		0x80
#define	B_STAT_WDGS		0x40
#define	B_STAT_WRST		0x20
#define	B_STAT_KRST		0x10
#define	B_STAT_CSW3		0x08		/* sitch bit 3 status		*/
#define	B_STAT_CSW2		0x04		/* sitch bit 2 status		*/
#define	B_STAT_CSW1		0x02		/* sitch bit 1 status		*/
#define	B_STAT_CSW0		0x01		/* sitch bit 0 status		*/

/*---------------------------------------------------------------------*/
/* Display addresses                                                   */
/*---------------------------------------------------------------------*/
#define	DISP_UDC_RAM	(DISPLAY_BASE + 0x08)	/* UDC RAM	       */
#define	DISP_CHR_RAM	(DISPLAY_BASE + 0x18)	/* character Ram       */
#define	DISP_FLASH	(DISPLAY_BASE + 0x20)	/* Flash Ram           */

#define	DISP_UDC_ADR	*((volatile uchar*)(DISPLAY_BASE + 0x00))	/* UDC Address Reg.    */
#define	DISP_CWORD	*((volatile uchar*)(DISPLAY_BASE + 0x10))	/* Control Word Reg.   */

#define	DISP_DIG0	*((volatile uchar*)(DISP_CHR_RAM + 0x00))	/* Digit 0 address     */
#define	DISP_DIG1	*((volatile uchar*)(DISP_CHR_RAM + 0x01))	/* Digit 0 address     */
#define	DISP_DIG2	*((volatile uchar*)(DISP_CHR_RAM + 0x02))	/* Digit 0 address     */
#define	DISP_DIG3	*((volatile uchar*)(DISP_CHR_RAM + 0x03))	/* Digit 0 address     */
#define	DISP_DIG4	*((volatile uchar*)(DISP_CHR_RAM + 0x04))	/* Digit 0 address     */
#define	DISP_DIG5	*((volatile uchar*)(DISP_CHR_RAM + 0x05))	/* Digit 0 address     */
#define	DISP_DIG6	*((volatile uchar*)(DISP_CHR_RAM + 0x06))	/* Digit 0 address     */
#define	DISP_DIG7	*((volatile uchar*)(DISP_CHR_RAM + 0x07))	/* Digit 0 address     */


/*-----------------------------------------------------------------------
 * PCI stuff
 *-----------------------------------------------------------------------
 */
#define CONFIG_PCI			/* include pci support			*/
#undef CONFIG_PCI_PNP

#define CONFIG_NET_MULTI		/* Multi ethernet cards support 	*/

#define CONFIG_EEPRO100
#define CFG_RX_ETH_BUFFER	8               /* use 8 rx buffer on eepro100  */

#define PCI_ENET0_IOADDR	0x00104000
#define PCI_ENET0_MEMADDR	0x82000000
#define	PCI_PLX9030_MEMADDR	0x82100000
#endif	/* __CONFIG_H */
