/*
 *    Copyright (c) 2010-2012 Nest Labs, Inc.
 *
 *    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
 *
 *    Description:
 *      This file defines the u-boot configuration settings for the
 *      Nest Learning Thermostat board.
 *
 *      The file was originally derived from omap3evm.h.
 *
 *      SDRAM Controller (SDRC):
 *        - Samsung K4X51163PI-FCG6 64 MiB DDR SDRAM
 *        - Nanya NTD6M 512MB LPDDR SDRAM
 *
 *      General Purpose Memory Controller (GPMC):
 *        - Micron MT29F2G16ABDHC-ET 256 MiB SLC NAND Flash (Development)
 *        - Micron MT29F2G16ABBEAH4 256 MiB SLC NAND Flash (Non-development)
 *        - Samsung K9F4G08U0C 512 MiB SLC NAND Flash (Development)
 *        - SMSC LAN9220 10/100 Mbit Ethernet MAC and PHY (Development)
 *
 *      Multimedia Card (MMC) Interface:
 *        - Molex 500998-0900 Secure Digital (SD) Connector
 *        - TI WL1270 Wireless LAN (WLAN) Module
 *
 *      Display Subsystem (DSS):
 *        - Samsung LMS350DF03 HVGA (320 x 480) LCM (Development and Prototype)
 *        - Tianma TM025ZDZ01 (320 x 320) LCM (Production)
 *
 *      Camera Image Signal Processor:
 *        - Unused
 *
 *      Inter-Integrated Circuit (I2C) Controller:
 *        - Channel 1 (Bus 0):
 *          * Texas Instruments TPS65921 Power Management Unit (PMU)
 *
 *        - Channel 2 (Bus 1):
 *        - Si1143 Proximity / Ambient Light Sensor (Development)
 *
 *        - Channel 3 (Bus 2):
 *          * Unused
 *
 *        - Channel 4 (Bus 3):
 *          * Texas Instruments TPS65921 Power Management Unit (PMU)
 *
 *      UART Controller:
 *        - Channel 1:
 *            * Head Unit Serial Console
 *
 *        - Channel 2:
 *            * ZigBee Wireless Module
 *
 *      Multichannel Buffered Serial Port (McBSP):
 *        - Channel 1:
 *        - Channel 2:
 *        - Channel 3:
 *        - Channel 4:
 *        - Channel 5:
 *
 *      Multichannel Serial Peripheral Interface (McSPI):
 *        - Channel 1:
 *        - Channel 2:
 *        - Channel 3:
 *
 *      Interrupt Controller:
 *        - SMSC LAN9220 10/100 Mbit Ethernet MAC and PHY (Development)
 *        - Si1143 Proximity / Ambient Light Sensor (Development)
 *
 *      GPIO Controller:
 *        - Backplate Detect
 *        - ZigBee
 */

#ifndef __DIAMOND_CONFIG_H
#define __DIAMOND_CONFIG_H

/*
 * ARM Processor Architecture, Family and Product Configuration
 */

#define CONFIG_ARMV7			1
#define CONFIG_OMAP             1
#define CONFIG_OMAP3			1
#define CONFIG_OMAP34XX         1
#define CONFIG_OMAP3430         1
#define	CONFIG_OMAP37XX			1
#define	CONFIG_OMAP3730			1

#define CONFIG_SDRC		1	/* The chip has SDRC controller */

#include <asm/arch/cpu.h>	/* get chip and board defs */
#include <asm/arch/omap3.h>

/*
 * Assert the board type(s) we are building for.
 *
 * Multiple board support occurs dynamically by detection and parsing
 * of the 'nlModel' environment key/value pair (see board/nest/common/
 * nlmodel.{h,c}).
 */
#undef CONFIG_DIAMOND_BOARD_DEVELOPMENT
#undef CONFIG_DIAMOND_BOARD_PROTOTYPE
#undef CONFIG_DIAMOND_BOARD_EVT
#undef CONFIG_DIAMOND_BOARD_DVT
#undef CONFIG_DIAMOND_BOARD_PVT
#undef CONFIG_DIAMOND_BOARD_MP
#define CONFIG_DIAMOND_BOARD_MULTI	1

#undef CONFIG_J49_BOARD_PROTOTYPE
#undef CONFIG_J49_BOARD_EVT
#undef CONFIG_J49_BOARD_DVT
#undef CONFIG_J49_BOARD_PRE_PVT
#undef CONFIG_J49_BOARD_PVT
#define CONFIG_J49_BOARD_MULTI		1

/*
 * Display CPU and Board information
 */
#define CONFIG_DISPLAY_CPUINFO		1
#undef CONFIG_DISPLAY_BOARDINFO

/*
 * Clock Definitions
 */

#define V_OSCK							26000000	/* Clock output from T2 */
#define V_SCLK							(V_OSCK >> 1)

#define	CONFIG_SYS_MPU_DPLL_300MHZ		1
#undef	CONFIG_SYS_MPU_DPLL_600MHZ

#define	CONFIG_SYS_CORE_DPLL_332MHZ		1
#undef	CONFIG_SYS_CORE_DPLL_200MHZ
#undef	CONFIG_SYS_CORE_DPLL_400MHZ

#undef CONFIG_USE_IRQ			/* no support for IRQs */

/*
 * The following set of options controls how information gets passed
 * from U-Boot to Linux as a set of tagged records passed in memory.
 */

/*
 * CONFIG_CMDLINE_TAG - This determines whether the U-Boot environment
 * value associated with the 'bootargs' key is tagged and passed.
 */
#define CONFIG_CMDLINE_TAG				1

/*
 * CONFIG_SETUP_MEMORY_TAGS - This determines whether the DRAM memory
 * extents probed and setup by U-Boot are tagged and passed.
 */
#define CONFIG_SETUP_MEMORY_TAGS		1

/*
 * CONFIG_INITRD_TAG - This determines whether an initial RAM disk
 * image extents are tagged and passed.
 */
#define CONFIG_INITRD_TAG				1

/*
 * CONFIG_REVISION_TAG - This determines whether the board revision
 * is tagged and passed.
 */
#define CONFIG_REVISION_TAG				1

/*
 * CONFIG_SERIAL_TAG - This determines whether the board serial number
 * is tagged and passed.
 */
#define CONFIG_SERIAL_TAG				1

#define CONFIG_SYS_GBL_DATA_SIZE	128	/* bytes reserved for */
						/* initial data */
/*
 * Hardware drivers
 */

/*
 * NS16550 Configuration
 */
#define V_NS16550_CLK			48000000	/* 48MHz (APLL96/2) */

#define CONFIG_SYS_NS16550
#define CONFIG_SYS_NS16550_SERIAL
#define CONFIG_SYS_NS16550_REG_SIZE	(-4)
#define CONFIG_SYS_NS16550_CLK		V_NS16550_CLK

/*
 * Initialization Options (from lib_arm/board.c)
 */
#define CONFIG_MISC_INIT_R          1       // Do call misc_init_r()
#undef	CONFIG_BOARD_LATE_INIT				// Do not call board_late_init()

/*
 * select serial console configuration
 */
#define CONFIG_CONS_INDEX				1
#define CONFIG_SYS_NS16550_COM1			OMAP34XX_UART1
#define CONFIG_SERIAL1					1	/* UART1 on OMAP3 */

#define CONFIG_BAUDRATE					115200
#define CONFIG_SYS_BAUDRATE_TABLE		{ 4800, 9600, 19200, 38400, 57600, \
										115200}
/*
 * SD/MMC Support Configuration
 */
#define CONFIG_GENERIC_MMC		1
#define CONFIG_MMC				1
#define CONFIG_OMAP_HSMMC		1
#define CONFIG_DOS_PARTITION	1

/* USB
 * Enable CONFIG_MUSB_HCD for Host functionalities MSC, keyboard
 * Enable CONFIG_MUSB_UDD for Device functionalities.
 */
#undef  CONFIG_USB_OMAP3
#undef  CONFIG_MUSB_HCD
#undef  CONFIG_MUSB_UDC

#ifdef CONFIG_USB_OMAP3

#ifdef CONFIG_MUSB_HCD

#define CONFIG_USB_STORAGE

#ifdef CONFIG_USB_KEYBOARD
#define CONFIG_SYS_USB_EVENT_POLL
#define CONFIG_PREBOOT "usb start"
#endif /* CONFIG_USB_KEYBOARD */

#endif /* CONFIG_MUSB_HCD */

#ifdef CONFIG_MUSB_UDC
/* USB device configuration */
#define CONFIG_USB_DEVICE		1
#define CONFIG_USB_TTY			1
#define CONFIG_SYS_CONSOLE_IS_IN_ENV	1
/* Change these to suit your needs */
#define CONFIG_USBD_VENDORID		0x2464
#define CONFIG_USBD_PRODUCTID		0x0001
#define CONFIG_USBD_MANUFACTURER	"Nest Labs, Inc."
#define CONFIG_USBD_PRODUCT_NAME	"Nest Learning Thermostat"
#endif /* CONFIG_MUSB_UDC */

#endif /* CONFIG_USB_OMAP3 */

/*
 * NOR Flash Driver Configuration Options
 */

/*
 * The Nest Learning Thermostat board contains no NOR flash devices.
 */
#define CONFIG_SYS_NO_FLASH				1

/*
 * NAND Flash Driver Configuration Options
 */

/*
 * The Nest Diamond development board contains two (2) NAND flash
 * devices. The first, the Micron MT29F2G16ABDHC-ET or MT29F2G16ABBEAH4
 * 256 MiB SLC at GPMC chip select 0, and the second, the Samsung
 * K9F4G08U0C 512 MiB SLC at GPMC chip select 3.
 *
 * XXX - TI's version of U-Boot doesn't seem to have a very flexible GPMC
 * configuration (makes all sorts of assupmtions about what should and
 * should not be at a given GPMC address). This probably needs to be
 * revisited or configured in board-specific way in our board
 * file. The implication is we'll probably only get CS0 configured on
 * our behalf.
 */

#define	CONFIG_SYS_NAND_CS0_BASE		NAND_BASE
#define CONFIG_SYS_NAND_CS3_BASE		ONENAND_MAP

#define	CONFIG_SYS_NAND_MT29F2G16		// Micron MT29F2G16
#undef	CONFIG_SYS_NAND_K9F4G08U0C		// Samsung K9F4G08U0C

#if defined(CONFIG_SYS_NAND_MT29F2G16) && defined(CONFIG_SYS_NAND_K9F4G08U0C)
# define CONFIG_SYS_MAX_NAND_DEVICE		2
# define CONFIG_SYS_NAND_BASE_LIST		{ CONFIG_SYS_NAND_CS0_BASE, \
										  CONFIG_SYS_NAND_CS3_BASE }
# define GPMC_NAND_ECC_LP_x16_LAYOUT	1
#elif defined(CONFIG_SYS_NAND_MT29F2G16)
# define CONFIG_SYS_MAX_NAND_DEVICE 	1
# define CONFIG_SYS_NAND_BASE_LIST		{ CONFIG_SYS_NAND_CS0_BASE }
# define GPMC_NAND_ECC_LP_x16_LAYOUT	1
#elif defined(CONFIG_SYS_NAND_K9F4G08U0C)
# define CONFIG_SYS_MAX_NAND_DEVICE 	1
# define CONFIG_SYS_NAND_BASE_LIST		{ CONFIG_SYS_NAND_CS3_BASE }
# define GPMC_NAND_ECC_LP_x8_LAYOUT		1
#else
# define CONFIG_SYS_MAX_NAND_DEVICE		0
#endif /* defined(CONFIG_SYS_NAND_MT29F2G16) && defined(CONFIG_SYS_NAND_K9F4G08U0C) */

/*
 * The Micron MT29F2G16ABDHC-ET or MT29F2G16ABBEAH4 256 MiB SLC NAND
 * flash are designated as the boot NAND because it has the type of
 * ECC supported by the AM3703 boot ROM. The parameters below are those
 * corresponding to these Micron parts.
 */

#define	CONFIG_SYS_NAND_PAGE_SIZE		(2 << 10)
#define	CONFIG_SYS_NAND_BLOCK_SIZE		(128 << 10)

/*
 * Add support for the command line interpreter command 'nandecc' that
 * allows switching between hardware- and software-based ECC for NAND
 * accesses. Hardware ECC is required when reading and writing the
 * initial program loader (IPL) image read by the ARM's boot ROM.
 */
#define CONFIG_NAND_OMAP_GPMC			1

/*
 * I2C Driver Configuration
 */

#define CONFIG_HARD_I2C					1
#define CONFIG_SYS_I2C_SPEED			100000
#define CONFIG_SYS_I2C_SLAVE			1
#define CONFIG_SYS_I2C_BUS				0
#define CONFIG_SYS_I2C_BUS_SELECT		1
#define CONFIG_DRIVER_OMAP34XX_I2C		1

/*
 * CONFIG_I2C_MULTI_BUS - When this is defined, it indicates that the
 * system supports multiple I2C channels/buses and adds the ability
 * for the I2C interactive commands to support switching from one bus
 * to another.
 */
#define CONFIG_I2C_MULTI_BUS			1

/*
 * Power Management Unit Configuration
 */
#define CONFIG_TWL4030_POWER		1

/*
 * GPIO Driver Configuration
 */
#define CONFIG_OMAP_GPIO			1

/*
 * U-Boot Environment Variable Configuration Options
 */

/*
 * CONFIG_PREBOOT - When this option is defined, the existence of the
 * environment variable "preboot" will be checked and the contents of
 * it executed immediately before starting the CONFIG_BOOTDELAY
 * countdown and/or running the auto-boot command.
 */
#if defined(AUPD_LOAD_ADDRESS)
#define CONFIG_PREBOOT
#else
#undef CONFIG_PREBOOT
#endif

/*
 * CONFIG_BOOTARGS - This can be used to pass arguments to the bootm
 * command. The value of CONFIG_BOOTARGS goes into the environment
 * value "bootargs".
 */
#undef	CONFIG_BOOTARGS

/*
 * CONFIG_BOOTFILE - This can be used to set a default value for the
 * "bootfile" environment variable. It should be specified in
 * non-string form as it will be "stringified" by U-Boot's build
 * system, where necessary.
 */
#define CONFIG_BOOTFILE						"uImage"

/*
 * CONFIG_EXTRA_ENV_SETTINGS - Define this to contain any number of
 * NULL-terminated strings (variable = value pairs) that will be part
 * of the default environment compiled into the boot image.
 *
 * For example:
 *
 *      #define CONFIG_EXTRA_ENV_SETTINGS		\
 *          "myvar1=value1\0"					\
 *          "myvar2=value2\0"
 */

/*
 * Set Nest model configuration
 */
#define CONFIG_SYS_MODEL_ENV_SETTINGS									\
	"addmodel=setenv bootargs ${bootargs} nlmodel=${nlmodel}\0"

/*
 * Set Linux serial console device and options
 */
#define	CONFIG_SYS_TTY_ENV_SETTINGS										\
	"addtty=setenv bootargs ${bootargs} console=ttyO0,${baudrate}\0"

/*
 * Set Linux root file system device
 */
#define CONFIG_SYS_ROOT_ENV_SETTINGS(device)							\
	"setenv bootargs root=/dev/" #device

#define CONFIG_SYS_FS_ENV_SETTINGS(fs)									\
	"add" #fs "=setenv bootargs ${bootargs} rootfstype=" #fs "\0"

/*
 * Set Linux Ext3 root file system
 */
#define CONFIG_SYS_EXT3_ENV_SETTINGS		CONFIG_SYS_FS_ENV_SETTINGS(ext3)

/*
 * Set Linux JFFS2 root file system
 */
#define	CONFIG_SYS_JFFS2_ENV_SETTINGS		CONFIG_SYS_FS_ENV_SETTINGS(jffs2)

/*
 * Set Linux MMC/SD media boot / root file system
 */
#define CONFIG_SYS_MMCBOOTCOMMAND										\
	"mmc rescan && "													\
		"fatload mmc 0 ${loadaddr} ${bootfile};"						\
		"run mmcargs addext3 addtty addmodel && "						\
		"bootm ${loadaddr}"

#define	CONFIG_SYS_MMC_ENV_SETTINGS										\
	"mmcargs=" CONFIG_SYS_ROOT_ENV_SETTINGS(mmcblk0p2) " rootwait\0"	\
	"mmcboot=" CONFIG_SYS_MMCBOOTCOMMAND "\0"

/*
 * Set Linux NFS boot / root file system
 */
#define CONFIG_NFSBOOTCOMMAND											\
	"tftp ${loadaddr} ${bootfile} && "									\
		"run nfsargs addip addtty addmodel && "						\
		"bootm ${loadaddr}"

#define	CONFIG_SYS_NFS_ENV_SETTINGS										\
	"netdev=eth0\0"														\
	"addip=setenv bootargs ${bootargs} "								\
		"ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"				\
		":${hostname}:${netdev}:off panic=1\0"							\
	"nfsargs=" CONFIG_SYS_ROOT_ENV_SETTINGS(nfs) " rw "					\
		"nfsroot=${serverip}:${rootpath}\0"

/*
 * Set Linux to suppress most kernel start-up console messages
 */
#define	CONFIG_SYS_QUIET_ENV_SETTINGS									\
	"addquiet=setenv bootargs ${bootargs} quiet\0"

/*
 * Set U-boot to suppress console messages (combines with
 * CONFIG_SILENT_CONSOLE)
 */
#if defined (NEST_BUILD_CONFIG_RELEASE)
    #define CONFIG_SYS_SILENT        "silent=1\0"
#else
    #define CONFIG_SYS_SILENT        ""
#endif

/*
 * For release builds, panics should reboot after one second
 */
#if defined (NEST_BUILD_CONFIG_RELEASE)
	#define CONFIG_PANIC		"1"
#endif

/*
 * Define NAND/JFFS2 boot environment variables for booting from boot
 * partition n.
 */
#define	CONFIG_SYS_NANDBOOTN_ENV_SETTINGS(n, offset, size, device)		\
	"nandboot" #n "=nboot.i ${loadaddr} 0 " offset " && "				\
		CONFIG_SYS_ROOT_ENV_SETTINGS(device) " && "						\
		"run addjffs2 addtty addmodel && "							\
		"bootm ${loadaddr}\0"

/*
 * Offset to and nominal (maybe bigger than actual) size of the
 * primary and secondary Linux kernel images in NAND.
 *
 *  -------------------------------------------------------------------------
 *                                                         Offsets
 *                                               ----------------------------
 *  Alias Description            Size    Blocks  Block     Address     Size
 *  =========================================================================
 *  boot0 Primary Linux Image    8 MiB     64      32    0x00400000     4 MiB
 *  -------------------------------------------------------------------------
 *  boot1 Secondary Linux Image  8 MiB     64     464    0x03A00000    58 MiB
 *  =========================================================================
 *
 *  Although we've reserved 8 MiB of space for kernel images, we only
 *  actually use 4 MiB of it; hence the definition below.
 */
#define	CONFIG_SYS_NANDBOOT0_ENV_OFF	"0x400000"
#define	CONFIG_SYS_NANDBOOT1_ENV_OFF	"0x3A00000"

#define	CONFIG_SYS_NANDBOOT_ENV_SIZE	"0x400000"

#define	CONFIG_SYS_NANDBOOT0_ENV_SIZE	CONFIG_SYS_NANDBOOT_ENV_SIZE
#define	CONFIG_SYS_NANDBOOT1_ENV_SIZE	CONFIG_SYS_NANDBOOT_ENV_SIZE

/*
 * MTD block device files from which the root JFFS2 primary or
 * secondary file systems will be mounted in Linux.
 */
#define	CONFIG_SYS_NANDBOOT0_ENV_DEV	mtdblock7
#define	CONFIG_SYS_NANDBOOT1_ENV_DEV	mtdblock9

/*
 * NAND/JFFS2 boot environment variables for booting from boot
 * partition 0.
 */
#define	CONFIG_SYS_NANDBOOT0_ENV_SETTINGS								\
	CONFIG_SYS_NANDBOOTN_ENV_SETTINGS(0,								\
						   CONFIG_SYS_NANDBOOT0_ENV_OFF,				\
						   CONFIG_SYS_NANDBOOT0_ENV_SIZE,				\
						   CONFIG_SYS_NANDBOOT0_ENV_DEV)

/*
 * NAND/JFFS2 boot environment variables for booting from boot
 * partition 1.
 */
#define	CONFIG_SYS_NANDBOOT1_ENV_SETTINGS								\
	CONFIG_SYS_NANDBOOTN_ENV_SETTINGS(1,								\
						   CONFIG_SYS_NANDBOOT1_ENV_OFF,				\
						   CONFIG_SYS_NANDBOOT1_ENV_SIZE,				\
						   CONFIG_SYS_NANDBOOT1_ENV_DEV)

/*
 * The default boot command
 */
#define CONFIG_BOOTCOMMAND												\
	"run nandboot0 || run nandboot1 || run mmcboot || reset"

/*
 * The alternate default boot command (see CONFIG_BOOTCOUNT_LIMIT)
 */
#define CONFIG_SYS_ALTBOOTCOMMAND					   					\
	"run nandboot1 || run nandboot0 || run mmcboot || reset"

/*
 * Default address at which to load images when referenced by
 * 'loadaddr' in the environment. This should PRECISELY match
 * CONFIG_SYS_LOAD_ADDR.
 *
 * There might be the temptation to base one on the other; however,
 * the way preprocessor stringification occurs, we end up with a
 * string "SDRAM_BASE + (16 << 20)" or some such if we do that.
 */
#define CONFIG_LOADADDR					0x81000000

/*
 * Default MAC address (ethaddr) and serial# definitions
 *
 * Defining CONFIG_ETHADDR and CONFIG_OVERWRITE_ETHADDR_ONCE along
 * with not defining CONFIG_ENV_OVERWRITE, allows us to overwrite the
 * Ethernet MAC from U-Boot if and only if it is currently the default
 * address.
 *
 * The default address was generated from U-Boots 'gen_eth_addr' found
 * in the 'tools' directory of the U-Boot build.
 */
#define CONFIG_ETHADDR			02:28:3e:3d:43:47

/*
 * Command to "reset" the U-Boot environment.
 *
 * Primary and secondary are contiguous so can both be erased at the same 
 * time.  There are six blocks total, two extra for each region as replacements
 * if blocks go bad.  Therefore to ensure the erase clears the environment data
 * in all cases the erase size is 0xc0000.
 */

#define CONFIG_SYS_PRIMARY_ENV_OFF		"0x340000"
#define CONFIG_SYS_ENV_ERASE_SIZE		"0xc0000"

#define CONFIG_SYS_ERASE_COMMAND(offset, size)						    \
	"nand erase " offset " " size

#define CONFIG_SYS_RESETENV_COMMAND								        \
	CONFIG_SYS_ERASE_COMMAND(CONFIG_SYS_PRIMARY_ENV_OFF,			    \
							 CONFIG_SYS_ENV_ERASE_SIZE)

#define CONFIG_SYS_RESETENV_ENV_SETTINGS								\
	"resetenv="															\
		CONFIG_SYS_RESETENV_COMMAND "\0"

#define	CONFIG_EXTRA_ENV_SETTINGS										\
	"altbootcmd=" CONFIG_SYS_ALTBOOTCOMMAND "\0"						\
	CONFIG_SYS_EXT3_ENV_SETTINGS										\
	CONFIG_SYS_MMC_ENV_SETTINGS											\
	CONFIG_SYS_MODEL_ENV_SETTINGS										\
	CONFIG_SYS_NFS_ENV_SETTINGS		   									\
	CONFIG_SYS_QUIET_ENV_SETTINGS										\
	CONFIG_SYS_TTY_ENV_SETTINGS											\
	CONFIG_SYS_JFFS2_ENV_SETTINGS										\
	CONFIG_SYS_NANDBOOT0_ENV_SETTINGS									\
	CONFIG_SYS_NANDBOOT1_ENV_SETTINGS									\
	CONFIG_SYS_RESETENV_ENV_SETTINGS									\
	CONFIG_SYS_SILENT													\
	""

/*
 * CONFIG_VERSION_VARIABLE - Include a read-only variable 'ver' in the
 * environment containing the same contents reported by the 'version'
 * command.
 */
#undef 	CONFIG_VERSION_VARIABLE

/*
 * Autoboot Configuration Options
 *
 * See README and doc/README.autoboot for more information.
 */

/*
 * CONFIG_BOOTDELAY - Countdown <n> seconds, waiting for console
 * input, until automatically running 'bootcmd'. Modified through the
 * environment variable 'bootdelay'.  String define makes it easy
 * to set the environment variable as needed.
 */
#if defined (NEST_BUILD_CONFIG_RELEASE)
    #define CONFIG_BOOTDELAY				0
    #define CONFIG_BOOTDELAY_STR            "0"
#else
    #define CONFIG_BOOTDELAY				1
    #define CONFIG_BOOTDELAY_STR            "1"
#endif



/*
 * CONFIG_ZERO_BOOTDELAY_CHECK - Check for console input to stop the
 * auto boot process even when the environment variable 'bootdelay' is
 * set to 0.
 */
#if !defined(NEST_BUILD_CONFIG_RELEASE)
    #define CONFIG_ZERO_BOOTDELAY_CHECK
#endif

/*
 * CONFIG_BOOTCOUNT_LIMIT - Use the 'bootcount' and 'bootlimit'
 * environment variables to try 'bootcmd' 'bootlimit' times before
 * "failing over" and resorting to 'altbootcmd'.
 *
 */
#undef  CONFIG_BOOTCOUNT_LIMIT

/*
 * CONFIG_SILENT_CONSOLE - quiet messages on the console.
 * See doc/README.silent for more information.
 */
#if defined (NEST_BUILD_CONFIG_RELEASE)
    #define CONFIG_SILENT_CONSOLE
#endif

/*
 * Command line Configuration Options
 */
#include <config_cmd_default.h>	// Enable default commands

/*
 * The default list of commands includes:
 *
 *   CONFIG_CMD_BDI - Provides the 'bdinfo' command which displays some
 *   basic configuration information about the board.
 *
 *   CONFIG_CMD_BOOTD - Provides legacy support for the 'bootd' (boot
 *   default) command.
 *
 *   CONFIG_CMD_CONSOLE - Provides the 'coninfo' command which
 *   displays some basic information about the input/output console.
 *
 *   CONFIG_CMD_ECHO - Provides the 'echo' command.
 *
 *   CONFIG_CMD_EDITENV - Provide the ability to edit an environment
 *   variable.
 *
 *   CONFIG_CMD_FLASH - Provides NOR flash commands (erase, lock, etc.).
 *
 *   CONFIG_CMD_FPGA - Provides FPGA device initialization commands.
 *
 *   CONFIG_CMD_IMI - Provides 'iminfo' image valiation command.
 *
 *   CONFIG_CMD_IMLS - Provides support for probing and listing images.
 *
 *   CONFIG_CMD_ITEST - Provides the 'test' shell command.
 *
 *   CONFIG_CMD_LOADB - Provides the 'loadb' binary booting/loading
 *   over serial command.
 *
 *   CONFIG_CMD_LOADS - Provides the 'loads' S-Record booting/loading
 *   over serial command.
 *
 *   CONFIG_CMD_MEMORY - Provides memory read/modify/write commands.
 *
 *   CONFIG_CMD_MISC - Provides support for commands like sleep.
 *
 *   CONFIG_CMD_NET - Provides networking commands (bootp, tftp, rarp, etc.).
 *
 *   CONFIG_CMD_NFS - Provides network booting/loading over NFS.
 *
 *   CONFIG_CMD_RUN - Provides support for running scripts.
 *
 *   CONFIG_CMD_SAVEENV - Provides the ability to write back
 *   environment changes to non-volatile storage.
 *
 *   CONFIG_CMD_SETGETDCR - Provides PowerPC set/get Device Control
 *   Register (DCR) commands.
 *
 *   CONFIG_CMD_SOURCE - Provides the ability to "source" u-boot
 *   environment scripts in a fashion similar to UNIX shell
 *   interpreters.
 *
 *   CONFIG_CMD_XIMG - Provides support for extracting the specified
 *   part of a multi-image.
 *
 */

/*
 * Command line Configuration Overrides
 */
#define	CONFIG_CMD_AUTOSCRIPT	// Software updates performed via other means
#undef	CONFIG_CMD_CRAMFS		// No CRAMFS file system commands
#undef	CONFIG_CMD_DATE			// No date/time commands for the RTC
#if defined(CONFIG_DIAMOND_BOARD_DEVELOPMENT) || defined(CONFIG_DIAMOND_BOARD_MULTI)
#define CONFIG_CMD_DHCP			// DHCP command
#elif defined(CONFIG_DIAMOND_BOARD_PROTOTYPE) && !defined(CONFIG_DIAMOND_BOARD_MULTI)
#undef	CONFIG_CMD_DHCP			// No DHCP command
#endif /*  defined(CONFIG_DIAMOND_BOARD_DEVELOPMENT) || defined(CONFIG_DIAMOND_BOARD_MULTI) */
#define	CONFIG_CMD_DIAG			// Diagnostics commands
#undef	CONFIG_CMD_DISPLAY		// Dot matrix display commands
#undef	CONFIG_CMD_EEPROM		// No I2C EEPROM read/write commands
#undef  CONFIG_CMD_ELF			// No support for booting an arbitrary ELF image.
#undef	CONFIG_CMD_EXT2			// No EXT2 file system commands
#define	CONFIG_CMD_FAT			// FAT file system commands
#undef	CONFIG_CMD_FLASH		// No NOR flash commmands (no NOR flash)
#undef	CONFIG_CMD_FPGA			// No FPGA commands
#define	CONFIG_CMD_GPIO			// GPIO get/set commands
#define CONFIG_CMD_I2C			// I2C commands
#define CONFIG_I2C_CMD_TREE		// Extended I2C commands
#undef	CONFIG_CMD_IMLS			// No image listing commmands (no NOR flash)
#undef	CONFIG_CMD_IRQ			// Interrupt status commands
#undef	CONFIG_CMD_JFFS			// No JFFS file system commands (S L O W)
#undef	CONFIG_CMD_JFFS2		// No JFFS2 file system commands (S L O W)
#define CONFIG_CMD_LOG			// Log commands
#define	CONFIG_CMD_LOADB		// No serial booting/loading, network only.
#define	CONFIG_CMD_LOADS		// No serial booting/loading, network only.
#if defined(CONFIG_DIAMOND_BOARD_DEVELOPMENT) || defined(CONFIG_DIAMOND_BOARD_MULTI)
#define CONFIG_CMD_MII			// MII PHY SMI commands
#elif defined(CONFIG_DIAMOND_BOARD_PROTOTYPE) && !defined(CONFIG_DIAMOND_BOARD_MULTI)
#undef	CONFIG_CMD_MII			// No MII PHY SMI commands
#endif /*  defined(CONFIG_DIAMOND_BOARD_DEVELOPMENT) || defined(CONFIG_DIAMOND_BOARD_MULTI) */
#define CONFIG_CMD_MMC			// MMC/SD media commands
#undef	CONFIG_CMD_MTDPARTS		// No environment MTD parsing commands
#define CONFIG_CMD_NAND			// NAND flash commands
#if defined(CONFIG_DIAMOND_BOARD_PROTOTYPE) && !defined(CONFIG_DIAMOND_BOARD_MULTI)
#undef	CONFIG_CMD_NET			// No network commands
#undef	CONFIG_CMD_NFS			// No NFS commands
#endif /* defined(CONFIG_DIAMOND_BOARD_PROTOTYPE) && !defined(CONFIG_DIAMOND_BOARD_MULTI) */
#undef	CONFIG_CMD_PCI			// No PCI commands as PCI is unused
#if defined(CONFIG_DIAMOND_BOARD_DEVELOPMENT) || defined(CONFIG_DIAMOND_BOARD_MULTI)
#define CONFIG_CMD_PING			// Ping command
#elif defined(CONFIG_DIAMOND_BOARD_PROTOTYPE) && !defined(CONFIG_DIAMOND_BOARD_MULTI)
#undef	CONFIG_CMD_PING			// No ping command
#endif /*  defined(CONFIG_DIAMOND_BOARD_DEVELOPMENT) || defined(CONFIG_DIAMOND_BOARD_MULTI) */
#undef  CONFIG_CMD_RARP         // No rarpboot command
#define CONFIG_CMD_REGINFO		// Register information command
#undef	CONFIG_CMD_SETGETDCR	// No PowerPC 4xx set/get DCR commands
#undef	CONFIG_CMD_SNTP			// No SNTP commands
#undef	CONFIG_CMD_SPI			// No SPI commands
#undef	CONFIG_CMD_USB			// No USB commands

/*
 * BOOTP/DHCP Command Configuration Options
 */
#define CONFIG_BOOTP_BOOTFILESIZE
#define CONFIG_BOOTP_BOOTPATH
#define	CONFIG_BOOTP_DNS
#define	CONFIG_BOOTP_DNS2
#define CONFIG_BOOTP_GATEWAY
#define CONFIG_BOOTP_HOSTNAME
#define	CONFIG_BOOTP_SUBNETMASK

/*
 * MTD Configuration Options
 */
#if defined(CONFIG_CMD_MTDPARTS)
#define CONFIG_MTD_DEVICE
#define CONFIG_MTD_PARTITIONS

#define MTDIDS_DEFAULT			"nand0=omap2-nand.0"

#define DECLARE_MTDPART(name, size, offset) #size "@" #offset "(" #name ")"

#define MTDPARTS_IPL			DECLARE_MTDPART(ipl,            256k,    0k)
#define MTDPARTS_SPL0			DECLARE_MTDPART(spl0,          1536k,  256k)
#define MTDPARTS_SPL1			DECLARE_MTDPART(spl1,          1536k, 1792k)
#define MTDPARTS_ENV0			DECLARE_MTDPART(env0,           384k, 3328k)
#define MTDPARTS_ENV1			DECLARE_MTDPART(env1,           384k, 3712k)
#define MTDPARTS_BOOT0			DECLARE_MTDPART(boot0,            8m,    4m)
#define MTDPARTS_ROOT0			DECLARE_MTDPART(root0,           46m,   12m)
#define MTDPARTS_BOOT1			DECLARE_MTDPART(boot1,            8m,   58m)
#define MTDPARTS_ROOT1			DECLARE_MTDPART(root1,           46m,   66m)
#define MTDPARTS_SYSTEM_CONFIG	DECLARE_MTDPART(system-config,    4m,  112m)
#define MTDPARTS_USER_CONFIG	DECLARE_MTDPART(user-config,      8m,  116m)
#define MTDPARTS_DATA			DECLARE_MTDPART(data,            20m,  124m)
#define MTDPARTS_LOG			DECLARE_MTDPART(log,             20m,  144m)
#define MTDPARTS_SCRATCH		DECLARE_MTDPART(scratch,         92m,  164m)

#define MTDPARTS_DEFAULT		"mtdparts=omap2-nand.0:"	\
								MTDPARTS_IPL			","	\
								MTDPARTS_SPL0			"," \
								MTDPARTS_SPL1			"," \
								MTDPARTS_ENV0           "," \
								MTDPARTS_ENV1           "," \
								MTDPARTS_BOOT0          "," \
								MTDPARTS_ROOT0          "," \
								MTDPARTS_BOOT1          "," \
								MTDPARTS_ROOT1          "," \
								MTDPARTS_SYSTEM_CONFIG  "," \
								MTDPARTS_USER_CONFIG    "," \
								MTDPARTS_DATA           "," \
								MTDPARTS_LOG            "," \
								MTDPARTS_SCRATCH

#undef CONFIG_MTD_DEBUG
#undef CONFIG_MTD_DEBUG_VERBOSE 1
#endif

/*
 * JFFS2 Configuration Options
 */
#if defined(CONFIG_CMD_JFFS2)
#define CONFIG_JFFS2_NAND
#define CONFIG_JFFS2_SUMMARY
#define CONFIG_SYS_JFFS2_SORT_FRAGMENTS
#endif

/*
 * Memory Command Configuration Options
 */
/*
 * CONFIG_SYS_MEMTEST_{START,END} - Starting and ending address for a simple,
 * interactive memory test associated with CONFIG_CMD_MEM.
 */
#define CONFIG_SYS_MEMTEST_START		((0 << 20) + OMAP34XX_SDRC_CS0)
#define CONFIG_SYS_MEMTEST_END			((31 << 20) + OMAP34XX_SDRC_CS0)

/*
 * CONFIG_LOOPW - Enable the 'loopw' sub-command in the memory command suite.
 */
#define CONFIG_LOOPW            		1

/*
 * CONFIG_MX_CYCLIC - Enable the 'mdc' and 'mwc' sub-commands in the
 * memory command suite.
 */
#define CONFIG_MX_CYCLIC        		1

/*
 * POST Configuration Options
 */

/*
 * CONFIG_POST - Power-on Self Test (POST) blocks to run
 */
#undef	CONFIG_POST

/*
 * Miscellaneous Configurable Options
 */

/*
 * Provide verbose command help
 */
#define CONFIG_SYS_LONGHELP				1

/*
 * Interactive command interpreter prompt
 */
#define CONFIG_SYS_PROMPT				"=> "


/*
 * Size of the console I/O and printf buffers
 */
#define CONFIG_SYS_CBSIZE	        	512
#define CONFIG_SYS_PBSIZE          		(CONFIG_SYS_CBSIZE + \
										 sizeof(CONFIG_SYS_PROMPT) + \
										 16)

/*
 * Define 64-bitisms for both strtoul and vsprintf to ensure that we
 * get correct input and output when dealing with large numbers such
 * as offsets in large media devices or large SDRAM capacities.
 */
#define CONFIG_SYS_64BIT_VSPRINTF		1
#define CONFIG_SYS_64BIT_STRTOUL		1

/*
 * Maximum number of interactive command interpreter arguments.
 */
#define CONFIG_SYS_MAXARGS	        	32

/*
 * Maximum boot argument buffer size
 */
#define CONFIG_SYS_BARGSIZE				512

/*
 * CONFIG_SYS_LOAD_ADDDR - Default address to load to / boot from when no
 * explicit address is provided for their interactive commands.
 *
 * Load at 16 MiB from the base of SDRAM.
 */
#define CONFIG_SYS_LOAD_ADDR			(OMAP34XX_SDRC_CS0 + (16 << 20))

/*
 * CONFIG_SYS_HZ - The default decrementer frequency, in 1 ms
 * ticks. This should NEVER be anything but 1000 for any U-Boot
 * configuration.
 */
#define CONFIG_SYS_HZ					1000

/*
 * Add support for interactive command interpreter command line
 * history and editing.
 */
#define CONFIG_CMDLINE_EDITING

/*
 * Add support for autocompletion of interactive command interpreter command line commands and arguments.
 */
#define	CONFIG_AUTO_COMPLETE

/*
 * Use the more advanced hyper utility shell (hush) interactive
 * command interpreter over the simpler and older u-boot native one to
 * gain valuable features just as variable substitution, control
 * statements, etc. vital for supporting a rich boot script grammar.
 *
 * Also, define the command continuation prompt for hush.
 */
#define CONFIG_SYS_HUSH_PARSER
#define CONFIG_SYS_PROMPT_HUSH_PS2		"> "

/*
 * OMAP3 has 12 GP timers, they can be driven by the system clock
 * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
 * This rate is divided by a local divisor.
 */
#define CONFIG_SYS_TIMERBASE		OMAP34XX_GPT2
#define CONFIG_SYS_PTV			2	/* Divisor: 2^(PTV+1) => 8 */

/*-----------------------------------------------------------------------
 * Stack sizes
 *
 * The stack sizes are set up in start.S using the settings below
 */
#define CONFIG_STACKSIZE	(128 << 10)	/* regular stack 128 KiB */
#ifdef CONFIG_USE_IRQ
#define CONFIG_STACKSIZE_IRQ	(4 << 10)	/* IRQ stack 4 KiB */
#define CONFIG_STACKSIZE_FIQ	(4 << 10)	/* FIQ stack 4 KiB */
#endif

/*-----------------------------------------------------------------------
 * Physical Memory Map
 */
#define CONFIG_NR_DRAM_BANKS		2
#define PHYS_SDRAM_1			OMAP34XX_SDRC_CS0
#define PHYS_SDRAM_1_SIZE		(32 << 20)	/* at least 32 MiB */
#define PHYS_SDRAM_2			OMAP34XX_SDRC_CS1

#define CONFIG_SYS_SDRAM_BASE		PHYS_SDRAM_1
#define CONFIG_SYS_INIT_RAM_ADDR	0x4020f800
#define CONFIG_SYS_INIT_RAM_SIZE	0x800
#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_INIT_RAM_ADDR + \
					 CONFIG_SYS_INIT_RAM_SIZE - \
					 GENERATED_GBL_DATA_SIZE)

#define CONFIG_SYS_TEXT_BASE		0x80100000

/* SDRAM Bank Allocation method */
#define SDRC_R_B_C		1

#define CONFIG_OMAP3_SAMSUNG_DDR	1

/* **** PISMO SUPPORT *** */

/* Configure the PISMO */
#define PISMO1_NAND_SIZE		GPMC_SIZE_128M

#if defined(CONFIG_DIAMOND_BOARD_DEVELOPMENT) || defined(CONFIG_DIAMOND_BOARD_MULTI)
/*
 * SMSC 9115/9118/9220 802.11 10/100 Ethernet
 */
#define CONFIG_NET_MULTI
#define CONFIG_SMC911X
#define CONFIG_SMC911X_32_BIT
#define CONFIG_SMC911X_BASE				0x2C000000

/*
 * Enable MII PHY Management
 */
#define CONFIG_MII
#endif /* defined(CONFIG_DIAMOND_BOARD_DEVELOPMENT) || defined(CONFIG_DIAMOND_BOARD_MULTI) */

/*
 * U-Boot Environment Variable Non-volatile Storage Configuration Options
 */

/*
 * Do not allow overwriting the 'ethaddr' or 'serial#' Ethernet MAC
 * address or erial number environment variables unless they are set
 * to special values (see CONFIG_ETHADDR).
 */
#undef	CONFIG_ENV_OVERWRITE

/*
 * Defining CONFIG_ETHADDR and CONFIG_OVERWRITE_ETHADDR_ONCE along
 * with not defining CONFIG_ENV_OVERWRITE, allows us to overwrite the
 * Ethernet MAC from U-Boot if and only if it is currently the default
 * address.
 */
#define CONFIG_OVERWRITE_ETHADDR_ONCE

/*
 * We only have NAND for non-volatile storage, so we'll store the
 * U-Boot environment there.
 *
 * Location where we expect to find the second-stage boot loader in
 * the boot NAND device.
 *
 * Regardless of the device density used, our primary and secondary
 * environments are always at the same block/sector offsets, so long
 * as the block sizes are the same.
 *
 *  -------------------------------------------------------------------------
 *                                                         Offsets
 *                                               ----------------------------
 *  Alias Description            Size    Blocks  Block     Address     Size
 *  =========================================================================
 *  ipl   X-Loader Image       256 KiB      2       0    0x00000000     0 B
 *  -------------------------------------------------------------------------
 *  spl0  Primary U-Boot Image 1.5 MiB     12       2    0x00040000   256 KiB
 *  -------------------------------------------------------------------------
 *  spl1  Secondary U-Boot     1.5 MiB     12      14    0x001C0000 1.750 MiB
 *        Image
 *  -------------------------------------------------------------------------
 *  env0  Primary U-Boot       384 KiB      3      26    0x00340000 3.250 MiB
 *        Environment [1]     
 *  -------------------------------------------------------------------------
 *  env1  Secondary U-Boot     384 KiB      3      29    0x003A0000 3.625 MiB
 *        Environment [1]
 *  =========================================================================
 *
 *  [1] Even though we reserve 384 KiB and 3 erase blocks of space
 *      for the primary and secondary U-Boot environment, we only
 *      actually use 128 KiB and 1 erase block of it. We need to use
 *      at least one erase block and even though it is excessive, 
 *      anything more is all the more so.
 */

#define CONFIG_ENV_IS_IN_NAND			1

#define CONFIG_SYS_ENV_SECT_SIZE(n)		((n) * CONFIG_SYS_NAND_BLOCK_SIZE)
#define	CONFIG_SYS_ENV_SECT_OFFSET(n)	((n) * CONFIG_SYS_NAND_BLOCK_SIZE)

/*
 * Size and location of primary environment non-volatile storage
 *
 * While we only use one (1) block for the environment, it effectively
 * uses three (3) with two (2) of those being reserved for future
 * growth, spare blocks, etc.
 */
#define	CONFIG_ENV_OFFSET				CONFIG_SYS_ENV_SECT_OFFSET(26)
#define	CONFIG_ENV_SIZE					CONFIG_SYS_ENV_SECT_SIZE(1)
#define CONFIG_ENV_RANGE                CONFIG_SYS_ENV_SECT_SIZE(3)

/* 
 * Number of times to attempt to write environment before declaring a 
 * block bad.
 */
#define CONFIG_ENV_TRY_COUNT            3

/*
 * Size and location of redundant environment non-volatile storage
 */
# define CONFIG_ENV_OFFSET_REDUND		CONFIG_SYS_ENV_SECT_OFFSET(29)
# define CONFIG_ENV_SIZE_REDUND     	CONFIG_ENV_SIZE

/*
 * XXX - TI's implementation of U-Boot tries to make too many
 * assupmptions about things such as where and what flash devices are
 * (e.g. OneNAND, SMNAND, PISMO, etc.) when we are configured for
 * OMAP3 support as though every OMAP3 board was going to be just like
 * their EVM. So, for now, we have to define this.
 */
#define SMNAND_ENV_OFFSET				CONFIG_ENV_OFFSET

/*
 * U-Boot Image Size and Location Configuration
 */
#define CONFIG_SYS_MONITOR_BASE			(TEXT_BASE)
#define CONFIG_SYS_MONITOR_LEN			CONFIG_SYS_ENV_SECT_SIZE(12)

/*
 * Reserve this much space for the dynamically-allocated memory pool
 * (aka heap). Account for a redundant environment, if so configured.
 */
#if defined(CONFIG_ENV_SIZE_REDUND)
# define CONFIG_SYS_MALLOC_EXTRA_LEN	(CONFIG_ENV_SIZE + \
										 CONFIG_ENV_SIZE_REDUND)
#else
# define CONFIG_SYS_MALLOC_EXTRA_LEN	(CONFIG_ENV_SIZE)
#endif /* defined(CONFIG_ENV_SIZE_REDUND) */ 

# define CONFIG_SYS_MALLOC_LEN			ROUND(CONFIG_SYS_MALLOC_EXTRA_LEN + \
											  (256 << 10),					\
											  (4 << 10))

#endif /* __DIAMOND_CONFIG_H */
