Hi Stefan, On Thu, 31 May 2012 10:59:08 +0200, Stefan Roese <s...@denx.de> wrote:
> This patch adds support for the X600 SPEAr600 based board. Its also > the first SPEAr600 board that uses the newly introduced SPEAr600 > SPL support. Xloader is not necessary any more. By using the new > "u-boot.spr" make target, one image will generated containing both, > U-Boot SPL (with mkimage header as needed by the SPEAr BootROM, and > the main U-Boot with mkimage header. > > Signed-off-by: Stefan Roese <s...@denx.de> > Cc: Amit Virdi <amit.vi...@st.com> > Cc: Vipin Kumar <vipin.ku...@st.com> > --- > v2: > - Add hush support > - Add bootcount & altbootcmd support > > MAINTAINERS | 2 + > board/spear/x600/Makefile | 47 +++++++ > board/spear/x600/fpga.c | 280 +++++++++++++++++++++++++++++++++++++ > board/spear/x600/fpga.h | 23 +++ > board/spear/x600/x600.c | 124 +++++++++++++++++ > boards.cfg | 1 + > include/configs/x600.h | 339 > +++++++++++++++++++++++++++++++++++++++++++++ > 7 files changed, 816 insertions(+) > create mode 100644 board/spear/x600/Makefile > create mode 100644 board/spear/x600/fpga.c > create mode 100644 board/spear/x600/fpga.h > create mode 100644 board/spear/x600/x600.c > create mode 100644 include/configs/x600.h > > diff --git a/MAINTAINERS b/MAINTAINERS > index f796872..c55faff 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -828,6 +828,8 @@ John Rigby <jcri...@gmail.com> > > Stefan Roese <s...@denx.de> > > + x600 ARM926EJS (spear600 Soc) > + > pdnb3 xscale/ixp > scpu xscale/ixp > > diff --git a/board/spear/x600/Makefile b/board/spear/x600/Makefile > new file mode 100644 > index 0000000..8c4e7e2 > --- /dev/null > +++ b/board/spear/x600/Makefile > @@ -0,0 +1,47 @@ > +# > +# (C) Copyright 2000-2004 > +# Wolfgang Denk, DENX Software Engineering, w...@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 > +# > + > +include $(TOPDIR)/config.mk > + > +LIB = $(obj)lib$(BOARD).o > + > +ifndef CONFIG_SPL_BUILD > +COBJS := fpga.o $(BOARD).o > +endif > +SOBJS := > + > +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) > +OBJS := $(addprefix $(obj),$(COBJS)) > +SOBJS := $(addprefix $(obj),$(SOBJS)) > + > +$(LIB): $(obj).depend $(OBJS) $(SOBJS) > + $(call cmd_link_o_target, $(OBJS) $(SOBJS)) > + > +######################################################################### > + > +# defines $(obj).depend target > +include $(SRCTREE)/rules.mk > + > +sinclude $(obj).depend > + > +######################################################################### > diff --git a/board/spear/x600/fpga.c b/board/spear/x600/fpga.c > new file mode 100644 > index 0000000..85eb31b > --- /dev/null > +++ b/board/spear/x600/fpga.c > @@ -0,0 +1,280 @@ > +/* > + * Copyright (C) 2012 Stefan Roese <s...@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 > + */ > + > +#include <common.h> > +#include <spartan3.h> > +#include <command.h> > +#include <asm/gpio.h> > +#include <asm/io.h> > +#include <asm/arch/hardware.h> > +#include <asm/arch/spr_misc.h> > +#include <asm/arch/spr_ssp.h> > + > +/* > + * FPGA program pin configuration on X600: > + * > + * Only PROG and DONE are connected to GPIOs. INIT is not connected to the > + * SoC at all. And CLOCK and DATA are connected to the SSP2 port. We use > + * 16bit serial writes via this SSP port to write the data bits into the > + * FPGA. > + */ > +#define CONFIG_SYS_FPGA_PROG 2 > +#define CONFIG_SYS_FPGA_DONE 3 > + > +/* > + * Set the active-low FPGA reset signal. > + */ > +static void fpga_reset(int assert) > +{ > + /* > + * On x600 we have no means to toggle the FPGA reset signal > + */ > + debug("%s:%d: RESET (%d)\n", __func__, __LINE__, assert); > +} > + > +/* > + * Set the FPGA's active-low SelectMap program line to the specified level > + */ > +static int fpga_pgm_fn(int assert, int flush, int cookie) > +{ > + debug("%s:%d: FPGA PROG (%d)\n", __func__, __LINE__, assert); > + > + gpio_set_value(CONFIG_SYS_FPGA_PROG, assert); > + > + return assert; > +} > + > +/* > + * Test the state of the active-low FPGA INIT line. Return 1 on INIT > + * asserted (low). > + */ > +static int fpga_init_fn(int cookie) > +{ > + static int state; > + > + debug("%s:%d: init (state=%d)\n", __func__, __LINE__, state); > + > + /* > + * On x600, the FPGA INIT signal is not connected to the SoC. > + * We can't read the INIT status. Let's return the "correct" > + * INIT signal state generated via a local state-machine. > + */ > + if (++state == 1) { > + return 1; > + } else { > + state = 0; > + return 0; > + } > +} > + > +/* > + * Test the state of the active-high FPGA DONE pin > + */ > +static int fpga_done_fn(int cookie) > +{ > + struct ssp_regs *ssp = (struct ssp_regs *)CONFIG_SSP2_BASE; > + > + /* > + * Wait for Tx-FIFO to become empty before looking for DONE > + */ > + while (!(readl(&ssp->sspsr) & SSPSR_TFE)) > + ; > + > + if (gpio_get_value(CONFIG_SYS_FPGA_DONE)) > + return 1; > + else > + return 0; > +} > + > +/* > + * FPGA pre-configuration function. Just make sure that > + * FPGA reset is asserted to keep the FPGA from starting up after > + * configuration. > + */ > +static int fpga_pre_config_fn(int cookie) > +{ > + debug("%s:%d: FPGA pre-configuration\n", __func__, __LINE__); > + fpga_reset(TRUE); > + > + return 0; > +} > + > +/* > + * FPGA post configuration function. Blip the FPGA reset line and then see if > + * the FPGA appears to be running. > + */ > +static int fpga_post_config_fn(int cookie) > +{ > + int rc = 0; > + > + debug("%s:%d: FPGA post configuration\n", __func__, __LINE__); > + > + fpga_reset(TRUE); > + udelay(100); > + fpga_reset(FALSE); > + udelay(100); > + > + return rc; > +} > + > +static int fpga_clk_fn(int assert_clk, int flush, int cookie) > +{ > + /* > + * No dedicated clock signal on x600 (data & clock generated) > + * in SSP interface. So we don't have to do anything here. > + */ > + return assert_clk; > +} > + > +static int fpga_wr_fn(int assert_write, int flush, int cookie) > +{ > + struct ssp_regs *ssp = (struct ssp_regs *)CONFIG_SSP2_BASE; > + static int count; > + static u16 data; > + > + /* > + * First collect 16 bits of data > + */ > + data = data << 1; > + if (assert_write) > + data |= 1; > + > + /* > + * If 16 bits are not available, return for more bits > + */ > + count++; > + if (count != 16) > + return assert_write; > + > + count = 0; > + > + /* > + * Wait for Tx-FIFO to become ready > + */ > + while (!(readl(&ssp->sspsr) & SSPSR_TNF)) > + ; > + > + /* Send 16 bits to FPGA via SSP bus */ > + writel(data, &ssp->sspdr); > + > + return assert_write; > +} > + > +static Xilinx_Spartan3_Slave_Serial_fns x600_fpga_fns = { > + fpga_pre_config_fn, > + fpga_pgm_fn, > + fpga_clk_fn, > + fpga_init_fn, > + fpga_done_fn, > + fpga_wr_fn, > + fpga_post_config_fn, > +}; > + > +static Xilinx_desc fpga[CONFIG_FPGA_COUNT] = { > + XILINX_XC3S1200E_DESC(slave_serial, &x600_fpga_fns, 0) > +}; > + > +/* > + * Initialize the SelectMap interface. We assume that the mode and the > + * initial state of all of the port pins have already been set! > + */ > +static void fpga_serialslave_init(void) > +{ > + debug("%s:%d: Initialize serial slave interface\n", __func__, __LINE__); > + fpga_pgm_fn(FALSE, FALSE, 0); /* make sure program pin is inactive */ > +} > + > +static int expi_setup(int freq) > +{ > + struct misc_regs *misc = (struct misc_regs *)CONFIG_SPEAR_MISCBASE; > + int pll2_m, pll2_n, pll2_p, expi_x, expi_y; > + > + pll2_m = (freq * 2) / 1000; > + pll2_n = 15; > + pll2_p = 1; > + expi_x = 1; > + expi_y = 2; > + > + /* > + * Disable reset, Low compression, Disable retiming, Enable Expi, > + * Enable soft reset, DMA, PLL2, Internal > + */ > + writel(EXPI_CLK_CFG_LOW_COMPR | EXPI_CLK_CFG_CLK_EN | EXPI_CLK_CFG_RST | > + EXPI_CLK_SYNT_EN | EXPI_CLK_CFG_SEL_PLL2 | > + EXPI_CLK_CFG_INT_CLK_EN | (expi_y << 16) | (expi_x << 24), > + &misc->expi_clk_cfg); > + > + /* > + * 6 uA, Internal feedback, 1st order, Non-dithered, Sample Parameters, > + * Enable PLL2, Disable reset > + */ > + writel((pll2_m << 24) | (pll2_p << 8) | (pll2_n), &misc->pll2_frq); > + writel(PLL2_CNTL_6UA | PLL2_CNTL_SAMPLE | PLL2_CNTL_ENABLE | > + PLL2_CNTL_RESETN | PLL2_CNTL_LOCK, &misc->pll2_cntl); > + > + /* > + * Disable soft reset > + */ > + clrbits_le32(&misc->expi_clk_cfg, EXPI_CLK_CFG_RST); > + > + return 0; > +} > + > +/* > + * Initialize the fpga > + */ > +int x600_init_fpga(void) > +{ > + struct ssp_regs *ssp = (struct ssp_regs *)CONFIG_SSP2_BASE; > + struct misc_regs *misc = (struct misc_regs *)CONFIG_SPEAR_MISCBASE; > + > + /* Enable SSP2 clock */ > + writel(readl(&misc->periph1_clken) | MISC_SSP2ENB | MISC_GPIO4ENB, > + &misc->periph1_clken); > + > + /* Set EXPI clock to 45 MHz */ > + expi_setup(45000); > + > + /* Configure GPIO directions */ > + gpio_direction_output(CONFIG_SYS_FPGA_PROG, 0); > + gpio_direction_input(CONFIG_SYS_FPGA_DONE); > + > + writel(SSPCR0_DSS_16BITS, &ssp->sspcr0); > + writel(SSPCR1_SSE, &ssp->sspcr1); > + > + /* > + * Set lowest prescale divisor value (CPSDVSR) of 2 for max download > + * speed. > + * > + * Actual data clock rate is: 80MHz / (CPSDVSR * (SCR + 1)) > + * With CPSDVSR at 2 and SCR at 0, the maximume clock rate is 40MHz. > + */ > + writel(2, &ssp->sspcpsr); > + > + fpga_init(); > + fpga_serialslave_init(); > + > + debug("%s:%d: Adding fpga 0\n", __func__, __LINE__); > + fpga_add(fpga_xilinx, &fpga[0]); > + > + return 0; > +} > diff --git a/board/spear/x600/fpga.h b/board/spear/x600/fpga.h > new file mode 100644 > index 0000000..2b18557 > --- /dev/null > +++ b/board/spear/x600/fpga.h > @@ -0,0 +1,23 @@ > +/* > + * Copyright (C) 2012 Stefan Roese <s...@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 > + */ > + > +int x600_init_fpga(void); > diff --git a/board/spear/x600/x600.c b/board/spear/x600/x600.c > new file mode 100644 > index 0000000..96ec0ad > --- /dev/null > +++ b/board/spear/x600/x600.c > @@ -0,0 +1,124 @@ > +/* > + * (C) Copyright 2009 > + * Vipin Kumar, ST Micoelectronics, vipin.ku...@st.com. > + * > + * Copyright (C) 2012 Stefan Roese <s...@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 > + */ > + > +#include <common.h> > +#include <nand.h> > +#include <netdev.h> > +#include <phy.h> > +#include <rtc.h> > +#include <asm/io.h> > +#include <asm/arch/hardware.h> > +#include <asm/arch/spr_defs.h> > +#include <asm/arch/spr_misc.h> > +#include <linux/mtd/fsmc_nand.h> > +#include "fpga.h" > + > +static struct nand_chip nand_chip[CONFIG_SYS_MAX_NAND_DEVICE]; > + > +int board_init(void) > +{ > + /* > + * X600 is equipped with an M41T82 RTC. This RTC has the > + * HT bit (Halt Update), which needs to be cleared upon > + * power-up. Otherwise the RTC is halted. > + */ > + rtc_reset(); > + > + return spear_board_init(MACH_TYPE_SPEAR600); > +} > + > +int board_late_init(void) > +{ > + /* > + * Monitor and env protection on by default > + */ > + flash_protect(FLAG_PROTECT_SET, > + CONFIG_SYS_FLASH_BASE, CONFIG_SYS_FLASH_BASE + > + CONFIG_SYS_SPL_LEN + CONFIG_SYS_MONITOR_LEN + > + 2 * CONFIG_ENV_SECT_SIZE - 1, > + &flash_info[0]); > + > + /* Init FPGA subsystem */ > + x600_init_fpga(); > + > + return 0; > +} > + > +/* > + * board_nand_init - Board specific NAND initialization > + * @nand: mtd private chip structure > + * > + * Called by nand_init_chip to initialize the board specific functions > + */ > + > +void board_nand_init(void) > +{ > + struct misc_regs *const misc_regs_p = > + (struct misc_regs *)CONFIG_SPEAR_MISCBASE; > + struct nand_chip *nand = &nand_chip[0]; > + > + if (!(readl(&misc_regs_p->auto_cfg_reg) & MISC_NANDDIS)) > + fsmc_nand_init(nand); > +} > + > +int designware_board_phy_init(struct eth_device *dev, int phy_addr, > + int (*mii_write)(struct eth_device *, u8, u8, u16), > + int dw_reset_phy(struct eth_device *)) > +{ > + /* Extended PHY control 1, select GMII */ > + mii_write(dev, phy_addr, 23, 0x0020); > + > + /* Software reset necessary after GMII mode selction */ > + dw_reset_phy(dev); > + > + /* Enable extended page register access */ > + mii_write(dev, phy_addr, 31, 0x0001); > + > + /* 17e: Enhanced LED behavior, needs to be written twice */ > + mii_write(dev, phy_addr, 17, 0x09ff); > + mii_write(dev, phy_addr, 17, 0x09ff); > + > + /* 16e: Enhanced LED method select */ > + mii_write(dev, phy_addr, 16, 0xe0ea); > + > + /* Disable extended page register access */ > + mii_write(dev, phy_addr, 31, 0x0000); > + > + /* Enable clock output pin */ > + mii_write(dev, phy_addr, 18, 0x0049); > + > + return 0; > +} > + > +int board_eth_init(bd_t *bis) > +{ > + int ret = 0; > + > + if (designware_initialize(0, CONFIG_SPEAR_ETHBASE, CONFIG_PHY_ADDR, > + PHY_INTERFACE_MODE_GMII) >= 0) > + ret++; > + > + return ret; > +} > diff --git a/boards.cfg b/boards.cfg > index 2a75880..89984d0 100644 > --- a/boards.cfg > +++ b/boards.cfg > @@ -193,6 +193,7 @@ spear600 arm arm926ejs > spear600 spear > spear600_nand arm arm926ejs spear600 > spear spear spear6xx_evb:spear600,nand > spear600_usbtty arm arm926ejs spear600 > spear spear spear6xx_evb:spear600,usbtty > spear600_usbtty_nand arm arm926ejs spear600 > spear spear spear6xx_evb:spear600,usbtty,nand > +x600 arm arm926ejs - spear > spear x600 > versatileab arm arm926ejs versatile > armltd versatile versatile:ARCH_VERSATILE_AB > versatilepb arm arm926ejs versatile > armltd versatile versatile:ARCH_VERSATILE_PB > versatileqemu arm arm926ejs versatile > armltd versatile versatile:ARCH_VERSATILE_QEMU,ARCH_VERSATILE_PB > diff --git a/include/configs/x600.h b/include/configs/x600.h > new file mode 100644 > index 0000000..3082aaa > --- /dev/null > +++ b/include/configs/x600.h > @@ -0,0 +1,339 @@ > +/* > + * (C) Copyright 2009 > + * Vipin Kumar, STMicroelectronics, <vipin.ku...@st.com> > + * > + * Copyright (C) 2012 Stefan Roese <s...@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 > + */ > + > +#ifndef __CONFIG_H > +#define __CONFIG_H > + > +/* > + * High Level Configuration Options > + * (easy to change) > + */ > +#define CONFIG_SPEAR600 /* SPEAr600 SoC */ > +#define CONFIG_X600 /* on X600 board */ > + > +#include <asm/arch/hardware.h> > + > +/* Timer, HZ specific defines */ > +#define CONFIG_SYS_HZ 1000 > +#define CONFIG_SYS_HZ_CLOCK 8300000 > + > +#define CONFIG_SYS_TEXT_BASE 0x00800040 > +#define CONFIG_SYS_FLASH_BASE 0xf8000000 > +/* Reserve 8KiB for SPL */ > +#define CONFIG_SPL_PAD_TO 8192 /* decimal for 'dd' */ > +#define CONFIG_SYS_SPL_LEN CONFIG_SPL_PAD_TO > +#define CONFIG_SYS_UBOOT_BASE (CONFIG_SYS_FLASH_BASE > + \ > + CONFIG_SYS_SPL_LEN) > +#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE > +#define CONFIG_SYS_MONITOR_LEN 0x60000 > + > +#define CONFIG_ENV_IS_IN_FLASH > + > +/* Serial Configuration (PL011) */ > +#define CONFIG_SYS_SERIAL0 0xD0000000 > +#define CONFIG_SYS_SERIAL1 0xD0080000 > +#define CONFIG_PL01x_PORTS { (void *)CONFIG_SYS_SERIAL0, \ > + (void *)CONFIG_SYS_SERIAL1 } > +#define CONFIG_PL011_SERIAL > +#define CONFIG_PL011_CLOCK (48 * 1000 * 1000) > +#define CONFIG_CONS_INDEX 0 > +#define CONFIG_BAUDRATE 115200 > +#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, \ > + 57600, 115200 } > +#define CONFIG_SYS_LOADS_BAUD_CHANGE > + > +/* NOR FLASH config options */ > +#define CONFIG_ST_SMI > +#define CONFIG_SYS_MAX_FLASH_BANKS 1 > +#define CONFIG_SYS_FLASH_BANK_SIZE 0x01000000 > +#define CONFIG_SYS_FLASH_ADDR_BASE { CONFIG_SYS_FLASH_BASE } > +#define CONFIG_SYS_MAX_FLASH_SECT 128 > +#define CONFIG_SYS_FLASH_EMPTY_INFO > +#define CONFIG_SYS_FLASH_ERASE_TOUT (3 * CONFIG_SYS_HZ) > +#define CONFIG_SYS_FLASH_WRITE_TOUT (3 * CONFIG_SYS_HZ) > + > +/* NAND FLASH config options */ > +#define CONFIG_NAND_FSMC > +#define CONFIG_SYS_NAND_SELF_INIT > +#define CONFIG_SYS_MAX_NAND_DEVICE 1 > +#define CONFIG_SYS_NAND_BASE CONFIG_FSMC_NAND_BASE > +#define CONFIG_MTD_ECC_SOFT > +#define CONFIG_SYS_FSMC_NAND_8BIT > +#define CONFIG_SYS_NAND_ONFI_DETECTION > + > +/* UBI/UBI config options */ > +#define CONFIG_MTD_DEVICE > +#define CONFIG_MTD_PARTITIONS > +#define CONFIG_RBTREE > + > +/* Ethernet config options */ > +#define CONFIG_MII > +#define CONFIG_DESIGNWARE_ETH > +#define CONFIG_DW_SEARCH_PHY > +#define CONFIG_NET_MULTI > +#define CONFIG_PHY_RESET_DELAY 10000 /* in > usec */ > +#define CONFIG_DW_AUTONEG > +#define CONFIG_PHY_ADDR 0 /* PHY address */ > +#define CONFIG_PHY_GIGE /* Include GbE speed/duplex > detection */ > + > +#define CONFIG_SPEAR_GPIO > + > +/* I2C config options */ > +#define CONFIG_HARD_I2C > +#define CONFIG_DW_I2C > +#define CONFIG_SYS_I2C_SPEED 400000 > +#define CONFIG_SYS_I2C_SLAVE 0x02 > +#define CONFIG_I2C_CHIPADDRESS 0x50 > + > +#define CONFIG_RTC_M41T62 1 > +#define CONFIG_SYS_I2C_RTC_ADDR 0x68 > + > +/* FPGA config options */ > +#define CONFIG_FPGA > +#define CONFIG_FPGA_XILINX > +#define CONFIG_FPGA_SPARTAN3 > +#define CONFIG_FPGA_COUNT 1 > + > +/* > + * Command support defines > + */ > +#define CONFIG_CMD_CACHE > +#define CONFIG_CMD_DATE > +#define CONFIG_CMD_DHCP > +#define CONFIG_CMD_ENV > +#define CONFIG_CMD_FPGA > +#define CONFIG_CMD_GPIO > +#define CONFIG_CMD_I2C > +#define CONFIG_CMD_MEMORY > +#define CONFIG_CMD_MII > +#define CONFIG_CMD_MTDPARTS > +#define CONFIG_CMD_NAND > +#define CONFIG_CMD_NET > +#define CONFIG_CMD_PING > +#define CONFIG_CMD_RUN > +#define CONFIG_CMD_SAVES > +#define CONFIG_CMD_UBI > +#define CONFIG_CMD_UBIFS > +#define CONFIG_LZO > + > +/* This must be included AFTER the definition of CONFIG_COMMANDS (if any) */ > +#include <config_cmd_default.h> > + > +#define CONFIG_BOOTDELAY 3 > + > +#define CONFIG_SYS_HUSH_PARSER /* Use the HUSH parser > */ > +#define CONFIG_SYS_PROMPT_HUSH_PS2 "> " > + > +/* > + * U-Boot Environment placing definitions. > + */ > +#define CONFIG_ENV_SECT_SIZE 0x00010000 > +#define CONFIG_ENV_ADDR > (CONFIG_SYS_MONITOR_BASE + \ > + CONFIG_SYS_MONITOR_LEN) > +#define CONFIG_ENV_SIZE 0x02000 > +#define CONFIG_ENV_ADDR_REDUND (CONFIG_ENV_ADDR + \ > + CONFIG_ENV_SECT_SIZE) > +#define CONFIG_ENV_SIZE_REDUND (CONFIG_ENV_SIZE) > + > +/* Miscellaneous configurable options */ > +#define CONFIG_ARCH_CPU_INIT > +#define CONFIG_DISPLAY_CPUINFO > +#define CONFIG_BOOT_PARAMS_ADDR 0x00000100 > +#define CONFIG_CMDLINE_TAG > +#define CONFIG_OF_LIBFDT /* enable passing of devicetree */ > +#define CONFIG_SETUP_MEMORY_TAGS > +#define CONFIG_MISC_INIT_R > +#define CONFIG_BOARD_LATE_INIT > +#define CONFIG_LOOPW /* enable loopw command */ > +#define CONFIG_MX_CYCLIC /* enable mdc/mwc commands */ > +#define CONFIG_ZERO_BOOTDELAY_CHECK > +#define CONFIG_AUTOBOOT_KEYED > +#define CONFIG_AUTOBOOT_STOP_STR " " > +#define CONFIG_AUTOBOOT_PROMPT \ > + "Hit SPACE in %d seconds to stop autoboot.\n", bootdelay > + > +#define CONFIG_SYS_MEMTEST_START 0x00800000 > +#define CONFIG_SYS_MEMTEST_END 0x04000000 > +#define CONFIG_SYS_MALLOC_LEN (1024 * 1024) > +#define CONFIG_IDENT_STRING "-SPEAr" > +#define CONFIG_SYS_LONGHELP > +#define CONFIG_SYS_PROMPT "X600> " > +#define CONFIG_CMDLINE_EDITING > +#define CONFIG_SYS_CBSIZE 256 > +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \ > + sizeof(CONFIG_SYS_PROMPT) + 16) > +#define CONFIG_SYS_MAXARGS 16 > +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE > +#define CONFIG_SYS_LOAD_ADDR 0x00800000 > +#define CONFIG_SYS_CONSOLE_INFO_QUIET > +#define CONFIG_SYS_64BIT_VSPRINTF > + > +/* Use last 2 lwords in internal SRAM for bootcounter */ > +#define CONFIG_BOOTCOUNT_LIMIT > +#define CONFIG_SYS_BOOTCOUNT_ADDR 0xd2801ff8 > + > +#define CONFIG_HOSTNAME x600 > +#define CONFIG_UBI_PART ubi0 > +#define CONFIG_UBIFS_VOLUME rootfs > + > +#define xstr(s) str(s) > +#define str(s) #s > + > +#define MTDIDS_DEFAULT "nand0=nand" > +#define MTDPARTS_DEFAULT "mtdparts=nand:64M(ubi0),64M(ubi1)" > + > +#define CONFIG_EXTRA_ENV_SETTINGS > \ > + "u-boot_addr=1000000\0" \ > + "u-boot=" xstr(CONFIG_HOSTNAME) "/u-boot.spr\0" \ > + "load=tftp ${u-boot_addr} ${u-boot}\0" \ > + "update=protect off " xstr(CONFIG_SYS_MONITOR_BASE) " +${filesize};"\ > + "erase " xstr(CONFIG_SYS_MONITOR_BASE) " +${filesize};" \ > + "cp.b ${u-boot_addr} " xstr(CONFIG_SYS_MONITOR_BASE) \ > + " ${filesize};" \ > + "protect on " xstr(CONFIG_SYS_MONITOR_BASE) \ > + " +${filesize}\0" \ > + "upd=run load update\0" \ > + "ubifs=" xstr(CONFIG_HOSTNAME) "/ubifs.img\0" \ > + "part=" xstr(CONFIG_UBI_PART) "\0" \ > + "vol=" xstr(CONFIG_UBIFS_VOLUME) "\0" \ > + "load_ubifs=tftp ${kernel_addr} ${ubifs}\0" \ > + "update_ubifs=ubi part ${part};ubi write ${kernel_addr} ${vol}" \ > + " ${filesize}\0" \ > + "upd_ubifs=run load_ubifs update_ubifs\0" \ > + "init_ubifs=nand erase.part ubi0;ubi part ${part};" \ > + "ubi create ${vol} 4000000\0" \ > + "netdev=eth0\0" \ > + "rootpath=/opt/eldk-4.2/arm\0" \ > + "nfsargs=setenv bootargs root=/dev/nfs rw " \ > + "nfsroot=${serverip}:${rootpath}\0" \ > + "ramargs=setenv bootargs root=/dev/ram rw\0" \ > + "boot_part=0\0" \ > + "altbootcmd=if test $boot_part -eq 0;then " \ > + "echo Switching to partition 1!;" \ > + "setenv boot_part 1;" \ > + "else; " \ > + "echo Switching to partition 0!;" \ > + "setenv boot_part 0;" \ > + "fi;" \ > + "saveenv;boot\0" \ > + "ubifsargs=set bootargs ubi.mtd=ubi${boot_part} " \ > + "root=ubi0:rootfs rootfstype=ubifs\0" \ > + "kernel=" xstr(CONFIG_HOSTNAME) "/uImage\0" \ > + "kernel_fs=/boot/uImage \0" \ > + "kernel_addr=1000000\0" \ > + "dtb=" xstr(CONFIG_HOSTNAME) "/" xstr(CONFIG_HOSTNAME) ".dtb\0" \ > + "dtb_fs=/boot/" xstr(CONFIG_HOSTNAME) ".dtb\0" \ > + "dtb_addr=1800000\0" \ > + "load_kernel=tftp ${kernel_addr} ${kernel}\0" \ > + "load_dtb=tftp ${dtb_addr} ${dtb}\0" \ > + "addip=setenv bootargs ${bootargs} " \ > + "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}" \ > + ":${hostname}:${netdev}:off panic=1\0" \ > + "addcon=setenv bootargs ${bootargs} console=ttyAMA0," \ > + "${baudrate}\0" \ > + "addmtd=setenv bootargs ${bootargs} ${mtdparts}\0" \ > + "net_nfs=run load_dtb load_kernel; " \ > + "run nfsargs addip addcon addmtd addmisc;" \ > + "bootm ${kernel_addr} - ${dtb_addr}\0" \ > + "mtdids=" MTDIDS_DEFAULT "\0" \ > + "mtdparts=" MTDPARTS_DEFAULT "\0" \ > + "nand_ubifs=run ubifs_mount ubifs_load ubifsargs addip" \ > + " addcon addmisc addmtd;" \ > + "bootm ${kernel_addr} - ${dtb_addr}\0" \ > + "ubifs_mount=ubi part ubi${boot_part};ubifsmount rootfs\0" \ > + "ubifs_load=ubifsload ${kernel_addr} ${kernel_fs};" \ > + "ubifsload ${dtb_addr} ${dtb_fs};\0" \ > + "nand_ubifs=run ubifs_mount ubifs_load ubifsargs addip addcon " \ > + "addmtd addmisc;bootm ${kernel_addr} - ${dtb_addr}\0" \ > + "bootcmd=run nand_ubifs\0" \ > + "\0" > + > +/* Stack sizes */ > +#define CONFIG_STACKSIZE (512 * 1024) > + > +/* Physical Memory Map */ > +#define CONFIG_NR_DRAM_BANKS 1 > +#define PHYS_SDRAM_1 0x00000000 > +#define PHYS_SDRAM_1_MAXSIZE 0x40000000 > + > +#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 > +#define CONFIG_SYS_INIT_RAM_ADDR 0xD2800000 > +#define CONFIG_SYS_INIT_RAM_SIZE 0x2000 > + > +#define CONFIG_SYS_INIT_SP_OFFSET \ > + (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE) > + > +#define CONFIG_SYS_INIT_SP_ADDR \ > + (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET) > + > +/* > + * SPL related defines > + */ > +#define CONFIG_SPL > +#define CONFIG_SPL_TEXT_BASE 0xd2800b00 > +#define CONFIG_SPL_START_S_PATH "arch/arm/cpu/arm926ejs/spear" > +#define CONFIG_SPL_LDSCRIPT "arch/arm/cpu/arm926ejs/spear/u-boot-spl.lds" > + > +#define CONFIG_SPL_SERIAL_SUPPORT > +#define CONFIG_SPL_LIBCOMMON_SUPPORT /* image.c */ > +#define CONFIG_SPL_LIBGENERIC_SUPPORT /* string.c */ > +#define CONFIG_SPL_NO_PRINTF > + > +/* > + * Please select/define only one of the following > + * Each definition corresponds to a supported DDR chip. > + * DDR configuration is based on the following selection > + */ > +#define CONFIG_DDR_MT47H64M16 1 > +#define CONFIG_DDR_MT47H32M16 0 > +#define CONFIG_DDR_MT47H128M8 0 > + > +/* > + * Synchronous/Asynchronous operation of DDR > + * > + * Select CONFIG_DDR_2HCLK for DDR clk = 333MHz, synchronous operation > + * Select CONFIG_DDR_HCLK for DDR clk = 166MHz, synchronous operation > + * Select CONFIG_DDR_PLL2 for DDR clk = PLL2, asynchronous operation > + */ > +#define CONFIG_DDR_2HCLK 1 > +#define CONFIG_DDR_HCLK 0 > +#define CONFIG_DDR_PLL2 0 > + > +/* > + * xxx_BOOT_SUPPORTED macro defines whether a booting type is supported > + * or not. Modify/Add to only these macros to define new boot types > + */ > +#define USB_BOOT_SUPPORTED 0 > +#define PCIE_BOOT_SUPPORTED 0 > +#define SNOR_BOOT_SUPPORTED 1 > +#define NAND_BOOT_SUPPORTED 1 > +#define PNOR_BOOT_SUPPORTED 0 > +#define TFTP_BOOT_SUPPORTED 0 > +#define UART_BOOT_SUPPORTED 0 > +#define SPI_BOOT_SUPPORTED 0 > +#define I2C_BOOT_SUPPORTED 0 > +#define MMC_BOOT_SUPPORTED 0 > + > +#endif /* __CONFIG_H */ Applied to u-boot-arm/master, thanks! Amicalement, -- Albert. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot