[U-Boot] [PATCH 2/2] Add board support for hawkboard

The patch adds basic board support for TI's OMAP-L138 based Hawkboard. This board is pretty similar to the da850 EVM. Support for nand and network access is added in this version.
The following bootup procedure is used.
At reset, the Rom Boot Loader(RBL), initialises the ddr and the nand controllers and copies the second stage bootloader(nand_spl) to RAM. The secondary bootloader then copies u-boot from a predefined location in the nand flash to the RAM, and passes control to the u-boot image.
Three config options are supported * hawkboard_config - Used to create the u-boot.bin. Tftp the u-boot.bin image to the RAM from u-boot, and flash to the nand flash at address 0xe0000.
* hawkboard_nand_config - Used to generate the secondary bootloader(nand_spl) image. This creates an elf file u-boot-spl under nand_spl/. Create an AIS signed image using this file, and flash it to the nand flash at address 0x20000. The ais file should fit in one block.
* hawkboard_uart_config - This is same as the first image, but with the TEXT_BASE as expected by the RBL(0xc1080000). Create the AIS Signed bin, as use the normal UART boot procedure to boot the image.
Signed-off-by: Sughosh Ganu urwithsughosh@gmail.com --- Makefile | 17 +++ arch/arm/cpu/arm926ejs/davinci/cpu.c | 2 + arch/arm/include/asm/arch-davinci/hardware.h | 5 +- board/davinci/common/misc.c | 2 + board/davinci/da8xxevm/Makefile | 1 + board/davinci/da8xxevm/config.mk | 3 + board/davinci/da8xxevm/hawkboard.c | 201 ++++++++++++++++++++++++++ drivers/mtd/nand/davinci_nand.c | 1 + include/configs/hawkboard.h | 200 +++++++++++++++++++++++++ nand_spl/board/davinci/da8xxevm/Makefile | 141 ++++++++++++++++++ nand_spl/board/davinci/da8xxevm/config.mk | 40 +++++ nand_spl/board/davinci/da8xxevm/u-boot.lds | 75 ++++++++++ nand_spl/nand_boot.c | 3 +- 13 files changed, 689 insertions(+), 2 deletions(-) create mode 100644 board/davinci/da8xxevm/hawkboard.c create mode 100644 include/configs/hawkboard.h create mode 100644 nand_spl/board/davinci/da8xxevm/Makefile create mode 100644 nand_spl/board/davinci/da8xxevm/config.mk create mode 100644 nand_spl/board/davinci/da8xxevm/u-boot.lds
diff --git a/Makefile b/Makefile index 06c71a2..7b8152c 100644 --- a/Makefile +++ b/Makefile @@ -911,6 +911,23 @@ cp922_XA10_config \ cp1026_config: unconfig @board/armltd/integrator/split_by_variant.sh cp $@
+hawkboard_config \ +hawkboard_uart_config \ +hawkboard_nand_config : unconfig + @mkdir -p $(obj)include + @mkdir -p $(obj)board/davinci/da8xxevm + @if [ -n "$(findstring _nand_,$@)" ]; then \ + echo "#define CONFIG_NAND_U_BOOT" >> $(obj)include/config.h; \ + echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk; \ + echo "CONFIG_SYS_TEXT_BASE = 0xc1080000" >$(obj)board/davinci/da8xxevm/config.tmp; \ + elif [ -n "$(findstring _uart_,$@)" ]; then \ + echo "CONFIG_SYS_TEXT_BASE = 0xc1080000" >$(obj)board/davinci/da8xxevm/config.tmp; \ + else \ + echo "CONFIG_SYS_TEXT_BASE = 0xc1180000" >$(obj)board/davinci/da8xxevm/config.tmp; \ + fi + + @$(MKCONFIG) -n $@ -a hawkboard arm arm926ejs da8xxevm davinci davinci + nhk8815_config \ nhk8815_onenand_config: unconfig @mkdir -p $(obj)include diff --git a/arch/arm/cpu/arm926ejs/davinci/cpu.c b/arch/arm/cpu/arm926ejs/davinci/cpu.c index fc3551c..b4a7382 100644 --- a/arch/arm/cpu/arm926ejs/davinci/cpu.c +++ b/arch/arm/cpu/arm926ejs/davinci/cpu.c @@ -109,6 +109,7 @@ out: } #endif /* CONFIG_SOC_DA8XX */
+#if !defined(CONFIG_NAND_SPL) #ifdef CONFIG_DISPLAY_CPUINFO
static unsigned pll_div(volatile void *pllbase, unsigned offset) @@ -189,3 +190,4 @@ int cpu_eth_init(bd_t *bis) #endif return 0; } +#endif /* !CONFIG_NAND_SPL */ diff --git a/arch/arm/include/asm/arch-davinci/hardware.h b/arch/arm/include/asm/arch-davinci/hardware.h index 3520cf8..d006ac1 100644 --- a/arch/arm/include/asm/arch-davinci/hardware.h +++ b/arch/arm/include/asm/arch-davinci/hardware.h @@ -379,7 +379,10 @@ int clk_get(enum davinci_clk_ids id); /* Boot config */ struct davinci_syscfg_regs { dv_reg revid; - dv_reg rsvd[71]; + dv_reg rsvd[13]; + dv_reg kick0; + dv_reg kick1; + dv_reg rsvd1[56]; dv_reg pinmux[20]; dv_reg suspsrc; dv_reg chipsig; diff --git a/board/davinci/common/misc.c b/board/davinci/common/misc.c index 28750b1..546fd93 100644 --- a/board/davinci/common/misc.c +++ b/board/davinci/common/misc.c @@ -33,6 +33,7 @@
DECLARE_GLOBAL_DATA_PTR;
+#if !defined(CONFIG_NAND_SPL) #if defined(CONFIG_SYS_ARM_WITHOUT_RELOC) int dram_init(void) { @@ -105,6 +106,7 @@ void davinci_sync_env_enetaddr(uint8_t *rom_enetaddr) }
#endif /* DAVINCI_EMAC */ +#endif /* !CONFIG_NAND_SPL */
/* * Change the setting of a pin multiplexer field. diff --git a/board/davinci/da8xxevm/Makefile b/board/davinci/da8xxevm/Makefile index 17cbe86..1a67351 100644 --- a/board/davinci/da8xxevm/Makefile +++ b/board/davinci/da8xxevm/Makefile @@ -30,6 +30,7 @@ LIB = $(obj)lib$(BOARD).a COBJS-y += common.o COBJS-$(CONFIG_MACH_DAVINCI_DA830_EVM) += da830evm.o COBJS-$(CONFIG_MACH_DAVINCI_DA850_EVM) += da850evm.o +COBJS-$(CONFIG_MACH_DAVINCI_HAWK) += hawkboard.o
COBJS := $(COBJS-y)
diff --git a/board/davinci/da8xxevm/config.mk b/board/davinci/da8xxevm/config.mk index e176f7d..9fc7ad9 100644 --- a/board/davinci/da8xxevm/config.mk +++ b/board/davinci/da8xxevm/config.mk @@ -38,6 +38,9 @@ # # we load ourself to C108 '0000
+sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp
#Provide at least 16MB spacing between us and the Linux Kernel image +ifndef CONFIG_SYS_TEXT_BASE CONFIG_SYS_TEXT_BASE = 0xC1080000 +endif diff --git a/board/davinci/da8xxevm/hawkboard.c b/board/davinci/da8xxevm/hawkboard.c new file mode 100644 index 0000000..904741f --- /dev/null +++ b/board/davinci/da8xxevm/hawkboard.c @@ -0,0 +1,201 @@ +/* + * Modified for Hawkboard - Syed Mohammed Khasim khasim@beagleboard.org + * + * Copyright (C) 2008 Sekhar Nori, Texas Instruments, Inc. nsekhar@ti.com + * Copyright (C) 2007 Sergey Kubushyn ksi@koi8.net + * Copyright (C) 2004 Texas Instruments. + * + * ---------------------------------------------------------------------------- + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + * ---------------------------------------------------------------------------- + */ + +#include <common.h> +#include <asm/errno.h> +#include <asm/arch/hardware.h> +#include <asm/arch/emac_defs.h> +#include <asm/io.h> +#include <davinci_misc.h> +#include <ns16550.h> +#include <da8xx_common.h> +DECLARE_GLOBAL_DATA_PTR; + +#define pinmux(x) (&davinci_syscfg_regs->pinmux[x]) +#define HAWKBOARD_KICK0_UNLOCK 0x83e70b13 +#define HAWKBOARD_KICK1_UNLOCK 0x95a4f1e0 + +static const struct pinmux_config mii_pins[] = { + { pinmux(2), 8, 1 }, + { pinmux(2), 8, 2 }, + { pinmux(2), 8, 3 }, + { pinmux(2), 8, 4 }, + { pinmux(2), 8, 5 }, + { pinmux(2), 8, 6 }, + { pinmux(2), 8, 7 } +}; + +static const struct pinmux_config mdio_pins[] = { + { pinmux(4), 8, 0 }, + { pinmux(4), 8, 1 } +}; + +static const struct pinmux_config nand_pins[] = { + { pinmux(7), 1, 1 }, + { pinmux(7), 1, 2 }, + { pinmux(7), 1, 4 }, + { pinmux(7), 1, 5 }, + { pinmux(9), 1, 0 }, + { pinmux(9), 1, 1 }, + { pinmux(9), 1, 2 }, + { pinmux(9), 1, 3 }, + { pinmux(9), 1, 4 }, + { pinmux(9), 1, 5 }, + { pinmux(9), 1, 6 }, + { pinmux(9), 1, 7 }, + { pinmux(12),1, 5 }, + { pinmux(12),1, 6 } +}; + +static const struct pinmux_config uart2_pins[] = { + { pinmux(0), 4, 6 }, + { pinmux(0), 4, 7 }, + { pinmux(4), 2, 4 }, + { pinmux(4), 2, 5 } +}; + +static const struct pinmux_config i2c_pins[] = { + { pinmux(4), 2, 4 }, + { pinmux(4), 2, 5 } +}; + +static const struct pinmux_resource pinmuxes[] = { + PINMUX_ITEM(mii_pins), + PINMUX_ITEM(mdio_pins), + PINMUX_ITEM(i2c_pins), + PINMUX_ITEM(nand_pins), + PINMUX_ITEM(uart2_pins), +}; + +static const struct lpsc_resource lpsc[] = { + { DAVINCI_LPSC_AEMIF }, /* NAND, NOR */ + { DAVINCI_LPSC_SPI1 }, /* Serial Flash */ + { DAVINCI_LPSC_EMAC }, /* image download */ + { DAVINCI_LPSC_UART2 }, /* console */ + { DAVINCI_LPSC_GPIO }, +}; + +#if !defined(CONFIG_NAND_SPL) +int board_init(void) +{ + /* arch number of the board */ + gd->bd->bi_arch_number = MACH_TYPE_OMAPL138_HAWKBOARD; + + /* address of boot parameters */ + gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR; + + return 0; +} + +int board_early_init_f(void) +{ + /* + * Kick Registers need to be set to allow access to Pin Mux registers + */ + writel(HAWKBOARD_KICK0_UNLOCK, &davinci_syscfg_regs->kick0); + writel(HAWKBOARD_KICK1_UNLOCK, &davinci_syscfg_regs->kick1); + + /* set cfgchip3 to select mii */ + writel(readl(&davinci_syscfg_regs->cfgchip3) & + ~(1 << 8), &davinci_syscfg_regs->cfgchip3); + + return(0); +} + +int misc_init_r (void) +{ + printf ("ARM Clock : %d Hz\n", clk_get(DAVINCI_ARM_CLKID)); + + return(0); +} +#else /* !defined CONFIG_NAND_SPL */ +void board_init_f (ulong bootflag) +{ + unsigned int chipcfg3; + /* + * Kick Registers need to be set to allow access to Pin Mux registers + */ + writel(HAWKBOARD_KICK0_UNLOCK, &davinci_syscfg_regs->kick0); + writel(HAWKBOARD_KICK1_UNLOCK, &davinci_syscfg_regs->kick1); + + /* setup the SUSPSRC for ARM to control emulation suspend */ + writel(readl(&davinci_syscfg_regs->suspsrc) & + ~(DAVINCI_SYSCFG_SUSPSRC_EMAC | DAVINCI_SYSCFG_SUSPSRC_I2C | + DAVINCI_SYSCFG_SUSPSRC_SPI1 | DAVINCI_SYSCFG_SUSPSRC_TIMER0 | + DAVINCI_SYSCFG_SUSPSRC_UART2), &davinci_syscfg_regs->suspsrc); + + /* Power on required peripherals + * ARM does not have acess by default to PSC0 and PSC1 + * assuming here that the DSP bootloader has set the IOPU + * such that PSC access is available to ARM + */ + da8xx_configure_lpsc_items(lpsc, ARRAY_SIZE(lpsc)); + + /* configure pinmux settings */ + davinci_configure_pin_mux_items(pinmuxes, + ARRAY_SIZE(pinmuxes)); + + writel(readl(&davinci_uart2_ctrl_regs->pwremu_mgmt) | + (DAVINCI_UART_PWREMU_MGMT_FREE) | + (DAVINCI_UART_PWREMU_MGMT_URRST) | + (DAVINCI_UART_PWREMU_MGMT_UTRST), + &davinci_uart2_ctrl_regs->pwremu_mgmt); + + NS16550_init((NS16550_t)(DAVINCI_UART2_BASE), + CONFIG_SYS_NS16550_CLK / 16 / CONFIG_BAUDRATE); + + puts("Nand boot...\n"); + + relocate_code (CONFIG_SYS_NAND_U_BOOT_RELOC_SP, (gd_t *)gd, + CONFIG_SYS_NAND_U_BOOT_DST); +} + +void board_init_r(gd_t *gd, ulong dest_addr) +{ + nand_boot(); +} + +void puts(const char *str) +{ + while (*str) + putc(*str++); +} + +void putc(char c) +{ + if (gd->flags & GD_FLG_SILENT) + return; + + if (c == '\n') + NS16550_putc((NS16550_t)(DAVINCI_UART2_BASE), '\r'); + + NS16550_putc((NS16550_t)(DAVINCI_UART2_BASE), c); +} + +void hang (void) +{ + puts ("### ERROR ### Please RESET the board ###\n"); + for (;;); +} +#endif diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c index d41579c..ad70dd9 100644 --- a/drivers/mtd/nand/davinci_nand.c +++ b/drivers/mtd/nand/davinci_nand.c @@ -635,6 +635,7 @@ void davinci_nand_init(struct nand_chip *nand) nand->write_buf = nand_davinci_write_buf;
nand->dev_ready = nand_davinci_dev_ready; + nand->select_chip = NULL;
nand_flash_init(); } diff --git a/include/configs/hawkboard.h b/include/configs/hawkboard.h new file mode 100644 index 0000000..c50d404 --- /dev/null +++ b/include/configs/hawkboard.h @@ -0,0 +1,200 @@ +/* + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ + * + * Based on davinci_dvevm.h. Original Copyrights follow: + * + * Copyright (C) 2007 Sergey Kubushyn ksi@koi8.net + * + * 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., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +/* + * Board + */ +#define CONFIG_SYS_USE_NAND 1 + +/* + * SoC Configuration + */ +#define CONFIG_MACH_DAVINCI_HAWK +#define CONFIG_ARM926EJS /* arm926ejs CPU core */ +#define CONFIG_SOC_DA8XX /* TI DA8xx SoC */ +#define CONFIG_SYS_CLK_FREQ clk_get(DAVINCI_ARM_CLKID) +#define CONFIG_SYS_OSCIN_FREQ 24000000 +#define CONFIG_SYS_TIMERBASE DAVINCI_TIMER0_BASE +#define CONFIG_SYS_HZ_CLOCK clk_get(DAVINCI_AUXCLK_CLKID) +#define CONFIG_SYS_HZ 1000 +#define CONFIG_SKIP_LOWLEVEL_INIT +#if defined CONFIG_NAND_SPL +#define CONFIG_SKIP_RELOCATE_UBOOT /* no code relocation needed for nand boot */ +#endif +#define CONFIG_BOARD_EARLY_INIT_F + +/* + * Memory Info + */ +#define CONFIG_SYS_MALLOC_LEN (1*1024*1024) /* malloc() len */ +#define CONFIG_SYS_GBL_DATA_SIZE 128 /* reserved for initial data */ +#define PHYS_SDRAM_1 DAVINCI_DDR_EMIF_DATA_BASE /* DDR Start */ +#define PHYS_SDRAM_1_SIZE (128 << 20) /* SDRAM size 128MB */ +#define CONFIG_SYS_SDRAM_BASE 0xc0000000 +#define CONFIG_MAX_RAM_BANK_SIZE (512 << 20) /* max size from SPRS586*/ +#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x1000 - /* Fix this */ \ + CONFIG_SYS_GBL_DATA_SIZE) + +/* memtest start addr */ +#define CONFIG_SYS_MEMTEST_START (PHYS_SDRAM_1) + +/* memtest will be run on 16MB */ +#define CONFIG_SYS_MEMTEST_END (PHYS_SDRAM_1 + 16*1024*1024) + +#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */ +#define CONFIG_STACKSIZE (256*1024) /* regular stack */ + +/* + * Serial Driver info + */ +#define CONFIG_SYS_NS16550 +#define CONFIG_SYS_NS16550_SERIAL +#define CONFIG_SYS_NS16550_REG_SIZE -4 /* NS16550 register size */ +#define CONFIG_SYS_NS16550_COM1 DAVINCI_UART2_BASE /* Base address of UART2 */ +#define CONFIG_SYS_NS16550_CLK clk_get(DAVINCI_UART2_CLKID) +#define CONFIG_CONS_INDEX 1 /* use UART0 for console */ +#define CONFIG_BAUDRATE 115200 /* Default baud rate */ +#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 } + +/* + * Network & Ethernet Configuration + */ +#define CONFIG_EMAC_MDIO_PHY_NUM 0x7 +#define CONFIG_DRIVER_TI_EMAC +#define CONFIG_MII +#define CONFIG_BOOTP_DEFAULT +#define CONFIG_BOOTP_DNS +#define CONFIG_BOOTP_DNS2 +#define CONFIG_BOOTP_SEND_HOSTNAME +#define CONFIG_NET_RETRY_COUNT 10 +#define CONFIG_NET_MULTI + +/* + * Nand Flash + */ +#ifdef CONFIG_SYS_USE_NAND +#define CONFIG_SYS_NO_FLASH +#define CONFIG_ENV_IS_IN_NAND +#define CONFIG_ENV_SIZE (128 << 10) +#define CONFIG_SYS_NAND_BASE DAVINCI_ASYNC_EMIF_DATA_CE3_BASE +#define CONFIG_CLE_MASK 0x10 +#define CONFIG_ALE_MASK 0x8 +#define CONFIG_SYS_NAND_USE_FLASH_BBT +#define CONFIG_NAND_DAVINCI +#define CONFIG_SYS_NAND_4BIT_HW_ECC_OOBFIRST +#define CFG_DAVINCI_STD_NAND_LAYOUT +#define CONFIG_SYS_NAND_CS 3 +#define CONFIG_SYS_NAND_PAGE_2K +#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */ +/* Max number of NAND devices */ +#define CONFIG_SYS_MAX_NAND_DEVICE 1 +#define CONFIG_SYS_NAND_BASE_LIST {0x62000000, } +#define NAND_MAX_CHIPS 1 +/* Block 0--not used by bootcode */ +#define CONFIG_ENV_OFFSET 0x0 + +#define CONFIG_SYS_NAND_PAGE_SIZE (2 << 10) +#define CONFIG_SYS_NAND_BLOCK_SIZE (128 << 10) +#define CONFIG_SYS_NAND_U_BOOT_OFFS 0xe0000 +#define CONFIG_SYS_NAND_U_BOOT_SIZE 0x40000 +#define CONFIG_SYS_NAND_U_BOOT_DST 0xc1180000 +#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_NAND_U_BOOT_DST +#define CONFIG_SYS_NAND_U_BOOT_RELOC_SP (CONFIG_SYS_NAND_U_BOOT_DST - \ + CONFIG_SYS_NAND_U_BOOT_SIZE - \ + CONFIG_SYS_MALLOC_LEN - \ + CONFIG_SYS_GBL_DATA_SIZE) +#define CONFIG_SYS_NAND_ECCPOS { \ + 24, 25, 26, 27, 28, \ + 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, \ + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, \ + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, \ + 59, 60, 61, 62, 63 } +#define CONFIG_SYS_NAND_PAGE_COUNT 64 +#define CONFIG_SYS_NAND_BAD_BLOCK_POS 0 +#define CONFIG_SYS_NAND_ECCSIZE 512 +#define CONFIG_SYS_NAND_ECCBYTES 10 +#define CONFIG_SYS_NAND_ECCSTEPS (CONFIG_SYS_NAND_PAGE_SIZE/ CONFIG_SYS_NAND_ECCSIZE) +#define CONFIG_SYS_NAND_OOBSIZE 64 +#define CONFIG_SYS_NAND_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * CONFIG_SYS_NAND_ECCSTEPS) + +#endif + +/* + * U-Boot general configuration + */ +#define CONFIG_MISC_INIT_R +#define CONFIG_BOOTFILE "uImage" /* Boot file name */ +#define CONFIG_SYS_PROMPT "hawkboard > " /* Command Prompt */ +#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */ +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) +#define CONFIG_SYS_MAXARGS 16 /* max number of command args */ +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Args Buffer Size */ +#define CONFIG_SYS_LOAD_ADDR (PHYS_SDRAM_1 + 0x700000) +#define CONFIG_VERSION_VARIABLE +#define CONFIG_AUTO_COMPLETE +#define CONFIG_SYS_HUSH_PARSER +#define CONFIG_SYS_PROMPT_HUSH_PS2 "> " +#define CONFIG_CMDLINE_EDITING +#define CONFIG_SYS_LONGHELP +#define CONFIG_CRC32_VERIFY +#define CONFIG_MX_CYCLIC + +/* + * Linux Information + */ +#define LINUX_BOOT_PARAM_ADDR (CONFIG_SYS_MEMTEST_START + 0x100) +#define CONFIG_CMDLINE_TAG +#define CONFIG_SETUP_MEMORY_TAGS +#define CONFIG_BOOTARGS \ + "mem=128M console=ttyS2,115200n8 root=/dev/ram0 rw initrd=0xc1180000,4M ip=static" +#define CONFIG_BOOTDELAY 3 + +/* + * U-Boot commands + */ +#include <config_cmd_default.h> +#define CONFIG_CMD_ENV +#define CONFIG_CMD_ASKENV +#define CONFIG_CMD_DHCP +#define CONFIG_CMD_DIAG +#define CONFIG_CMD_MII +#define CONFIG_CMD_PING +#define CONFIG_CMD_SAVES +#define CONFIG_CMD_MEMORY + +#ifdef CONFIG_SYS_USE_NAND +#undef CONFIG_CMD_FLASH +#undef CONFIG_CMD_IMLS +#define CONFIG_CMD_NAND +#endif + +#ifndef CONFIG_DRIVER_TI_EMAC +#undef CONFIG_CMD_NET +#undef CONFIG_CMD_DHCP +#undef CONFIG_CMD_MII +#undef CONFIG_CMD_PING +#endif + +#endif /* __CONFIG_H */ diff --git a/nand_spl/board/davinci/da8xxevm/Makefile b/nand_spl/board/davinci/da8xxevm/Makefile new file mode 100644 index 0000000..529fef5 --- /dev/null +++ b/nand_spl/board/davinci/da8xxevm/Makefile @@ -0,0 +1,141 @@ +# +# (C) Copyright 2006-2007 +# Stefan Roese, DENX Software Engineering, sr@denx.de. +# +# (C) Copyright 2008 +# Guennadi Liakhovetki, DENX Software Engineering, lg@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 +# + +CONFIG_NAND_SPL = y + +include $(TOPDIR)/config.mk +include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk + +LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds +LDFLAGS = -Bstatic -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(PLATFORM_LDFLAGS) +AFLAGS += -DCONFIG_PRELOADER -DCONFIG_NAND_SPL +CFLAGS += -DCONFIG_PRELOADER -DCONFIG_NAND_SPL + +SOBJS = start.o _udivsi3.o _divsi3.o +COBJS = cpu.o davinci_nand.o ns16550.o div0.o misc.o psc.o common.o hawkboard.o nand_boot.o + +SRCS := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c)) +OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS)) +__OBJS := $(SOBJS) $(COBJS) +LNDIR := $(OBJTREE)/nand_spl/board/$(BOARDDIR) + +nandobj := $(OBJTREE)/nand_spl/ + +ALL = $(nandobj)u-boot-spl $(nandobj)u-boot-spl.bin \ + $(nandobj)u-boot-spl-16k.bin + +all: $(ALL) + +$(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl + $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(PAD_TO) -O binary $< $@ + +$(nandobj)u-boot-spl.bin: $(nandobj)u-boot-spl + $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@ + +$(nandobj)u-boot-spl: $(OBJS) $(nandobj)u-boot.lds + cd $(LNDIR) && $(LD) $(LDFLAGS) $(__OBJS) \ + -Map $(nandobj)u-boot-spl.map \ + -o $(nandobj)u-boot-spl + +$(nandobj)u-boot.lds: $(LDSCRIPT) + $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@ + +# create symbolic links for common files + +# from board directory +$(obj)misc.c: + @rm -f $@ + @ln -s $(TOPDIR)/board/davinci/common/misc.c $@ + +# from drivers/mtd/nand directory +$(obj)davinci_nand.c: + @rm -f $@ + @ln -s $(TOPDIR)/drivers/mtd/nand/davinci_nand.c $@ + +# from nand_spl directory +$(obj)nand_boot.c: + @rm -f $@ + @ln -s $(TOPDIR)/nand_spl/nand_boot.c $@ + +# from drivers/serial directory +$(obj)ns16550.c: + @rm -f $@ + @ln -sf $(TOPDIR)/drivers/serial/ns16550.c $@ + +# from cpu directory +$(obj)start.S: + @rm -f $@ + ln -s $(TOPDIR)/arch/arm/cpu/arm926ejs/start.S $@ + +# from lib directory +$(obj)_udivsi3.S: + @rm -f $@ + ln -s $(TOPDIR)/arch/arm/lib/_udivsi3.S $@ + +# from lib directory +$(obj)_divsi3.S: + @rm -f $@ + ln -s $(TOPDIR)/arch/arm/lib/_divsi3.S $@ + +# from lib directory +$(obj)div0.c: + @rm -f $@ + ln -s $(TOPDIR)/arch/arm/lib/div0.c $@ + +# from SoC directory +$(obj)cpu.c: + @rm -f $@ + @ln -s $(TOPDIR)/arch/arm/cpu/arm926ejs/davinci/cpu.c $@ + +# from board directory +$(obj)hawkboard.c: + @rm -f $@ + ln -s $(TOPDIR)/board/davinci/da8xxevm/hawkboard.c $@ + +# from board directory +$(obj)common.c: + @rm -f $@ + ln -s $(TOPDIR)/board/davinci/da8xxevm/common.c $@ + +$(obj)psc.c: + @rm -f $@ + ln -s $(TOPDIR)/arch/arm/cpu/arm926ejs/davinci/psc.c $@ + + +######################################################################### + +$(obj)%.o: $(obj)%.S + $(CC) $(AFLAGS) -c -o $@ $< + +$(obj)%.o: $(obj)%.c + $(CC) $(CFLAGS) -c -o $@ $< + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/nand_spl/board/davinci/da8xxevm/config.mk b/nand_spl/board/davinci/da8xxevm/config.mk new file mode 100644 index 0000000..ea071eb --- /dev/null +++ b/nand_spl/board/davinci/da8xxevm/config.mk @@ -0,0 +1,40 @@ +# +# (C) Copyright 2006 +# Stefan Roese, DENX Software Engineering, sr@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 +# +# +# TI OMAP-L138 based Hawkboard + +# TEXT_BASE for SPL: +# +# On hawkboard the SPL is located in SRAM at 0xc1080000. +# +# TEXT_BASE = 0xc1080000 + +include $(TOPDIR)/board/$(BOARDDIR)/config.mk + +# PAD_TO used to generate a 4kByte binary needed for the combined image +# -> PAD_TO = TEXT_BASE + 4096 +PAD_TO := $(shell expr $$[$(CONFIG_SYS_TEXT_BASE) + 4096]) + +ifeq ($(debug),1) +PLATFORM_CPPFLAGS += -DDEBUG +endif diff --git a/nand_spl/board/davinci/da8xxevm/u-boot.lds b/nand_spl/board/davinci/da8xxevm/u-boot.lds new file mode 100644 index 0000000..f6ccf08 --- /dev/null +++ b/nand_spl/board/davinci/da8xxevm/u-boot.lds @@ -0,0 +1,75 @@ +/* + * (C) Copyright 2002 + * Gary Jennejohn, DENX Software Engineering, garyj@denx.de + * + * (C) Copyright 2008 + * Guennadi Liakhovetki, DENX Software Engineering, lg@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 + */ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ + . = 0xc1080000; + + . = ALIGN(4); + .text : + { + start.o (.text) + cpu.o (.text) + nand_boot.o (.text) + + *(.text) + } + + . = ALIGN(4); + .rodata : { *(.rodata) } + + . = ALIGN(4); + .data : { + *(.data) + __datarel_start = .; + *(.data.rel) + __datarelrolocal_start = .; + *(.data.rel.ro.local) + __datarellocal_start = .; + *(.data.rel.local) + __datarelro_start = .; + *(.data.rel.ro) + } + + . = ALIGN(4); + __rel_dyn_start = .; + __rel_dyn_end = .; + __dynsym_start = .; + + __got_start = .; + . = ALIGN(4); + .got : { *(.got) } + + __got_end = .; + + . = ALIGN(4); + __bss_start = .; + .bss : { *(.bss) } + _end = .; +} diff --git a/nand_spl/nand_boot.c b/nand_spl/nand_boot.c index ccd0af2..3cda41c 100644 --- a/nand_spl/nand_boot.c +++ b/nand_spl/nand_boot.c @@ -222,11 +222,12 @@ static int nand_load(struct mtd_info *mtd, unsigned int offs, }
#if defined(CONFIG_ARM) && !defined(CONFIG_SYS_ARM_WITHOUT_RELOC) -void board_init_f (ulong bootflag) +void __board_init_f (ulong bootflag) { relocate_code (CONFIG_SYS_TEXT_BASE - TOTAL_MALLOC_LEN, NULL, CONFIG_SYS_TEXT_BASE); } +void board_init_f (ulong bootflag)__attribute__((weak, alias("__board_init_f"))); #endif
/*

Dear Sughosh Ganu,
In message 1287690234-6109-1-git-send-email-urwithsughosh@gmail.com you wrote:
The patch adds basic board support for TI's OMAP-L138 based Hawkboard. This board is pretty similar to the da850 EVM. Support for nand and network access is added in this version.
The following bootup procedure is used.
At reset, the Rom Boot Loader(RBL), initialises the ddr and the nand controllers and copies the second stage bootloader(nand_spl) to RAM. The secondary bootloader then copies u-boot from a predefined location in the nand flash to the RAM, and passes control to the u-boot image.
Three config options are supported
- hawkboard_config - Used to create the u-boot.bin. Tftp the
u-boot.bin image to the RAM from u-boot, and flash to the nand flash at address 0xe0000.
- hawkboard_nand_config - Used to generate the secondary
bootloader(nand_spl) image. This creates an elf file u-boot-spl under nand_spl/. Create an AIS signed image using this file, and flash it to the nand flash at address 0x20000. The ais file should fit in one block.
- hawkboard_uart_config - This is same as the first image, but with
the TEXT_BASE as expected by the RBL(0xc1080000). Create the AIS Signed bin, as use the normal UART boot procedure to boot the image.
Signed-off-by: Sughosh Ganu urwithsughosh@gmail.com
Makefile | 17 +++ arch/arm/cpu/arm926ejs/davinci/cpu.c | 2 + arch/arm/include/asm/arch-davinci/hardware.h | 5 +- board/davinci/common/misc.c | 2 + board/davinci/da8xxevm/Makefile | 1 + board/davinci/da8xxevm/config.mk | 3 + board/davinci/da8xxevm/hawkboard.c | 201 ++++++++++++++++++++++++++ drivers/mtd/nand/davinci_nand.c | 1 + include/configs/hawkboard.h | 200 +++++++++++++++++++++++++ nand_spl/board/davinci/da8xxevm/Makefile | 141 ++++++++++++++++++ nand_spl/board/davinci/da8xxevm/config.mk | 40 +++++ nand_spl/board/davinci/da8xxevm/u-boot.lds | 75 ++++++++++ nand_spl/nand_boot.c | 3 +- 13 files changed, 689 insertions(+), 2 deletions(-) create mode 100644 board/davinci/da8xxevm/hawkboard.c create mode 100644 include/configs/hawkboard.h create mode 100644 nand_spl/board/davinci/da8xxevm/Makefile create mode 100644 nand_spl/board/davinci/da8xxevm/config.mk create mode 100644 nand_spl/board/davinci/da8xxevm/u-boot.lds
Entries to MAINTAINERS and boards.cfg missing.
diff --git a/Makefile b/Makefile index 06c71a2..7b8152c 100644 --- a/Makefile +++ b/Makefile @@ -911,6 +911,23 @@ cp922_XA10_config \ cp1026_config: unconfig @board/armltd/integrator/split_by_variant.sh cp $@
+hawkboard_config \ +hawkboard_uart_config \ +hawkboard_nand_config : unconfig
- @mkdir -p $(obj)include
- @mkdir -p $(obj)board/davinci/da8xxevm
- @if [ -n "$(findstring _nand_,$@)" ]; then \
echo "#define CONFIG_NAND_U_BOOT" >> $(obj)include/config.h; \
echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk; \
echo "CONFIG_SYS_TEXT_BASE = 0xc1080000" >$(obj)board/davinci/da8xxevm/config.tmp; \
- elif [ -n "$(findstring _uart_,$@)" ]; then \
echo "CONFIG_SYS_TEXT_BASE = 0xc1080000" >$(obj)board/davinci/da8xxevm/config.tmp; \
- else \
echo "CONFIG_SYS_TEXT_BASE = 0xc1180000" >$(obj)board/davinci/da8xxevm/config.tmp; \
- fi
We don;t allow and don;t need any such scripting in the Makefile any more. Please add your board to boards.cfg instead..
diff --git a/arch/arm/cpu/arm926ejs/davinci/cpu.c b/arch/arm/cpu/arm926ejs/davinci/cpu.c index fc3551c..b4a7382 100644 --- a/arch/arm/cpu/arm926ejs/davinci/cpu.c +++ b/arch/arm/cpu/arm926ejs/davinci/cpu.c @@ -109,6 +109,7 @@ out: } #endif /* CONFIG_SOC_DA8XX */
+#if !defined(CONFIG_NAND_SPL) #ifdef CONFIG_DISPLAY_CPUINFO
static unsigned pll_div(volatile void *pllbase, unsigned offset) @@ -189,3 +190,4 @@ int cpu_eth_init(bd_t *bis) #endif return 0; } +#endif /* !CONFIG_NAND_SPL */
Why exactly is this change needed? What happens if you just do not define CONFIG_DISPLAY_CPUINFO in your NAND config?
index 28750b1..546fd93 100644 --- a/board/davinci/common/misc.c +++ b/board/davinci/common/misc.c @@ -33,6 +33,7 @@
DECLARE_GLOBAL_DATA_PTR;
+#if !defined(CONFIG_NAND_SPL) #if defined(CONFIG_SYS_ARM_WITHOUT_RELOC) int dram_init(void) { @@ -105,6 +106,7 @@ void davinci_sync_env_enetaddr(uint8_t *rom_enetaddr) }
#endif /* DAVINCI_EMAC */ +#endif /* !CONFIG_NAND_SPL */
Is there not a better way than adding such a huge #ifdef block?
index e176f7d..9fc7ad9 100644 --- a/board/davinci/da8xxevm/config.mk +++ b/board/davinci/da8xxevm/config.mk @@ -38,6 +38,9 @@ # # we load ourself to C108 '0000
+sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp
#Provide at least 16MB spacing between us and the Linux Kernel image +ifndef CONFIG_SYS_TEXT_BASE CONFIG_SYS_TEXT_BASE = 0xC1080000 +endif
No. We don't need config.mk files for this any more. Please move settings to board config file.
diff --git a/board/davinci/da8xxevm/hawkboard.c b/board/davinci/da8xxevm/hawkboard.c new file mode 100644
....
+#if !defined(CONFIG_NAND_SPL) +int board_init(void)
Again: can we not avoid such a huge #ifdef block here?
+int misc_init_r (void) +{
- printf ("ARM Clock : %d Hz\n", clk_get(DAVINCI_ARM_CLKID));
Would it make sense to use strmhz() here?
diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c index d41579c..ad70dd9 100644 --- a/drivers/mtd/nand/davinci_nand.c +++ b/drivers/mtd/nand/davinci_nand.c @@ -635,6 +635,7 @@ void davinci_nand_init(struct nand_chip *nand) nand->write_buf = nand_davinci_write_buf;
nand->dev_ready = nand_davinci_dev_ready;
- nand->select_chip = NULL;
Hm... maybe we should rather use memset() to set the whole struct nand_chip to zero?
...
+#define CONFIG_SYS_NAND_ECCBYTES 10 +#define CONFIG_SYS_NAND_ECCSTEPS (CONFIG_SYS_NAND_PAGE_SIZE/ CONFIG_SYS_NAND_ECCSIZE) +#define CONFIG_SYS_NAND_OOBSIZE 64 +#define CONFIG_SYS_NAND_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * CONFIG_SYS_NAND_ECCSTEPS)
Lines too long; please fix globally.
diff --git a/nand_spl/board/davinci/da8xxevm/config.mk b/nand_spl/board/davinci/da8xxevm/config.mk new file mode 100644 index 0000000..ea071eb --- /dev/null +++ b/nand_spl/board/davinci/da8xxevm/config.mk
...
+include $(TOPDIR)/board/$(BOARDDIR)/config.mk
+# PAD_TO used to generate a 4kByte binary needed for the combined image +# -> PAD_TO = TEXT_BASE + 4096 +PAD_TO := $(shell expr $$[$(CONFIG_SYS_TEXT_BASE) + 4096])
+ifeq ($(debug),1) +PLATFORM_CPPFLAGS += -DDEBUG +endif
Is this really needed? Please get rid of this file.
diff --git a/nand_spl/nand_boot.c b/nand_spl/nand_boot.c index ccd0af2..3cda41c 100644 --- a/nand_spl/nand_boot.c +++ b/nand_spl/nand_boot.c @@ -222,11 +222,12 @@ static int nand_load(struct mtd_info *mtd, unsigned int offs, }
#if defined(CONFIG_ARM) && !defined(CONFIG_SYS_ARM_WITHOUT_RELOC) -void board_init_f (ulong bootflag) +void __board_init_f (ulong bootflag) { relocate_code (CONFIG_SYS_TEXT_BASE - TOTAL_MALLOC_LEN, NULL, CONFIG_SYS_TEXT_BASE); } +void board_init_f (ulong bootflag)__attribute__((weak, alias("__board_init_f"))); #endif
This is a global change that affects all NAND booting boards. This must be submitted spearately, and you must explain in detail why you think you need that. Also please mention on which systems this change has been tested.
Best regards,
Wolfgang Denk

hi Wolfgang, On Thu Oct 21, 2010 at 10:44:35PM +0200, Wolfgang Denk wrote:
Dear Sughosh Ganu,
In message 1287690234-6109-1-git-send-email-urwithsughosh@gmail.com you wrote:
<snip>
Signed-off-by: Sughosh Ganu urwithsughosh@gmail.com
Makefile | 17 +++ arch/arm/cpu/arm926ejs/davinci/cpu.c | 2 + arch/arm/include/asm/arch-davinci/hardware.h | 5 +- board/davinci/common/misc.c | 2 + board/davinci/da8xxevm/Makefile | 1 + board/davinci/da8xxevm/config.mk | 3 + board/davinci/da8xxevm/hawkboard.c | 201 ++++++++++++++++++++++++++ drivers/mtd/nand/davinci_nand.c | 1 + include/configs/hawkboard.h | 200 +++++++++++++++++++++++++ nand_spl/board/davinci/da8xxevm/Makefile | 141 ++++++++++++++++++ nand_spl/board/davinci/da8xxevm/config.mk | 40 +++++ nand_spl/board/davinci/da8xxevm/u-boot.lds | 75 ++++++++++ nand_spl/nand_boot.c | 3 +- 13 files changed, 689 insertions(+), 2 deletions(-) create mode 100644 board/davinci/da8xxevm/hawkboard.c create mode 100644 include/configs/hawkboard.h create mode 100644 nand_spl/board/davinci/da8xxevm/Makefile create mode 100644 nand_spl/board/davinci/da8xxevm/config.mk create mode 100644 nand_spl/board/davinci/da8xxevm/u-boot.lds
Entries to MAINTAINERS and boards.cfg missing.
Will add.
diff --git a/Makefile b/Makefile index 06c71a2..7b8152c 100644 --- a/Makefile +++ b/Makefile @@ -911,6 +911,23 @@ cp922_XA10_config \ cp1026_config: unconfig @board/armltd/integrator/split_by_variant.sh cp $@
+hawkboard_config \ +hawkboard_uart_config \ +hawkboard_nand_config : unconfig
- @mkdir -p $(obj)include
- @mkdir -p $(obj)board/davinci/da8xxevm
- @if [ -n "$(findstring _nand_,$@)" ]; then \
echo "#define CONFIG_NAND_U_BOOT" >> $(obj)include/config.h; \
echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk; \
echo "CONFIG_SYS_TEXT_BASE = 0xc1080000" >$(obj)board/davinci/da8xxevm/config.tmp; \
- elif [ -n "$(findstring _uart_,$@)" ]; then \
echo "CONFIG_SYS_TEXT_BASE = 0xc1080000" >$(obj)board/davinci/da8xxevm/config.tmp; \
- else \
echo "CONFIG_SYS_TEXT_BASE = 0xc1180000" >$(obj)board/davinci/da8xxevm/config.tmp; \
- fi
We don;t allow and don;t need any such scripting in the Makefile any more. Please add your board to boards.cfg instead..
I had tried adding the entries in the boards.cfg file but could not get nand_spl to build. Will check this out and get back.
diff --git a/arch/arm/cpu/arm926ejs/davinci/cpu.c b/arch/arm/cpu/arm926ejs/davinci/cpu.c index fc3551c..b4a7382 100644 --- a/arch/arm/cpu/arm926ejs/davinci/cpu.c +++ b/arch/arm/cpu/arm926ejs/davinci/cpu.c @@ -109,6 +109,7 @@ out: } #endif /* CONFIG_SOC_DA8XX */
+#if !defined(CONFIG_NAND_SPL) #ifdef CONFIG_DISPLAY_CPUINFO
static unsigned pll_div(volatile void *pllbase, unsigned offset) @@ -189,3 +190,4 @@ int cpu_eth_init(bd_t *bis) #endif return 0; } +#endif /* !CONFIG_NAND_SPL */
Why exactly is this change needed? What happens if you just do not define CONFIG_DISPLAY_CPUINFO in your NAND config?
I was getting an error with the davinci_emac_initialize function. I guess i can also not define CONFIG_DRIVER_TI_EMAC for the nand spl case and get rid of the check completely.
index 28750b1..546fd93 100644 --- a/board/davinci/common/misc.c +++ b/board/davinci/common/misc.c @@ -33,6 +33,7 @@
DECLARE_GLOBAL_DATA_PTR;
+#if !defined(CONFIG_NAND_SPL) #if defined(CONFIG_SYS_ARM_WITHOUT_RELOC) int dram_init(void) { @@ -105,6 +106,7 @@ void davinci_sync_env_enetaddr(uint8_t *rom_enetaddr) }
#endif /* DAVINCI_EMAC */ +#endif /* !CONFIG_NAND_SPL */
Is there not a better way than adding such a huge #ifdef block?
Not sure about this one. I need the pinmux configuration functions from this file.
index e176f7d..9fc7ad9 100644 --- a/board/davinci/da8xxevm/config.mk +++ b/board/davinci/da8xxevm/config.mk @@ -38,6 +38,9 @@ # # we load ourself to C108 '0000
+sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp
#Provide at least 16MB spacing between us and the Linux Kernel image +ifndef CONFIG_SYS_TEXT_BASE CONFIG_SYS_TEXT_BASE = 0xC1080000 +endif
No. We don't need config.mk files for this any more. Please move settings to board config file.
This is currently being used by da830evm and da850evm too. If ok, i can cleanup for those files too, although i cannot test it on these boards.
diff --git a/board/davinci/da8xxevm/hawkboard.c b/board/davinci/da8xxevm/hawkboard.c new file mode 100644
....
+#if !defined(CONFIG_NAND_SPL) +int board_init(void)
Again: can we not avoid such a huge #ifdef block here?
We need this initialisation for the nand spl part alone, and this is board specific. Can you please suggest any better way of handling this.
+int misc_init_r (void) +{
- printf ("ARM Clock : %d Hz\n", clk_get(DAVINCI_ARM_CLKID));
Would it make sense to use strmhz() here?
Will check on this.
diff --git a/drivers/mtd/nand/davinci_nand.c b/drivers/mtd/nand/davinci_nand.c index d41579c..ad70dd9 100644 --- a/drivers/mtd/nand/davinci_nand.c +++ b/drivers/mtd/nand/davinci_nand.c @@ -635,6 +635,7 @@ void davinci_nand_init(struct nand_chip *nand) nand->write_buf = nand_davinci_write_buf;
nand->dev_ready = nand_davinci_dev_ready;
- nand->select_chip = NULL;
Hm... maybe we should rather use memset() to set the whole struct nand_chip to zero?
Will initialise the nand chip structure.
...
+#define CONFIG_SYS_NAND_ECCBYTES 10 +#define CONFIG_SYS_NAND_ECCSTEPS (CONFIG_SYS_NAND_PAGE_SIZE/ CONFIG_SYS_NAND_ECCSIZE) +#define CONFIG_SYS_NAND_OOBSIZE 64 +#define CONFIG_SYS_NAND_ECCTOTAL (CONFIG_SYS_NAND_ECCBYTES * CONFIG_SYS_NAND_ECCSTEPS)
Lines too long; please fix globally.
Ok, will check.
diff --git a/nand_spl/board/davinci/da8xxevm/config.mk b/nand_spl/board/davinci/da8xxevm/config.mk new file mode 100644 index 0000000..ea071eb --- /dev/null +++ b/nand_spl/board/davinci/da8xxevm/config.mk
...
+include $(TOPDIR)/board/$(BOARDDIR)/config.mk
+# PAD_TO used to generate a 4kByte binary needed for the combined image +# -> PAD_TO = TEXT_BASE + 4096 +PAD_TO := $(shell expr $$[$(CONFIG_SYS_TEXT_BASE) + 4096])
+ifeq ($(debug),1) +PLATFORM_CPPFLAGS += -DDEBUG +endif
Is this really needed? Please get rid of this file.
Will check.
diff --git a/nand_spl/nand_boot.c b/nand_spl/nand_boot.c index ccd0af2..3cda41c 100644 --- a/nand_spl/nand_boot.c +++ b/nand_spl/nand_boot.c @@ -222,11 +222,12 @@ static int nand_load(struct mtd_info *mtd, unsigned int offs, }
#if defined(CONFIG_ARM) && !defined(CONFIG_SYS_ARM_WITHOUT_RELOC) -void board_init_f (ulong bootflag) +void __board_init_f (ulong bootflag) { relocate_code (CONFIG_SYS_TEXT_BASE - TOTAL_MALLOC_LEN, NULL, CONFIG_SYS_TEXT_BASE); } +void board_init_f (ulong bootflag)__attribute__((weak, alias("__board_init_f"))); #endif
This is a global change that affects all NAND booting boards. This must be submitted spearately, and you must explain in detail why you think you need that. Also please mention on which systems this change has been tested.
For hawkboard, we need to do some board specific initialisation which can be included in board_init_f. The freescale boards which use the nand spl mechanism to boot define their board specific init functions, but we do not do this for the arm boards. I am afraid i cannot test this on any other boards, but i have compile tested this on the tx25 board.
-sughosh

Dear Sughosh Ganu,
In message 20101022075016.GB8597@Hardy you wrote:
Is there not a better way than adding such a huge #ifdef block?
Not sure about this one. I need the pinmux configuration functions from this file.
How about splitting the file, and using a separate file for the pinmux stuff?
No. We don't need config.mk files for this any more. Please move settings to board config file.
This is currently being used by da830evm and da850evm too. If ok, i can cleanup for those files too, although i cannot test it on these boards.
Yes, cleanup patches (separate from this one) are welcome.
Again: can we not avoid such a huge #ifdef block here?
We need this initialisation for the nand spl part alone, and this is board specific. Can you please suggest any better way of handling this.
If it turns out that we have code that is common to NAND SPL and normal U-Boot, and other code that is not shared, these parts should be separated into different files so NAND SPL can build and use the common stuff and normal U-Boot additionally build and use the other stuff.
#if defined(CONFIG_ARM) && !defined(CONFIG_SYS_ARM_WITHOUT_RELOC) -void board_init_f (ulong bootflag) +void __board_init_f (ulong bootflag) { relocate_code (CONFIG_SYS_TEXT_BASE - TOTAL_MALLOC_LEN, NULL, CONFIG_SYS_TEXT_BASE); } +void board_init_f (ulong bootflag)__attribute__((weak, alias("__board_init_f"))); #endif
This is a global change that affects all NAND booting boards. This must be submitted spearately, and you must explain in detail why you think you need that. Also please mention on which systems this change has been tested.
For hawkboard, we need to do some board specific initialisation which can be included in board_init_f. The freescale boards which
Can you probably do it in any of the other, board dependent init functions?
Best regards,
Wolfgang Denk

hi Wolfgang,
On Fri Oct 22, 2010 at 10:05:43AM +0200, Wolfgang Denk wrote:
Dear Sughosh Ganu,
In message 20101022075016.GB8597@Hardy you wrote:
Is there not a better way than adding such a huge #ifdef block?
Not sure about this one. I need the pinmux configuration functions from this file.
How about splitting the file, and using a separate file for the pinmux stuff?
Fine, will implement this.
Again: can we not avoid such a huge #ifdef block here?
We need this initialisation for the nand spl part alone, and this is board specific. Can you please suggest any better way of handling this.
If it turns out that we have code that is common to NAND SPL and normal U-Boot, and other code that is not shared, these parts should be separated into different files so NAND SPL can build and use the common stuff and normal U-Boot additionally build and use the other stuff.
Ok. Will split out the code that is specific to nand spl in a different file, which would not be compiled in for the normal u-boot.
#if defined(CONFIG_ARM) && !defined(CONFIG_SYS_ARM_WITHOUT_RELOC) -void board_init_f (ulong bootflag) +void __board_init_f (ulong bootflag) { relocate_code (CONFIG_SYS_TEXT_BASE - TOTAL_MALLOC_LEN, NULL, CONFIG_SYS_TEXT_BASE); } +void board_init_f (ulong bootflag)__attribute__((weak, alias("__board_init_f"))); #endif
This is a global change that affects all NAND booting boards. This must be submitted spearately, and you must explain in detail why you think you need that. Also please mention on which systems this change has been tested.
For hawkboard, we need to do some board specific initialisation which can be included in board_init_f. The freescale boards which
Can you probably do it in any of the other, board dependent init functions?
Not sure on this one. The only board specific function that gets called in the nand spl stage is board_init_f.
-sughosh

hi Wolfgang,
On Fri, Oct 22, 2010 at 2:22 PM, Sughosh Ganu urwithsughosh@gmail.comwrote:
hi Wolfgang,
On Fri Oct 22, 2010 at 10:05:43AM +0200, Wolfgang Denk wrote:
#if defined(CONFIG_ARM) && !defined(CONFIG_SYS_ARM_WITHOUT_RELOC)
-void board_init_f (ulong bootflag) +void __board_init_f (ulong bootflag) { relocate_code (CONFIG_SYS_TEXT_BASE - TOTAL_MALLOC_LEN,
NULL,
CONFIG_SYS_TEXT_BASE);
} +void board_init_f (ulong bootflag)__attribute__((weak,
alias("__board_init_f")));
#endif
This is a global change that affects all NAND booting boards. This must be submitted spearately, and you must explain in detail why you think you need that. Also please mention on which systems this
change
has been tested.
For hawkboard, we need to do some board specific initialisation which can be included in board_init_f. The freescale boards which
Can you probably do it in any of the other, board dependent init functions?
Not sure on this one. The only board specific function that gets called in the nand spl stage is board_init_f.
I was checking the usage of board_init_f in the nand_spl/nand_boot.c file, and currently only the smdk6400 board uses it. Can we then remove this function definition from the nand_boot.c file and put it in the respective board file, like the freescale boards. I think this is a cleaner way of implementing this. Please le me know, and i will base my changes accordingly. Thanks.
-sughosh

Dear sughosh ganu,
In message AANLkTikhCNdC26vA4QK6UX_kwsUHmzaEB6-LVeBXfLOZ@mail.gmail.com you wrote:
I was checking the usage of board_init_f in the nand_spl/nand_boot.c file, and currently only the smdk6400 board uses it. Can we then remove this function definition from the nand_boot.c file and put it in the respective board file, like the freescale boards. I think this is a cleaner way of implementing this. Please le me know, and i will base my changes accordingly. Thanks.
I'm not sure I understnad your plan correctly. If you don't mind please submit a patch; this is easier to review then.
Best regards,
Wolfgang Denk

On Fri, Oct 22, 2010 at 3:50 AM, Sughosh Ganu urwithsughosh@gmail.com wrote:
[...] This is currently being used by da830evm and da850evm too. If ok, i can cleanup for those files too, although i cannot test it on these boards.
I would be happy to test any patches for da850evm.
Best Regards, Ben Gardiner
--- Nanometrics Inc. http://www.nanometrics.ca
participants (4)
-
Ben Gardiner
-
Sughosh Ganu
-
sughosh ganu
-
Wolfgang Denk