Merge branch 'master' of git://git.denx.de/u-boot-mpc83xx
authorTom Rini <trini@ti.com>
Tue, 18 Sep 2012 21:56:31 +0000 (14:56 -0700)
committerTom Rini <trini@ti.com>
Tue, 18 Sep 2012 21:56:31 +0000 (14:56 -0700)
51 files changed:
.gitignore
MAINTAINERS
Makefile
arch/arm/include/asm/arch-omap24xx/omap2420.h
arch/sparc/cpu/leon2/interrupts.c
arch/sparc/cpu/leon3/interrupts.c
arch/sparc/lib/board.c
board/apollon/Makefile [deleted file]
board/apollon/apollon.c [deleted file]
board/apollon/config.mk [deleted file]
board/apollon/lowlevel_init.S [deleted file]
board/apollon/mem.c [deleted file]
board/apollon/mem.h [deleted file]
board/apollon/sys_info.c [deleted file]
board/samsung/goni/lowlevel_init.S
board/samsung/smdkc100/lowlevel_init.S
boards.cfg
common/cmd_bdinfo.c
common/cmd_nand.c
common/cmd_nvedit.c
common/env_common.c
common/env_nand.c
common/memsize.c
doc/README.nand
doc/README.scrapyard
drivers/mtd/nand/mxc_nand.c
drivers/mtd/nand/nand_base.c
drivers/mtd/nand/nand_util.c
drivers/net/greth.c
fs/fat/fat.c
include/configs/apollon.h [deleted file]
include/configs/flea3.h
include/configs/mx35pdk.h
include/configs/tx25.h
include/environment.h
include/fsl_nfc.h
include/linux/mtd/nand.h
include/nand.h
include/search.h
lib/hashtable.c
nand_spl/nand_boot_fsl_nfc.c
onenand_ipl/board/apollon/Makefile [deleted file]
onenand_ipl/board/apollon/apollon.c [deleted file]
onenand_ipl/board/apollon/config.mk [deleted file]
onenand_ipl/board/apollon/low_levelinit.S [deleted file]
onenand_ipl/board/apollon/u-boot.onenand.lds [deleted file]
onenand_ipl/onenand_boot.c [deleted file]
onenand_ipl/onenand_ipl.h [deleted file]
onenand_ipl/onenand_read.c [deleted file]
spl/Makefile
tools/env/fw_env.c

index 2e6fde8..d91e91b 100644 (file)
@@ -75,10 +75,5 @@ cscope.*
 /ctags
 /etags
 
-# OneNAND IPL files
-/onenand_ipl/onenand-ipl*
-/onenand_ipl/board/*/onenand*
-/onenand_ipl/board/*/*.S
-
 # spl ais files
 /spl/*.ais
index cd18732..aa54fe1 100644 (file)
@@ -777,10 +777,6 @@ Nagendra T S  <nagendra@mistralsolutions.com>
 
    am3517_crane    ARM ARMV7 (AM35x SoC)
 
-Kyungmin Park <kyungmin.park@samsung.com>
-
-       apollon         ARM1136EJS
-
 Sandeep Paulraj <s-paulraj@ti.com>
 
        davinci_dm355evm        ARM926EJS
index 058fb53..971513d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -378,7 +378,6 @@ ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map
 
 ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin
 ALL-$(CONFIG_ONENAND_U_BOOT) += $(obj)u-boot-onenand.bin
-ONENAND_BIN ?= $(obj)onenand_ipl/onenand-ipl-2k.bin
 ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin
 ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin
 
@@ -550,12 +549,6 @@ nand_spl:  $(TIMESTAMP_FILE) $(VERSION_FILE) depend
 $(obj)u-boot-nand.bin: nand_spl $(obj)u-boot.bin
                cat $(obj)nand_spl/u-boot-spl-16k.bin $(obj)u-boot.bin > $(obj)u-boot-nand.bin
 
-onenand_ipl:   $(TIMESTAMP_FILE) $(VERSION_FILE) $(obj)include/autoconf.mk
-               $(MAKE) -C onenand_ipl/board/$(BOARDDIR) all
-
-$(obj)u-boot-onenand.bin:      onenand_ipl $(obj)u-boot.bin
-               cat $(ONENAND_BIN) $(obj)u-boot.bin > $(obj)u-boot-onenand.bin
-
 $(obj)spl/u-boot-spl.bin:      $(SUBDIR_TOOLS) depend
                $(MAKE) -C spl all
 
@@ -790,9 +783,7 @@ clean:
        @rm -f $(obj)include/generated/asm-offsets.h
        @rm -f $(obj)$(CPUDIR)/$(SOC)/asm-offsets.s
        @rm -f $(obj)nand_spl/{u-boot.lds,u-boot-nand_spl.lds,u-boot-spl,u-boot-spl.map,System.map}
-       @rm -f $(obj)onenand_ipl/onenand-{ipl,ipl.bin,ipl.map}
        @rm -f $(ONENAND_BIN)
-       @rm -f $(obj)onenand_ipl/u-boot.lds
        @rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.lds,u-boot-spl.map}
        @rm -f $(obj)MLO
        @rm -f $(TIMESTAMP_FILE) $(VERSION_FILE)
@@ -825,7 +816,6 @@ clobber:    tidy
        @rm -fr $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
        @rm -fr $(obj)include/generated
        @[ ! -d $(obj)nand_spl ] || find $(obj)nand_spl -name "*" -type l -print | xargs rm -f
-       @[ ! -d $(obj)onenand_ipl ] || find $(obj)onenand_ipl -name "*" -type l -print | xargs rm -f
        @rm -f $(obj)dts/*.tmp
        @rm -f $(obj)spl/u-boot-spl{,-pad}.ais
 
index 6032419..d8d5647 100644 (file)
 #define LAN_RESET_REGISTER    (H4_CS1_BASE+0x1c)
 #endif  /* endif CONFIG_2420H4 */
 
-#if defined(CONFIG_APOLLON)
-#define APOLLON_CS0_BASE       0x00000000      /* OneNAND */
-#define APOLLON_CS1_BASE       0x08000000      /* ethernet */
-#define APOLLON_CS2_BASE       0x10000000      /* OneNAND */
-#define APOLLON_CS3_BASE       0x18000000      /* NOR */
-
-#define ETH_CONTROL_REG                (APOLLON_CS1_BASE + 0x30b)
-#define LAN_RESET_REGISTER     (APOLLON_CS1_BASE + 0x1c)
-#endif /* endif CONFIG_APOLLON */
-
 /* Common */
 #define LOW_LEVEL_SRAM_STACK  0x4020FFFC
 
index 5149550..f707efd 100644 (file)
@@ -207,9 +207,9 @@ void do_irqinfo(cmd_tbl_t * cmdtp, bd_t * bd, int flag, int argc, char * const a
 
        for (irq = 0; irq < NR_IRQS; irq++) {
                if (irq_handlers[irq].handler != NULL) {
-                       printf("%02d  %08lx  %08lx  %ld\n", irq,
-                              (unsigned int)irq_handlers[irq].handler,
-                              (unsigned int)irq_handlers[irq].arg,
+                       printf("%02d  %p  %p  %d\n", irq,
+                              irq_handlers[irq].handler,
+                              irq_handlers[irq].arg,
                               irq_handlers[irq].count);
                }
        }
index 4138f9b..4a3847d 100644 (file)
@@ -209,9 +209,9 @@ void do_irqinfo(cmd_tbl_t * cmdtp, bd_t * bd, int flag, int argc, char * const a
 
        for (irq = 0; irq < NR_IRQS; irq++) {
                if (irq_handlers[irq].handler != NULL) {
-                       printf("%02d  %08lx  %08lx  %ld\n", irq,
-                              (unsigned int)irq_handlers[irq].handler,
-                              (unsigned int)irq_handlers[irq].arg,
+                       printf("%02d  %p  %p  %d\n", irq,
+                              irq_handlers[irq].handler,
+                              irq_handlers[irq].arg,
                               irq_handlers[irq].count);
                }
        }
index 7e48775..6f33666 100644 (file)
@@ -166,7 +166,6 @@ char *str_init_seq_done = "\n\rInit sequence done...\r\n\r\n";
 void board_init_f(ulong bootflag)
 {
        bd_t *bd;
-       unsigned char *s;
        init_fnc_t **init_fnc_ptr;
        int j;
 
diff --git a/board/apollon/Makefile b/board/apollon/Makefile
deleted file mode 100644 (file)
index 1bf1a32..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# (C) Copyright 2000, 2001, 2002
-# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
-#
-# See file CREDITS for list of people who contributed to this
-# project.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License as
-# published by the Free Software Foundation; either version 2 of
-# the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-# MA 02111-1307 USA
-#
-
-include $(TOPDIR)/config.mk
-
-LIB    = $(obj)lib$(BOARD).o
-
-COBJS-y        := apollon.o mem.o sys_info.o
-SOBJS  := lowlevel_init.o
-
-COBJS  := $(COBJS-y)
-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))
-
-#########################################################################
-
-include $(SRCTREE)/rules.mk
-
-sinclude $(obj).depend
diff --git a/board/apollon/apollon.c b/board/apollon/apollon.c
deleted file mode 100644 (file)
index 76626f0..0000000
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
- * (C) Copyright 2005-2007
- * Samsung Electronics.
- * Kyungmin Park <kyungmin.park@samsung.com>
- *
- * Derived from omap2420
- *
- * 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 <netdev.h>
-#include <asm/arch/omap2420.h>
-#include <asm/io.h>
-#include <asm/arch/bits.h>
-#include <asm/arch/mux.h>
-#include <asm/arch/sys_proto.h>
-#include <asm/arch/sys_info.h>
-#include <asm/arch/mem.h>
-#include <asm/mach-types.h>
-
-void wait_for_command_complete(unsigned int wd_base);
-
-DECLARE_GLOBAL_DATA_PTR;
-
-#define write_config_reg(reg, value)                                   \
-do {                                                                   \
-       writeb(value, reg);                                             \
-} while (0)
-
-#define mask_config_reg(reg, mask)                                     \
-do {                                                                   \
-       char value = readb(reg) & ~(mask);                              \
-       writeb(value, reg);                                             \
-} while (0)
-
-/*******************************************************
- * Routine: delay
- * Description: spinning delay to use before udelay works
- ******************************************************/
-static inline void delay(unsigned long loops)
-{
-       __asm__("1:\n" "subs %0, %1, #1\n"
-                 "bne 1b":"=r" (loops):"0"(loops));
-}
-
-/*****************************************
- * Routine: board_init
- * Description: Early hardware init.
- *****************************************/
-int board_init(void)
-{
-       gpmc_init();            /* in SRAM or SDRM, finish GPMC */
-
-       gd->bd->bi_arch_number = 919;
-       /* adress of boot parameters */
-       gd->bd->bi_boot_params = (OMAP2420_SDRC_CS0 + 0x100);
-
-       return 0;
-}
-
-/**********************************************************
- * Routine: s_init
- * Description: Does early system init of muxing and clocks.
- * - Called path is with sram stack.
- **********************************************************/
-void s_init(void)
-{
-       watchdog_init();
-       set_muxconf_regs();
-       delay(100);
-
-       peripheral_enable();
-       icache_enable();
-}
-
-/*******************************************************
- * Routine: misc_init_r
- * Description: Init ethernet (done here so udelay works)
- ********************************************************/
-int misc_init_r(void)
-{
-       return (0);
-}
-
-/****************************************
- * Routine: watchdog_init
- * Description: Shut down watch dogs
- *****************************************/
-void watchdog_init(void)
-{
-       /* There are 4 watch dogs.  1 secure, and 3 general purpose.
-        * The ROM takes care of the secure one. Of the 3 GP ones,
-        * 1 can reset us directly, the other 2 only generate MPU interrupts.
-        */
-       __raw_writel(WD_UNLOCK1, WD2_BASE + WSPR);
-       wait_for_command_complete(WD2_BASE);
-       __raw_writel(WD_UNLOCK2, WD2_BASE + WSPR);
-
-#define MPU_WD_CLOCKED 1
-#if MPU_WD_CLOCKED
-       /* value 0x10 stick on aptix, BIT4 polarity seems oppsite */
-       __raw_writel(WD_UNLOCK1, WD3_BASE + WSPR);
-       wait_for_command_complete(WD3_BASE);
-       __raw_writel(WD_UNLOCK2, WD3_BASE + WSPR);
-
-       __raw_writel(WD_UNLOCK1, WD4_BASE + WSPR);
-       wait_for_command_complete(WD4_BASE);
-       __raw_writel(WD_UNLOCK2, WD4_BASE + WSPR);
-#endif
-}
-
-/******************************************************
- * Routine: wait_for_command_complete
- * Description: Wait for posting to finish on watchdog
- ******************************************************/
-void wait_for_command_complete(unsigned int wd_base)
-{
-       int pending = 1;
-       do {
-               pending = __raw_readl(wd_base + WWPS);
-       } while (pending);
-}
-
-/*******************************************************************
- * Routine:board_eth_init
- * Description: take the Ethernet controller out of reset and wait
- *                for the EEPROM load to complete.
- ******************************************************************/
-int board_eth_init(bd_t *bis)
-{
-       int rc = 0;
-#ifdef CONFIG_LAN91C96
-       int cnt = 20;
-
-       __raw_writeb(0x03, OMAP2420_CTRL_BASE + 0x0f2); /*protect->gpio74 */
-
-       __raw_writew(0x0, LAN_RESET_REGISTER);
-       do {
-               __raw_writew(0x1, LAN_RESET_REGISTER);
-               udelay(100);
-               if (cnt == 0)
-                       goto eth_reset_err_out;
-               --cnt;
-       } while (__raw_readw(LAN_RESET_REGISTER) != 0x1);
-
-       cnt = 20;
-
-       do {
-               __raw_writew(0x0, LAN_RESET_REGISTER);
-               udelay(100);
-               if (cnt == 0)
-                       goto eth_reset_err_out;
-               --cnt;
-       } while (__raw_readw(LAN_RESET_REGISTER) != 0x0000);
-       udelay(1000);
-
-       mask_config_reg(ETH_CONTROL_REG, 0x01);
-       udelay(1000);
-       rc = lan91c96_initialize(0, CONFIG_LAN91C96_BASE);
-eth_reset_err_out:
-#endif
-       return rc;
-}
-
-/**********************************************
- * Routine: dram_init
- * Description: sets uboots idea of sdram size
- **********************************************/
-int dram_init(void)
-{
-       unsigned int size;
-       u32 mtype, btype;
-#define NOT_EARLY 0
-
-       btype = get_board_type();
-       mtype = get_mem_type();
-
-       display_board_info(btype);
-
-       if ((mtype == DDR_COMBO) || (mtype == DDR_STACKED)) {
-               /* init other chip select */
-               do_sdrc_init(SDRC_CS1_OSET, NOT_EARLY);
-       }
-
-       size = get_sdr_cs_size(SDRC_CS0_OSET);
-
-       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
-       gd->bd->bi_dram[0].size = size;
-#if CONFIG_NR_DRAM_BANKS > 1
-       size = get_sdr_cs_size(SDRC_CS1_OSET);
-
-       gd->bd->bi_dram[1].start = gd->bd->bi_dram[0].start +
-                                  gd->bd->bi_dram[0].size;
-       gd->bd->bi_dram[1].size = size;
-#endif
-
-       return 0;
-}
-
-/**********************************************************
- * Routine: set_muxconf_regs
- * Description: Setting up the configuration Mux registers
- *              specific to the hardware
- *********************************************************/
-void set_muxconf_regs(void)
-{
-       muxSetupSDRC();
-       muxSetupGPMC();
-       muxSetupUsb0();         /* USB Device */
-       muxSetupUsbHost();      /* USB Host */
-       muxSetupUART1();
-       muxSetupLCD();
-       muxSetupMMCSD();
-       muxSetupTouchScreen();
-}
-
-/*****************************************************************
- * Routine: peripheral_enable
- * Description: Enable the clks & power for perifs (GPT2, UART1,...)
- ******************************************************************/
-void peripheral_enable(void)
-{
-       unsigned int v, if_clks = 0, func_clks = 0;
-
-       /* Enable GP2 timer. */
-       if_clks |= BIT4 | BIT3;
-       func_clks |= BIT4 | BIT3;
-       /* Sys_clk input OMAP2420_GPT2 */
-       v = __raw_readl(CM_CLKSEL2_CORE) | 0x4 | 0x2;
-       __raw_writel(v, CM_CLKSEL2_CORE);
-       __raw_writel(0x1, CM_CLKSEL_WKUP);
-
-#ifdef CONFIG_SYS_NS16550
-       /* Enable UART1 clock */
-       func_clks |= BIT21;
-       if_clks |= BIT21;
-#endif
-       /* Interface clocks on */
-       v = __raw_readl(CM_ICLKEN1_CORE) | if_clks;
-       __raw_writel(v, CM_ICLKEN1_CORE);
-       /* Functional Clocks on */
-       v = __raw_readl(CM_FCLKEN1_CORE) | func_clks;
-       __raw_writel(v, CM_FCLKEN1_CORE);
-       delay(1000);
-
-#ifndef KERNEL_UPDATED
-       {
-#define V1 0xffffffff
-#define V2 0x00000007
-
-               __raw_writel(V1, CM_FCLKEN1_CORE);
-               __raw_writel(V2, CM_FCLKEN2_CORE);
-               __raw_writel(V1, CM_ICLKEN1_CORE);
-               __raw_writel(V1, CM_ICLKEN2_CORE);
-       }
-#endif
-}
-
-/****************************************
- * Routine: muxSetupUsb0   (ostboot)
- * Description: Setup usb muxing
- *****************************************/
-void muxSetupUsb0(void)
-{
-       mask_config_reg(CONTROL_PADCONF_USB0_PUEN, 0x1f);
-       mask_config_reg(CONTROL_PADCONF_USB0_VP, 0x1f);
-       mask_config_reg(CONTROL_PADCONF_USB0_VM, 0x1f);
-       mask_config_reg(CONTROL_PADCONF_USB0_RCV, 0x1f);
-       mask_config_reg(CONTROL_PADCONF_USB0_TXEN, 0x1f);
-       mask_config_reg(CONTROL_PADCONF_USB0_SE0, 0x1f);
-       mask_config_reg(CONTROL_PADCONF_USB0_DAT, 0x1f);
-}
-
-/****************************************
- * Routine: muxSetupUSBHost   (ostboot)
- * Description: Setup USB Host muxing
- *****************************************/
-void muxSetupUsbHost(void)
-{
-       /* V19 */
-       write_config_reg(CONTROL_PADCONF_USB1_RCV, 1);
-       /* W20 */
-       write_config_reg(CONTROL_PADCONF_USB1_TXEN, 1);
-       /* N14 */
-       write_config_reg(CONTROL_PADCONF_GPIO69, 3);
-       /* P15 */
-       write_config_reg(CONTROL_PADCONF_GPIO70, 3);
-       /* L18 */
-       write_config_reg(CONTROL_PADCONF_GPIO102, 3);
-       /* L19 */
-       write_config_reg(CONTROL_PADCONF_GPIO103, 3);
-       /* K15 */
-       write_config_reg(CONTROL_PADCONF_GPIO104, 3);
-       /* K14 */
-       write_config_reg(CONTROL_PADCONF_GPIO105, 3);
-}
-
-/****************************************
- * Routine: muxSetupUART1  (ostboot)
- * Description: Set up uart1 muxing
- *****************************************/
-void muxSetupUART1(void)
-{
-       /* UART1_CTS pin configuration, PIN = D21, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_UART1_CTS, 0);
-       /* UART1_RTS pin configuration, PIN = H21, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_UART1_RTS, 0);
-       /* UART1_TX pin configuration, PIN = L20, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_UART1_TX, 0);
-       /* UART1_RX pin configuration, PIN = T21, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_UART1_RX, 0);
-}
-
-/****************************************
- * Routine: muxSetupLCD   (ostboot)
- * Description: Setup lcd muxing
- *****************************************/
-void muxSetupLCD(void)
-{
-       /* LCD_D0 pin configuration, PIN = Y7, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D0, 0);
-       /* LCD_D1 pin configuration, PIN = P10 , Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D1, 0);
-       /* LCD_D2 pin configuration, PIN = V8, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D2, 0);
-       /* LCD_D3 pin configuration, PIN = Y8, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D3, 0);
-       /* LCD_D4 pin configuration, PIN = W8, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D4, 0);
-       /* LCD_D5 pin configuration, PIN = R10, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D5, 0);
-       /* LCD_D6 pin configuration, PIN = Y9, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D6, 0);
-       /* LCD_D7 pin configuration, PIN = V9, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D7, 0);
-       /* LCD_D8 pin configuration, PIN = W9, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D8, 0);
-       /* LCD_D9 pin configuration, PIN = P11, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D9, 0);
-       /* LCD_D10 pin configuration, PIN = V10, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D10, 0);
-       /* LCD_D11 pin configuration, PIN = Y10, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D11, 0);
-       /* LCD_D12 pin configuration, PIN = W10, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D12, 0);
-       /* LCD_D13 pin configuration, PIN = R11, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D13, 0);
-       /* LCD_D14 pin configuration, PIN = V11, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D14, 0);
-       /* LCD_D15 pin configuration, PIN = W11, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D15, 0);
-       /* LCD_D16 pin configuration, PIN = P12, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D16, 0);
-       /* LCD_D17 pin configuration, PIN = R12, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_D17, 0);
-       /* LCD_PCLK pin configuration, PIN = W6, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_PCLK, 0);
-       /* LCD_VSYNC pin configuration, PIN = V7, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_VSYNC, 0);
-       /* LCD_HSYNC pin configuration, PIN = Y6, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_HSYNC, 0);
-       /* LCD_ACBIAS pin configuration, PIN = W7, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_DSS_ACBIAS, 0);
-}
-
-/****************************************
- * Routine: muxSetupMMCSD (ostboot)
- * Description: set up MMC muxing
- *****************************************/
-void muxSetupMMCSD(void)
-{
-       /* SDMMC_CLKI pin configuration,  PIN = H15, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_MMC_CLKI, 0);
-       /* SDMMC_CLKO pin configuration,  PIN = G19, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_MMC_CLKO, 0);
-       /* SDMMC_CMD pin configuration,   PIN = H18, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_MMC_CMD, 0);
-       /* SDMMC_DAT0 pin configuration,  PIN = F20, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_MMC_DAT0, 0);
-       /* SDMMC_DAT1 pin configuration,  PIN = H14, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_MMC_DAT1, 0);
-       /* SDMMC_DAT2 pin configuration,  PIN = E19, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_MMC_DAT2, 0);
-       /* SDMMC_DAT3 pin configuration,  PIN = D19, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_MMC_DAT3, 0);
-       /* SDMMC_DDIR0 pin configuration, PIN = F19, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_MMC_DAT_DIR0, 0);
-       /* SDMMC_DDIR1 pin configuration, PIN = E20, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_MMC_DAT_DIR1, 0);
-       /* SDMMC_DDIR2 pin configuration, PIN = F18, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_MMC_DAT_DIR2, 0);
-       /* SDMMC_DDIR3 pin configuration, PIN = E18, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_MMC_DAT_DIR3, 0);
-       /* SDMMC_CDIR pin configuration,  PIN = G18, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_MMC_CMD_DIR, 0);
-}
-
-/******************************************
- * Routine: muxSetupTouchScreen (ostboot)
- * Description:  Set up touch screen muxing
- *******************************************/
-void muxSetupTouchScreen(void)
-{
-       /* SPI1_CLK pin configuration,  PIN = U18, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_SPI1_CLK, 0);
-       /* SPI1_MOSI pin configuration, PIN = V20, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_SPI1_SIMO, 0);
-       /* SPI1_MISO pin configuration, PIN = T18, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_SPI1_SOMI, 0);
-       /* SPI1_nCS0 pin configuration, PIN = U19, Mode = 0, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_SPI1_NCS0, 0);
-#define CONTROL_PADCONF_GPIO85 CONTROL_PADCONF_SPI1_NCS1
-       /* PEN_IRQ pin configuration,   PIN = N15, Mode = 3, PUPD=Disabled */
-       write_config_reg(CONTROL_PADCONF_GPIO85, 3);
-}
-
-/***************************************************************
- * Routine: muxSetupGPMC (ostboot)
- * Description: Configures balls which cam up in protected mode
- ***************************************************************/
-void muxSetupGPMC(void)
-{
-       /* gpmc_io_dir, MCR */
-       volatile unsigned int *MCR = (unsigned int *) 0x4800008C;
-       *MCR = 0x19000000;
-
-       /* NOR FLASH CS0 */
-       /* signal - Gpmc_clk; pin - J4; offset - 0x0088; mode 0; Byte-3 */
-       write_config_reg(CONTROL_PADCONF_GPMC_D2_BYTE3, 0);
-       /* MPDB(Multi Port Debug Port) CS1 */
-       /* signal - gpmc_ncs1; pin - N8; offset - 0x008D; mode 0; Byte-1 */
-       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE1, 0);
-       /* signal - Gpmc_ncs2; pin - E2; offset - 0x008E; mode 0; Byte-2 */
-       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE2, 0);
-       /* signal - Gpmc_ncs3; pin - N2; offset - 0x008F; mode 0; Byte-3 */
-       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE3, 0);
-       /* signal - Gpmc_ncs4; pin - ??; offset - 0x0090; mode 0; Byte-4 */
-       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE4, 0);
-       /* signal - Gpmc_ncs5; pin - ??; offset - 0x0091; mode 0; Byte-5 */
-       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE5, 0);
-       /* signal - Gpmc_ncs6; pin - ??; offset - 0x0092; mode 0; Byte-6 */
-       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE6, 0);
-       /* signal - Gpmc_ncs7; pin - ??; offset - 0x0093; mode 0; Byte-7 */
-       write_config_reg(CONTROL_PADCONF_GPMC_NCS0_BYTE7, 0);
-}
-
-/****************************************************************
- * Routine: muxSetupSDRC  (ostboot)
- * Description: Configures balls which come up in protected mode
- ****************************************************************/
-void muxSetupSDRC(void)
-{
-       /* It's set by IPL */
-}
diff --git a/board/apollon/config.mk b/board/apollon/config.mk
deleted file mode 100644 (file)
index 66005d4..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-#
-# (C) Copyright 2005-2007
-# Samsung Electronics
-#
-# Samsung December board with OMAP2420 (ARM1136) cpu
-# see http://www.ti.com/ for more information on Texas Instruments
-#
-# December has 1 bank of 128MB mDDR-SDRAM on CS0
-# December has 1 bank of  00MB mDDR-SDRAM on CS1
-# Physical Address:
-# 8000'0000 (bank0)
-# A000/0000 (bank1) ES2 will be configurable
-# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
-# (mem base + reserved)
-# For use with external or internal boots.
-CONFIG_SYS_TEXT_BASE = 0x83e80000
-
-# Used with full SRAM boot.
-# This is either with a GP system or a signed boot image.
-# easiest, and safest way to go if you can.
-#CONFIG_SYS_TEXT_BASE = 0x40270000
-
-# Handy to get symbols to debug ROM version.
-#CONFIG_SYS_TEXT_BASE = 0x0
-#CONFIG_SYS_TEXT_BASE = 0x08000000
diff --git a/board/apollon/lowlevel_init.S b/board/apollon/lowlevel_init.S
deleted file mode 100644 (file)
index f066fe4..0000000
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
- * Board specific setup info
- *
- * (C) Copyright 2005-2007
- * Samsung Electronics,
- * Kyungmin Park <kyungmin.park@samsung.com>
- *
- * 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 <config.h>
-#include <version.h>
-#include <asm/arch/omap2420.h>
-#include <asm/arch/mem.h>
-#include <asm/arch/clocks.h>
-#include "mem.h"
-
-#define APOLLON_CS0_BASE       0x00000000
-
-#ifdef PRCM_CONFIG_I
-#define SDRC_ACTIM_CTRLA_0_VAL 0x7BA35907
-#define SDRC_ACTIM_CTRLB_0_VAL 0x00000013
-#define SDRC_RFR_CTRL_0_VAL    0x00044C01
-#elif defined(PRCM_CONFIG_II)
-#define SDRC_ACTIM_CTRLA_0_VAL 0x4A59B485
-#define SDRC_ACTIM_CTRLB_0_VAL 0x0000000C
-#define SDRC_RFR_CTRL_0_VAL    0x00030001
-#endif
-
-#define SDRAM_BASE_ADDRESS     0x80008000
-
-_TEXT_BASE:
-       .word   CONFIG_SYS_TEXT_BASE    /* sdram load addr from config.mk */
-
-.globl lowlevel_init
-lowlevel_init:
-
-#ifdef CONFIG_SYS_NOR_BOOT
-       /* Check running in SDRAM */
-       mov     r0, pc, lsr #28
-       cmp     r0, #8
-       beq     prcm_setup
-
-flash_setup:
-       /* In Flash */
-       ldr     r0, =WD2_BASE
-       ldr     r1, =WD_UNLOCK1
-       str     r1, [r0, #WSPR]
-
-       ldr     r1, =WD_UNLOCK2
-       str     r1, [r0, #WSPR]
-
-       /* Pin muxing for SDRC */
-       mov     r1, #0x00
-       ldr     r0, =0x480000A1         /* ball C12, mode 0 */
-       strb    r1, [r0]
-
-       ldr     r0, =0x48000032         /* ball D11, mode 0 */
-       strb    r1, [r0]
-
-       ldr     r0, =0x480000A3         /* ball B13, mode 0 */
-       strb    r1, [r0]
-
-       /* SDRC setting */
-       ldr     r0, =OMAP2420_SDRC_BASE
-       ldr     r1, =0x00000010
-       str     r1, [r0, #0x10]
-
-       ldr     r1, =0x00000100
-       str     r1, [r0, #0x44]
-
-       /* SDRC CS0 configuration */
-       ldr     r1, =0x00d04011
-       str     r1, [r0, #0x80]
-
-       ldr     r1, =SDRC_ACTIM_CTRLA_0_VAL
-       str     r1, [r0, #0x9C]
-
-       ldr     r1, =SDRC_ACTIM_CTRLB_0_VAL
-       str     r1, [r0, #0xA0]
-
-       ldr     r1, =SDRC_RFR_CTRL_0_VAL
-       str     r1, [r0, #0xA4]
-
-       ldr     r1, =0x00000041
-       str     r1, [r0, #0x70]
-
-       /* Manual command sequence */
-       ldr     r1, =0x00000007
-       str     r1, [r0, #0xA8]
-
-       ldr     r1, =0x00000000
-       str     r1, [r0, #0xA8]
-
-       ldr     r1, =0x00000001
-       str     r1, [r0, #0xA8]
-
-       ldr     r1, =0x00000002
-       str     r1, [r0, #0xA8]
-       str     r1, [r0, #0xA8]
-
-       /*
-        * CS0 SDRC Mode register
-        *   Burst length = 4 - DDR memory
-        *   Serial mode
-        *   CAS latency = 3
-        */
-       ldr     r1, =0x00000032
-       str     r1, [r0, #0x84]
-
-       /* Note: You MUST set EMR values */
-       /* EMR1 & EMR2 */
-       ldr     r1, =0x00000000
-       str     r1, [r0, #0x88]
-       str     r1, [r0, #0x8C]
-
-#ifdef OLD_SDRC_DLLA_CTRL
-       /* SDRC_DLLA_CTRL */
-       ldr     r1, =0x00007306
-       str     r1, [r0, #0x60]
-
-       ldr     r1, =0x00007303
-       str     r1, [r0, #0x60]
-#else
-       /* SDRC_DLLA_CTRL */
-       ldr     r1, =0x00000506
-       str     r1, [r0, #0x60]
-
-       ldr     r1, =0x00000503
-       str     r1, [r0, #0x60]
-#endif
-
-#ifdef __BROKEN_FEATURE__
-       /* SDRC_DLLB_CTRL */
-       ldr     r1, =0x00000506
-       str     r1, [r0, #0x68]
-
-       ldr     r1, =0x00000503
-       str     r1, [r0, #0x68]
-#endif
-
-       /* little delay after init */
-       mov     r2, #0x1800
-1:
-       subs    r2, r2, #0x1
-       bne     1b
-
-       /* Setup base address */
-       ldr     r0, =0x00000000         /* NOR address */
-       ldr     r1, =SDRAM_BASE_ADDRESS /* SDRAM address */
-       ldr     r2, =0x20000            /* Size: 128KB */
-
-copy_loop:
-       ldmia   r0!, {r3-r10}
-       stmia   r1!, {r3-r10}
-       cmp     r0, r2
-       ble     copy_loop
-
-       ldr     r1, =SDRAM_BASE_ADDRESS
-       mov     lr, pc
-       mov     pc, r1
-#endif
-
-prcm_setup:
-       ldr     r0, =OMAP2420_CM_BASE
-       ldr     r1, [r0, #0x544]        /* CLKSEL2_PLL */
-       bic     r1, r1, #0x03
-       orr     r1, r1, #0x02
-       str     r1, [r0, #0x544]
-
-       ldr     r1, [r0, #0x500]
-       bic     r1, r1, #0x03
-       orr     r1, r1, #0x01
-       str     r1, [r0, #0x500]
-
-       ldr     r1, [r0, #0x140]
-       bic     r1, r1, #0x1f
-       orr     r1, r1, #0x02
-       str     r1, [r0, #0x140]
-
-#ifdef PRCM_CONFIG_I
-       ldr     r1, =0x000003C3
-#else
-       ldr     r1, =0x00000343
-#endif
-       str     r1, [r0, #0x840]
-
-       ldr     r1, =0x00000002
-       str     r1, [r0, #0x340]
-
-       ldr     r1, =CM_CLKSEL1_CORE
-#ifdef PRCM_CONFIG_I
-       ldr     r2, =0x08300C44
-#else
-       ldr     r2, =0x04600C26
-#endif
-       str     r2, [r1]
-
-       ldr     r0, =OMAP2420_CM_BASE
-       ldr     r1, [r0, #0x084]
-       and     r1, r1, #0x01
-       cmp     r1, #0x01
-       bne     clkvalid
-
-       b       .
-
-clkvalid:
-       mov     r1, #0x01
-       str     r1, [r0, #0x080]
-
-waitvalid:
-       ldr     r1, [r0, #0x084]
-       and     r1, r1, #0x01
-       cmp     r1, #0x00
-       bne     waitvalid
-
-       ldr     r0, =CM_CLKSEL1_PLL
-#ifdef PRCM_CONFIG_I
-       ldr     r1, =0x01837100
-#else
-       ldr     r1, =0x01832100
-#endif
-       str     r1, [r0]
-
-       ldr     r0, =PRCM_CLKCFG_CTRL
-       mov     r1, #0x01
-       str     r1, [r0]
-       mov     r6, #0x50
-loop1:
-       subs    r6, r6, #0x01
-       cmp     r6, #0x01
-       bne     loop1
-
-       ldr     r0, =CM_CLKEN_PLL
-       mov     r1, #0x0f
-       str     r1, [r0]
-
-       mov     r6, #0x100
-loop2:
-       subs    r6, r6, #0x01
-       cmp     r6, #0x01
-       bne     loop2
-
-       ldr     r0, =0x48008200
-       ldr     r1, =0xbfffffff
-       str     r1, [r0]
-
-       ldr     r0, =0x48008210
-       ldr     r1, =0xfffffff9
-       str     r1, [r0]
-
-       ldr     r0, =0x4806a004
-       ldr     r1, =0x00
-       strb    r1, [r0]
-
-       ldr     r0, =0x4806a020
-       ldr     r1, =0x07
-       strb    r1, [r0]
-
-       ldr     r0, =0x4806a00c
-       ldr     r1, =0x83
-       strb    r1, [r0]
-
-       ldr     r0, =0x4806a000
-       ldr     r1, =0x1a
-       strb    r1, [r0]
-
-       ldr     r0, =0x4806a004
-       ldr     r1, =0x00
-       strb    r1, [r0]
-
-       ldr     r0, =0x4806a00c
-       ldr     r1, =0x03
-       strb    r1, [r0]
-
-       ldr     r0, =0x4806a010
-       ldr     r1, =0x03
-       strb    r1, [r0]
-
-       ldr     r0, =0x4806a008
-       ldr     r1, =0x04
-       strb    r1, [r0]
-
-       ldr     r0, =0x4806a020
-       ldr     r1, =0x00
-       strb    r1, [r0]
-
-#if 0
-       ldr     r0, =0x4806a000
-       mov     r1, #'u'
-       strb    r1, [r0]
-#endif
-
-#if 0
-       /* LED0 OFF */
-       ldr     r3, =0x480000E5
-       mov     r4, #0x0b
-       strb    r4, [r3]
-#endif
-
-       ldr     sp,     SRAM_STACK
-       str     ip,     [sp]    /* stash old link register */
-       mov     ip,     lr      /* save link reg across call */
-       bl      s_init          /* go setup pll,mux,memory */
-       ldr     ip,     [sp]    /* restore save ip */
-       mov     lr,     ip      /* restore link reg */
-
-       /* map interrupt controller */
-       ldr     r0,     VAL_INTH_SETUP
-       mcr     p15, 0, r0, c15, c2, 4
-
-       /* back to arch calling code */
-       mov     pc,     lr
-
-       /* the literal pools origin */
-       .ltorg
-
-VAL_INTH_SETUP:
-       .word PERIFERAL_PORT_BASE
-SRAM_STACK:
-       .word LOW_LEVEL_SRAM_STACK
diff --git a/board/apollon/mem.c b/board/apollon/mem.c
deleted file mode 100644 (file)
index 36bf6e9..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * (C) Copyright 2005-2007
- * Samsung Electronics,
- * Kyungmin Park <kyungmin.park@samsung.com>
- *
- * Derived from omap2420
- *
- * 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 <asm/arch/omap2420.h>
-#include <asm/io.h>
-#include <asm/arch/bits.h>
-#include <asm/arch/mux.h>
-#include <asm/arch/mem.h>
-#include <asm/arch/clocks.h>
-#include <asm/arch/sys_proto.h>
-#include <asm/arch/sys_info.h>
-
-#include "mem.h"
-
-/************************************************************
- * sdelay() - simple spin loop.  Will be constant time as
- *  its generally used in 12MHz bypass conditions only.  This
- *  is necessary until timers are accessible.
- *
- *  not inline to increase chances its in cache when called
- *************************************************************/
-void sdelay(unsigned long loops)
-{
-       __asm__("1:\n" "subs %0, %1, #1\n"
-                 "bne 1b":"=r" (loops):"0"(loops));
-}
-
-/********************************************************************
- * prcm_init() - inits clocks for PRCM as defined in clocks.h
- * (config II default).
- *   -- called from SRAM, or Flash (using temp SRAM stack).
- ********************************************************************/
-void prcm_init(void) { }
-
-/**************************************************************************
- * make_cs1_contiguous() - for es2 and above remap cs1 behind cs0 to allow
- *  command line mem=xyz use all memory with out discontigious support
- *  compiled in.  Could do it at the ATAG, but there really is two banks...
- * Called as part of 2nd phase DDR init.
- **************************************************************************/
-void make_cs1_contiguous(void)
-{
-       u32 size, a_add_low, a_add_high;
-
-       size = get_sdr_cs_size(SDRC_CS0_OSET);
-       size /= SZ_32M;         /* find size to offset CS1 */
-       a_add_high = (size & 3) << 8;   /* set up low field */
-       a_add_low = (size & 0x3C) >> 2; /* set up high field */
-       __raw_writel((a_add_high | a_add_low), SDRC_CS_CFG);
-
-}
-
-/********************************************************
- *  mem_ok() - test used to see if timings are correct
- *             for a part. Helps in gussing which part
- *             we are currently using.
- *******************************************************/
-u32 mem_ok(void)
-{
-       u32 val1, val2;
-       u32 pattern = 0x12345678;
-
-       /* clear pos A */
-       __raw_writel(0x0, OMAP2420_SDRC_CS0 + 0x400);
-       /* pattern to pos B */
-       __raw_writel(pattern, OMAP2420_SDRC_CS0);
-       /* remove pattern off the bus */
-       __raw_writel(0x0, OMAP2420_SDRC_CS0 + 4);
-       /* get pos A value */
-       val1 = __raw_readl(OMAP2420_SDRC_CS0 + 0x400);
-       val2 = __raw_readl(OMAP2420_SDRC_CS0);  /* get val2 */
-
-       /* see if pos A value changed */
-       if ((val1 != 0) || (val2 != pattern))
-               return (0);
-       else
-               return (1);
-}
-
-/********************************************************
- *  sdrc_init() - init the sdrc chip selects CS0 and CS1
- *  - early init routines, called from flash or
- *  SRAM.
- *******************************************************/
-void sdrc_init(void)
-{
-#define EARLY_INIT 1
-       /* only init up first bank here */
-       do_sdrc_init(SDRC_CS0_OSET, EARLY_INIT);
-}
-
-/*************************************************************************
- * do_sdrc_init(): initialize the SDRAM for use.
- *  -called from low level code with stack only.
- *  -code sets up SDRAM timing and muxing for 2422 or 2420.
- *  -optimal settings can be placed here, or redone after i2c
- *      inspection of board info
- *
- *  This is a bit ugly, but should handle all memory moduels
- *   used with the APOLLON. The first time though this code from s_init()
- *   we configure the first chip select.  Later on we come back and
- *   will configure the 2nd chip select if it exists.
- *
- **************************************************************************/
-void do_sdrc_init(u32 offset, u32 early)
-{
-}
-
-/*****************************************************
- * gpmc_init(): init gpmc bus
- * Init GPMC for x16, MuxMode (SDRAM in x32).
- * This code can only be executed from SRAM or SDRAM.
- *****************************************************/
-void gpmc_init(void)
-{
-       u32 mux = 0, mtype, mwidth, rev, tval;
-
-       rev = get_cpu_rev();
-       if (rev == CPU_2420_2422_ES1)
-               tval = 1;
-       else
-               tval = 0;       /* disable bit switched meaning */
-
-       /* global settings */
-       __raw_writel(0x10, GPMC_SYSCONFIG);     /* smart idle */
-       __raw_writel(0x0, GPMC_IRQENABLE);      /* isr's sources masked */
-       __raw_writel(tval, GPMC_TIMEOUT_CONTROL);       /* timeout disable */
-#ifdef CONFIG_SYS_NAND_BOOT
-       /* set nWP, disable limited addr */
-       __raw_writel(0x001, GPMC_CONFIG);
-#else
-       /* set nWP, disable limited addr */
-       __raw_writel(0x111, GPMC_CONFIG);
-#endif
-
-       /* discover bus connection from sysboot */
-       if (is_gpmc_muxed() == GPMC_MUXED)
-               mux = BIT9;
-       mtype = get_gpmc0_type();
-       mwidth = get_gpmc0_width();
-
-       /* setup cs0 */
-       __raw_writel(0x0, GPMC_CONFIG7_0);      /* disable current map */
-       sdelay(1000);
-
-#ifdef CONFIG_SYS_NOR_BOOT
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG1_3, GPMC_CONFIG1_0);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG2_3, GPMC_CONFIG2_0);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG3_3, GPMC_CONFIG3_0);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG4_3, GPMC_CONFIG4_0);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG5_3, GPMC_CONFIG5_0);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG6_3, GPMC_CONFIG6_0);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG7_3, GPMC_CONFIG7_0);
-#else
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG1_0 | mux | mtype | mwidth,
-                    GPMC_CONFIG1_0);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG2_0, GPMC_CONFIG2_0);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG3_0, GPMC_CONFIG3_0);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG4_0, GPMC_CONFIG4_0);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG5_0, GPMC_CONFIG5_0);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG6_0, GPMC_CONFIG6_0);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG7_0, GPMC_CONFIG7_0);
-#endif
-       sdelay(2000);
-
-       /* setup cs1 */
-       __raw_writel(0, GPMC_CONFIG7_1);        /* disable any mapping */
-       sdelay(1000);
-
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG1_1, GPMC_CONFIG1_1);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG2_1, GPMC_CONFIG2_1);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG3_1, GPMC_CONFIG3_1);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG4_1, GPMC_CONFIG4_1);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG5_1, GPMC_CONFIG5_1);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG6_1, GPMC_CONFIG6_1);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG7_1, GPMC_CONFIG7_1);
-       sdelay(2000);
-
-       /* setup cs2 */
-       __raw_writel(0x0, GPMC_CONFIG7_2);      /* disable current map */
-       sdelay(1000);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG1_0 | mux | mtype | mwidth,
-                    GPMC_CONFIG1_2);
-       /* It's same as cs 0 */
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG2_0, GPMC_CONFIG2_2);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG3_0, GPMC_CONFIG3_2);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG4_0, GPMC_CONFIG4_2);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG5_0, GPMC_CONFIG5_2);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG6_0, GPMC_CONFIG6_2);
-#ifdef CONFIG_SYS_NOR_BOOT
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG7_0, GPMC_CONFIG7_2);
-#else
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG7_2, GPMC_CONFIG7_2);
-#endif
-
-#ifndef CONFIG_SYS_NOR_BOOT
-       /* setup cs3 */
-       __raw_writel(0, GPMC_CONFIG7_3);        /* disable any mapping */
-       sdelay(1000);
-
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG1_3, GPMC_CONFIG1_3);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG2_3, GPMC_CONFIG2_3);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG3_3, GPMC_CONFIG3_3);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG4_3, GPMC_CONFIG4_3);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG5_3, GPMC_CONFIG5_3);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG6_3, GPMC_CONFIG6_3);
-       __raw_writel(APOLLON_24XX_GPMC_CONFIG7_3, GPMC_CONFIG7_3);
-#endif
-
-#ifndef ASYNC_NOR
-       __raw_writew(0xaa, (APOLLON_CS3_BASE + 0xaaa));
-       __raw_writew(0x55, (APOLLON_CS3_BASE + 0x554));
-       __raw_writew(0xc0, (APOLLON_CS3_BASE | SYNC_NOR_VALUE));
-#endif
-       sdelay(2000);
-}
diff --git a/board/apollon/mem.h b/board/apollon/mem.h
deleted file mode 100644 (file)
index 09c4ea4..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * (C) Copyright 2005-2007
- * Samsung Electronics,
- * Kyungmin Park <kyungmin.park@samsung.com>
- *
- * 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 _APOLLON_OMAP24XX_MEM_H_
-#define _APOLLON_OMAP24XX_MEM_H_
-
-/* Slower full frequency range default timings for x32 operation*/
-#define APOLLON_2420_SDRC_SHARING              0x00000100
-#define APOLLON_2420_SDRC_MDCFG_0_DDR          0x00d04011
-#define APOLLON_2420_SDRC_MR_0_DDR             0x00000032
-
-/* optimized timings good for current shipping parts */
-#define APOLLON_242X_SDRC_ACTIM_CTRLA_0_100MHz 0x4A59B485
-#define APOLLON_242X_SDRC_ACTIM_CTRLB_0_100MHz 0x0000000C
-
-#define APOLLON_242X_SDRC_ACTIM_CTRLA_0_166MHz 0x7BA35907
-#define APOLLON_242X_SDRC_ACTIM_CTRLB_0_166MHz 0x00000013
-
-#define APOLLON_242X_SDRC_RFR_CTRL_100MHz      0x00030001
-#define APOLLON_242X_SDRC_RFR_CTRL_166MHz      0x00044C01
-
-#define APOLLON_242x_SDRC_DLLAB_CTRL_100MHz    0x00007306
-#define APOLLON_242x_SDRC_DLLAB_CTRL_166MHz    0x00000506
-
-#ifdef PRCM_CONFIG_I
-#define APOLLON_2420_SDRC_ACTIM_CTRLA_0        APOLLON_242X_SDRC_ACTIM_CTRLA_0_166MHz
-#define APOLLON_2420_SDRC_ACTIM_CTRLB_0        APOLLON_242X_SDRC_ACTIM_CTRLB_0_166MHz
-#define APOLLON_2420_SDRC_RFR_CTRL     APOLLON_242X_SDRC_RFR_CTRL_166MHz
-#define APOLLON_2420_SDRC_DLLAB_CTRL   APOLLON_242x_SDRC_DLLAB_CTRL_166MHz
-#elif PRCM_CONFIG_II
-#define APOLLON_2420_SDRC_ACTIM_CTRLA_0        APOLLON_242X_SDRC_ACTIM_CTRLA_0_100MHz
-#define APOLLON_2420_SDRC_ACTIM_CTRLB_0        APOLLON_242X_SDRC_ACTIM_CTRLB_0_100MHz
-#define APOLLON_2420_SDRC_RFR_CTRL     APOLLON_242X_SDRC_RFR_CTRL_100MHz
-#define APOLLON_2420_SDRC_DLLAB_CTRL   APOLLON_242x_SDRC_DLLAB_CTRL_100MHz
-#endif
-
-/* GPMC settings */
-#ifdef PRCM_CONFIG_I           /* L3 at 165MHz */
-/* CS0: OneNAND */
-# define APOLLON_24XX_GPMC_CONFIG1_0   0x00000001
-# define APOLLON_24XX_GPMC_CONFIG2_0   0x000c1000
-# define APOLLON_24XX_GPMC_CONFIG3_0   0x00030400
-# define APOLLON_24XX_GPMC_CONFIG4_0   0x0b841006
-# define APOLLON_24XX_GPMC_CONFIG5_0   0x020f0c11
-# define APOLLON_24XX_GPMC_CONFIG6_0   0x00000000
-# define APOLLON_24XX_GPMC_CONFIG7_0   (0x00000e40|(APOLLON_CS0_BASE >> 24))
-
-/* CS1: Ethernet */
-# define APOLLON_24XX_GPMC_CONFIG1_1   0x00011203
-# define APOLLON_24XX_GPMC_CONFIG2_1   0x001F1F01
-# define APOLLON_24XX_GPMC_CONFIG3_1   0x00080803
-# define APOLLON_24XX_GPMC_CONFIG4_1   0x1C0b1C0a
-# define APOLLON_24XX_GPMC_CONFIG5_1   0x041F1F1F
-# define APOLLON_24XX_GPMC_CONFIG6_1   0x000004C4
-# define APOLLON_24XX_GPMC_CONFIG7_1   (0x00000F40|(APOLLON_CS1_BASE >> 24))
-
-/* CS2: OneNAND */
-/* It's same as CS0 */
-# define APOLLON_24XX_GPMC_CONFIG7_2   (0x00000e40|(APOLLON_CS2_BASE >> 24))
-
-/* CS3: NOR */
-#ifdef ASYNC_NOR
-# define APOLLON_24XX_GPMC_CONFIG1_3   0x00021201
-# define APOLLON_24XX_GPMC_CONFIG2_3   0x00121601
-# define APOLLON_24XX_GPMC_CONFIG3_3   0x00040401
-# define APOLLON_24XX_GPMC_CONFIG4_3   0x12061605
-# define APOLLON_24XX_GPMC_CONFIG5_3   0x01151317
-#else
-# define SYNC_NOR_VALUE                        0x24aaa
-# define APOLLON_24XX_GPMC_CONFIG1_3   0xe5011211
-# define APOLLON_24XX_GPMC_CONFIG2_3   0x00090b01
-# define APOLLON_24XX_GPMC_CONFIG3_3   0x00020201
-# define APOLLON_24XX_GPMC_CONFIG4_3   0x09030b03
-# define APOLLON_24XX_GPMC_CONFIG5_3   0x010a0a0c
-#endif /* ASYNC_NOR */
-# define APOLLON_24XX_GPMC_CONFIG6_3   0x00000000
-# define APOLLON_24XX_GPMC_CONFIG7_3   (0x00000e40|(APOLLON_CS3_BASE >> 24))
-#endif /* endif PRCM_CONFIG_I */
-
-#ifdef PRCM_CONFIG_II          /* L3 at 100MHz */
-/* CS0: OneNAND */
-# define APOLLON_24XX_GPMC_CONFIG1_0   0x00000001
-# define APOLLON_24XX_GPMC_CONFIG2_0   0x00081080
-# define APOLLON_24XX_GPMC_CONFIG3_0   0x00030300
-# define APOLLON_24XX_GPMC_CONFIG4_0   0x08041004
-# define APOLLON_24XX_GPMC_CONFIG5_0   0x020b0910
-# define APOLLON_24XX_GPMC_CONFIG6_0   0x00000000
-# define APOLLON_24XX_GPMC_CONFIG7_0   (0x00000C40|(APOLLON_CS0_BASE >> 24))
-
-/* CS1: ethernet */
-# define APOLLON_24XX_GPMC_CONFIG1_1   0x00401203
-# define APOLLON_24XX_GPMC_CONFIG2_1   0x001F1F01
-# define APOLLON_24XX_GPMC_CONFIG3_1   0x00080803
-# define APOLLON_24XX_GPMC_CONFIG4_1   0x1C091C09
-# define APOLLON_24XX_GPMC_CONFIG5_1   0x041F1F1F
-# define APOLLON_24XX_GPMC_CONFIG6_1   0x000004C4
-# define APOLLON_24XX_GPMC_CONFIG7_1   (0x00000F40|(APOLLON_CS1_BASE >> 24))
-
-/* CS2: OneNAND */
-/* It's same as CS0 */
-# define APOLLON_24XX_GPMC_CONFIG7_2   (0x00000e40|(APOLLON_CS2_BASE >> 24))
-
-/* CS3: NOR */
-#define ASYNC_NOR
-#ifdef ASYNC_NOR
-# define APOLLON_24XX_GPMC_CONFIG1_3   0x00021201
-# define APOLLON_24XX_GPMC_CONFIG2_3   0x00121601
-# define APOLLON_24XX_GPMC_CONFIG3_3   0x00040401
-# define APOLLON_24XX_GPMC_CONFIG4_3   0x12061605
-# define APOLLON_24XX_GPMC_CONFIG5_3   0x01151317
-#else
-# define SYNC_NOR_VALUE                        0x24aaa
-# define APOLLON_24XX_GPMC_CONFIG1_3   0xe1001202
-# define APOLLON_24XX_GPMC_CONFIG2_3   0x00151501
-# define APOLLON_24XX_GPMC_CONFIG3_3   0x00050501
-# define APOLLON_24XX_GPMC_CONFIG4_3   0x0e070e07
-# define APOLLON_24XX_GPMC_CONFIG5_3   0x01131F1F
-#endif /* ASYNC_NOR */
-# define APOLLON_24XX_GPMC_CONFIG6_3   0x00000000
-# define APOLLON_24XX_GPMC_CONFIG7_3   (0x00000C40|(APOLLON_CS3_BASE >> 24))
-#endif /* endif PRCM_CONFIG_II */
-
-#ifdef PRCM_CONFIG_III         /* L3 at 133MHz */
-# ifdef CONFIG_SYS_NAND_BOOT
-#  define APOLLON_24XX_GPMC_CONFIG1_0   0x0
-#  define APOLLON_24XX_GPMC_CONFIG2_0   0x00141400
-#  define APOLLON_24XX_GPMC_CONFIG3_0   0x00141400
-#  define APOLLON_24XX_GPMC_CONFIG4_0   0x0F010F01
-#  define APOLLON_24XX_GPMC_CONFIG5_0   0x010C1414
-#  define APOLLON_24XX_GPMC_CONFIG6_0   0x00000A80
-# else /* NOR boot */
-#  define APOLLON_24XX_GPMC_CONFIG1_0   0x3
-#  define APOLLON_24XX_GPMC_CONFIG2_0   0x00151501
-#  define APOLLON_24XX_GPMC_CONFIG3_0   0x00060602
-#  define APOLLON_24XX_GPMC_CONFIG4_0   0x10081008
-#  define APOLLON_24XX_GPMC_CONFIG5_0   0x01131F1F
-#  define APOLLON_24XX_GPMC_CONFIG6_0   0x000004c4
-# endif        /* endif CONFIG_SYS_NAND_BOOT */
-# define APOLLON_24XX_GPMC_CONFIG7_0   (0x00000C40|(APOLLON_CS0_BASE >> 24))
-# define APOLLON_24XX_GPMC_CONFIG1_1   0x00011000
-# define APOLLON_24XX_GPMC_CONFIG2_1   0x001f1f01
-# define APOLLON_24XX_GPMC_CONFIG3_1   0x00080803
-# define APOLLON_24XX_GPMC_CONFIG4_1   0x1C091C09
-# define APOLLON_24XX_GPMC_CONFIG5_1   0x041f1F1F
-# define APOLLON_24XX_GPMC_CONFIG6_1   0x000004C4
-# define APOLLON_24XX_GPMC_CONFIG7_1   (0x00000F40|(APOLLON_CS1_BASE >> 24))
-#endif /* endif CONFIG_SYS_PRCM_III */
-
-#endif /* endif _APOLLON_OMAP24XX_MEM_H_ */
diff --git a/board/apollon/sys_info.c b/board/apollon/sys_info.c
deleted file mode 100644 (file)
index 4f950ae..0000000
+++ /dev/null
@@ -1,396 +0,0 @@
-/*
- * (C) Copyright 2005-2007
- * Samsung Electronics,
- * Kyungmin Park <kyungmin.park@samsung.com>
- *
- * Derived from omap2420
- *
- * 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 <asm/arch/omap2420.h>
-#include <asm/io.h>
-#include <asm/arch/bits.h>
-#include <asm/arch/mem.h>      /* get mem tables */
-#include <asm/arch/sys_proto.h>
-#include <asm/arch/sys_info.h>
-#include <i2c.h>
-
-/**************************************************************************
- * get_prod_id() - get id info from chips
- ***************************************************************************/
-static u32 get_prod_id(void)
-{
-       u32 p;
-       p = __raw_readl(PRODUCTION_ID); /* get production ID */
-       return ((p & CPU_242X_PID_MASK) >> 16);
-}
-
-/**************************************************************************
- * get_cpu_type() - low level get cpu type
- * - no C globals yet.
- * - just looking to say if this is a 2422 or 2420 or ...
- * - to start with we will look at switch settings..
- * - 2422 id's same as 2420 for ES1 will rely on H4 board characteristics
- *   (mux for 2420, non-mux for 2422).
- ***************************************************************************/
-u32 get_cpu_type(void)
-{
-       u32 v;
-
-       switch (get_prod_id()) {
-       case 1:;                /* 2420 */
-       case 2:
-               return (CPU_2420);
-               break;          /* 2420 pop */
-       case 4:
-               return (CPU_2422);
-               break;
-       case 8:
-               return (CPU_2423);
-               break;
-       default:
-               break;          /* early 2420/2422's unmarked */
-       }
-
-       v = __raw_readl(TAP_IDCODE_REG);
-       v &= CPU_24XX_ID_MASK;
-       /* currently 2420 and 2422 have same id */
-       if (v == CPU_2420_CHIPID) {
-               if (is_gpmc_muxed() == GPMC_MUXED)      /* if mux'ed */
-                       return (CPU_2420);
-               else
-                       return (CPU_2422);
-       } else
-               return (CPU_2420);      /* don't know, say 2420 */
-}
-
-/******************************************
- * get_cpu_rev(void) - extract version info
- ******************************************/
-u32 get_cpu_rev(void)
-{
-       u32 v;
-       v = __raw_readl(TAP_IDCODE_REG);
-       v = v >> 28;
-       return (v + 1);         /* currently 2422 and 2420 match up */
-}
-
-/****************************************************
- * is_mem_sdr() - return 1 if mem type in use is SDR
- ****************************************************/
-u32 is_mem_sdr(void)
-{
-       volatile u32 *burst = (volatile u32 *)(SDRC_MR_0 + SDRC_CS0_OSET);
-       if (*burst == H4_2420_SDRC_MR_0_SDR)
-               return (1);
-       return (0);
-}
-
-/***********************************************************
- * get_mem_type() - identify type of mDDR part used.
- * 2422 uses stacked DDR, 2 parts CS0/CS1.
- * 2420 may have 1 or 2, no good way to know...only init 1...
- * when eeprom data is up we can select 1 more.
- *************************************************************/
-u32 get_mem_type(void)
-{
-       u32 cpu, sdr = is_mem_sdr();
-
-       cpu = get_cpu_type();
-       if (cpu == CPU_2422 || cpu == CPU_2423)
-               return (DDR_STACKED);
-
-       if (get_prod_id() == 0x2)
-               return (XDR_POP);
-
-       if (get_board_type() == BOARD_H4_MENELAUS)
-               if (sdr)
-                       return (SDR_DISCRETE);
-               else
-                       return (DDR_COMBO);
-       else if (sdr)           /* SDP + SDR kit */
-               return (SDR_DISCRETE);
-       else
-               return (DDR_DISCRETE);  /* origional SDP */
-}
-
-/***********************************************************************
- * get_cs0_size() - get size of chip select 0/1
- ************************************************************************/
-u32 get_sdr_cs_size(u32 offset)
-{
-       u32 size;
-       size = __raw_readl(SDRC_MCFG_0 + offset) >> 8;  /* get ram size field */
-       size &= 0x2FF;          /* remove unwanted bits */
-       size *= SZ_2M;          /* find size in MB */
-       return (size);
-}
-
-/***********************************************************************
- * get_board_type() - get board type based on current production stats.
- *  --- NOTE: 2 I2C EEPROMs will someday be populated with proper info.
- *      when they are available we can get info from there.  This should
- *      be correct of all known boards up until today.
- ************************************************************************/
-u32 get_board_type(void)
-{
-       return (BOARD_H4_SDP);
-}
-
-/******************************************************************
- * get_sysboot_value() - get init word settings (dip switch on h4)
- ******************************************************************/
-inline u32 get_sysboot_value(void)
-{
-       return (0x00000FFF & __raw_readl(CONTROL_STATUS));
-}
-
-/***************************************************************************
- *  get_gpmc0_base() - Return current address hardware will be
- *     fetching from. The below effectively gives what is correct, its a bit
- *   mis-leading compared to the TRM.  For the most general case the mask
- *   needs to be also taken into account this does work in practice.
- *   - for u-boot we currently map:
- *       -- 0 to nothing,
- *       -- 4 to flash
- *       -- 8 to enent
- *       -- c to wifi
- ****************************************************************************/
-u32 get_gpmc0_base(void)
-{
-       u32 b;
-
-       b = __raw_readl(GPMC_CONFIG7_0);
-       b &= 0x1F;              /* keep base [5:0] */
-       b = b << 24;            /* ret 0x0b000000 */
-       return (b);
-}
-
-/*****************************************************************
- *  is_gpmc_muxed() - tells if address/data lines are multiplexed
- *****************************************************************/
-u32 is_gpmc_muxed(void)
-{
-       u32 mux;
-       mux = get_sysboot_value();
-       if ((mux & (BIT0 | BIT1 | BIT2 | BIT3)) == (BIT0 | BIT2 | BIT3))
-               return (GPMC_MUXED);    /* NAND Boot mode */
-       if (mux & BIT1)         /* if mux'ed */
-               return (GPMC_MUXED);
-       else
-               return (GPMC_NONMUXED);
-}
-
-/************************************************************************
- *  get_gpmc0_type() - read sysboot lines to see type of memory attached
- ************************************************************************/
-u32 get_gpmc0_type(void)
-{
-       u32 type;
-       type = get_sysboot_value();
-       if ((type & (BIT3 | BIT2)) == (BIT3 | BIT2))
-               return (TYPE_NAND);
-       else
-               return (TYPE_NOR);
-}
-
-/*******************************************************************
- * get_gpmc0_width() - See if bus is in x8 or x16 (mainly for nand)
- *******************************************************************/
-u32 get_gpmc0_width(void)
-{
-       u32 width;
-       width = get_sysboot_value();
-       if ((width & 0xF) == (BIT3 | BIT2))
-               return (WIDTH_8BIT);
-       else
-               return (WIDTH_16BIT);
-}
-
-/*********************************************************************
- * wait_on_value() - common routine to allow waiting for changes in
- *   volatile regs.
- *********************************************************************/
-u32 wait_on_value(u32 read_bit_mask, u32 match_value, u32 read_addr, u32 bound)
-{
-       u32 i = 0, val;
-       do {
-               ++i;
-               val = __raw_readl(read_addr) & read_bit_mask;
-               if (val == match_value)
-                       return (1);
-               if (i == bound)
-                       return (0);
-       } while (1);
-}
-
-/*********************************************************************
- *  display_board_info() - print banner with board info.
- *********************************************************************/
-void display_board_info(u32 btype)
-{
-       char cpu_2420[] = "2420";       /* cpu type */
-       char cpu_2422[] = "2422";
-       char cpu_2423[] = "2423";
-       char mem_sdr[] = "mSDR";        /* memory type */
-       char mem_ddr[] = "mDDR";
-       char t_tst[] = "TST";   /* security level */
-       char t_emu[] = "EMU";
-       char t_hs[] = "HS";
-       char t_gp[] = "GP";
-       char unk[] = "?";
-
-       char *cpu_s, *mem_s, *sec_s;
-       u32 cpu, rev, sec;
-
-       rev = get_cpu_rev();
-       cpu = get_cpu_type();
-       sec = get_device_type();
-
-       if (is_mem_sdr())
-               mem_s = mem_sdr;
-       else
-               mem_s = mem_ddr;
-
-       if (cpu == CPU_2423)
-               cpu_s = cpu_2423;
-       else if (cpu == CPU_2422)
-               cpu_s = cpu_2422;
-       else
-               cpu_s = cpu_2420;
-
-       switch (sec) {
-       case TST_DEVICE:
-               sec_s = t_tst;
-               break;
-       case EMU_DEVICE:
-               sec_s = t_emu;
-               break;
-       case HS_DEVICE:
-               sec_s = t_hs;
-               break;
-       case GP_DEVICE:
-               sec_s = t_gp;
-               break;
-       default:
-               sec_s = unk;
-       }
-
-       printf("OMAP%s-%s revision %d\n", cpu_s, sec_s, rev - 1);
-       printf("Samsung Apollon SDP Base Board + %s \n", mem_s);
-}
-
-/*************************************************************************
- * get_board_rev() - setup to pass kernel board revision information
- *          0 = 242x IP platform (first 2xx boards)
- *          1 = 242x Menelaus platfrom.
- *************************************************************************/
-u32 get_board_rev(void)
-{
-       u32 rev = 0;
-       u32 btype = get_board_type();
-
-       if (btype == BOARD_H4_MENELAUS)
-               rev = 1;
-       return (rev);
-}
-
-/********************************************************
- *  get_base(); get upper addr of current execution
- *******************************************************/
-u32 get_base(void)
-{
-       u32 val;
-       __asm__ __volatile__("mov %0, pc \n":"=r"(val)::"memory");
-       val &= 0xF0000000;
-       val >>= 28;
-       return (val);
-}
-
-/********************************************************
- *  get_base2(); get 2upper addr of current execution
- *******************************************************/
-u32 get_base2(void)
-{
-       u32 val;
-       __asm__ __volatile__("mov %0, pc \n":"=r"(val)::"memory");
-       val &= 0xFF000000;
-       val >>= 24;
-       return (val);
-}
-
-/********************************************************
- *  running_in_flash() - tell if currently running in
- *   flash.
- *******************************************************/
-u32 running_in_flash(void)
-{
-       if (get_base() < 4)
-               return (1);     /* in flash */
-       return (0);             /* running in SRAM or SDRAM */
-}
-
-/********************************************************
- *  running_in_sram() - tell if currently running in
- *   sram.
- *******************************************************/
-u32 running_in_sram(void)
-{
-       if (get_base() == 4)
-               return (1);     /* in SRAM */
-       return (0);             /* running in FLASH or SDRAM */
-}
-
-/********************************************************
- *  running_in_sdram() - tell if currently running in
- *   flash.
- *******************************************************/
-u32 running_in_sdram(void)
-{
-       if (get_base() > 4)
-               return (1);     /* in sdram */
-       return (0);             /* running in SRAM or FLASH */
-}
-
-/*************************************************************
- *  running_from_internal_boot() - am I a signed NOR image.
- *************************************************************/
-u32 running_from_internal_boot(void)
-{
-       u32 v, base;
-
-       v = get_sysboot_value() & BIT3;
-       base = get_base2();
-       /* if running at mask rom flash address and
-        * sysboot3 says this was an internal boot
-        */
-       if ((base == 0x08) && v)
-               return (1);
-       else
-               return (0);
-}
-
-/*************************************************************
- *  get_device_type(): tell if GP/HS/EMU/TST
- *************************************************************/
-u32 get_device_type(void)
-{
-       int mode;
-       mode = __raw_readl(CONTROL_STATUS) & (BIT10 | BIT9 | BIT8);
-       return (mode >>= 8);
-}
index 30a5835..1effc9c 100644 (file)
@@ -79,11 +79,7 @@ skip_check_didle:
        str     r1, [r0, #0x0]                          @ GPIO_CON_OFFSET
 
        ldr     r1, [r0, #0x4]                          @ GPIO_DAT_OFFSET
-#ifdef CONFIG_ONENAND_IPL
-       orr     r1, r1, #(1 << 1)                       @ 1 * 1-bit
-#else
        bic     r1, r1, #(1 << 1)
-#endif
        str     r1, [r0, #0x4]                          @ GPIO_DAT_OFFSET
 
        /* Don't setup at s5pc100 */
@@ -182,7 +178,6 @@ skip_check_didle:
        /* Do not release retention here for S5PC110 */
        streq   r1, [r0]
 
-#ifndef CONFIG_ONENAND_IPL
        /* Disable Watchdog */
        ldreq   r0, =S5PC100_WATCHDOG_BASE              @ 0xEA200000
        ldrne   r0, =S5PC110_WATCHDOG_BASE              @ 0xE2700000
@@ -193,7 +188,6 @@ skip_check_didle:
        ldrne   r0, =S5PC110_SROMC_BASE
        ldr     r1, =0x9
        str     r1, [r0]
-#endif
 
        /* S5PC100 has 3 groups of interrupt sources */
        ldreq   r0, =S5PC100_VIC0_BASE                  @ 0xE4000000
@@ -207,7 +201,6 @@ skip_check_didle:
        str     r3, [r1, #0x14]                         @ INTENCLEAR
        str     r3, [r2, #0x14]                         @ INTENCLEAR
 
-#ifndef CONFIG_ONENAND_IPL
        /* Set all interrupts as IRQ */
        str     r5, [r0, #0xc]                          @ INTSELECT
        str     r5, [r1, #0xc]                          @ INTSELECT
@@ -217,120 +210,12 @@ skip_check_didle:
        str     r5, [r0, #0xf00]                        @ INTADDRESS
        str     r5, [r1, #0xf00]                        @ INTADDRESS
        str     r5, [r2, #0xf00]                        @ INTADDRESS
-#endif
 
-#ifndef CONFIG_ONENAND_IPL
        /* for UART */
        bl      uart_asm_init
 
        bl      internal_ram_init
-#endif
-
-#ifdef CONFIG_ONENAND_IPL
-       /* init system clock */
-       bl      system_clock_init
-
-       /* OneNAND Sync Read Support at S5PC110 only
-        * RM[15]       : Sync Read
-        * BRWL[14:12]  : 7 CLK
-        * BL[11:9]     : Continuous
-        * VHF[3]       : Very High Frequency Enable (Over 83MHz)
-        * HF[2]        : High Frequency Enable (Over 66MHz)
-        * WM[1]        : Sync Write
-        */
-       cmp     r7, r8
-       ldrne   r1, =0xE006
-       ldrne   r0, =0xB001E442
-       strneh  r1, [r0]
-
-       /*
-        * GCE[26]      : Gated Clock Enable
-        * RPE[17]      : Enables Read Prefetch
-        */
-       ldrne   r1, =((1 << 26) | (1 << 17) | 0xE006)
-       ldrne   r0, =0xB0600000
-       strne   r1, [r0, #0x100]                        @ ONENAND_IF_CTRL
-       ldrne   r1, =0x1212
-       strne   r1, [r0, #0x108]
-
-       /* Board detection to set proper memory configuration */
-       cmp     r7, r8
-       moveq   r9, #1          /* r9 has 1Gib default at s5pc100 */
-       movne   r9, #2          /* r9 has 2Gib default at s5pc110 */
-
-       ldr     r2, =0xE0200200
-       ldr     r4, [r2, #0x48]
-
-       bic     r1, r4, #(0x3F << 4)    /* PULLUP_DISABLE: 3 * 2-bit */
-       bic     r1, r1, #(0x3 << 2)     /* PULLUP_DISABLE: 2 * 2-bit */
-       bic     r1, r1, #(0x3 << 14)    /* PULLUP_DISABLE: 2 * 2-bit */
-       str     r1, [r2, #0x48]
-       /* For write completion */
-       nop
-       nop
-
-       ldr     r3, [r2, #0x44]
-       and     r1, r3, #(0x7 << 2)
-       mov     r1, r1, lsr #2
-       cmp     r1, #0x5
-       moveq   r9, #3
-       cmp     r1, #0x6
-       moveq   r9, #1
-       cmp     r1, #0x7
-       moveq   r9, #2
-       and     r0, r3, #(0x1 << 1)
-       mov     r0, r0, lsr #1
-       orr     r1, r1, r0, lsl #3
-       cmp     r1, #0x8
-       moveq   r9, #3
-       and     r1, r3, #(0x7 << 2)
-       mov     r1, r1, lsr #2
-       and     r0, r3, #(0x1 << 7)
-       mov     r0, r0, lsr #7
-       orr     r1, r1, r0, lsl #3
-       cmp     r1, #0x9
-       moveq   r9, #3
-       str     r4, [r2, #0x48]         /* Restore PULLUP configuration */
-
-       bl      mem_ctrl_asm_init
-
-       /* Wakeup support. Don't know if it's going to be used, untested. */
-       ldreq   r0, =S5PC100_RST_STAT
-       ldrne   r0, =S5PC110_RST_STAT
-       ldr     r1, [r0]
-       biceq   r1, r1, #0xfffffff7
-       moveq   r2, #(1 << 3)
-       bicne   r1, r1, #0xfffeffff
-       movne   r2, #(1 << 16)
-       cmp     r1, r2
-       bne     1f
-wakeup:
-       /* turn off L2 cache */
-       bl      l2_cache_disable
-
-       cmp     r7, r8
-       ldreq   r0, =0xC100
-       ldrne   r0, =0xC110
-
-       /* invalidate L2 cache also */
-       bl      invalidate_dcache
-
-       /* turn on L2 cache */
-       bl      l2_cache_enable
-
-       cmp     r7, r8
-       /* Load return address and jump to kernel */
-       ldreq   r0, =S5PC100_INFORM0
-       ldrne   r0, =S5PC110_INFORM0
-
-       /* r1 = physical address of s5pc1xx_cpu_resume function */
-       ldr     r1, [r0]
 
-       /* Jump to kernel (sleep-s5pc1xx.S) */
-       mov     pc, r1
-       nop
-       nop
-#else
        cmp     r7, r8
        /* Clear wakeup status register */
        ldreq   r0, =S5PC100_WAKEUP_STAT
@@ -347,7 +232,6 @@ wakeup:
        orr     r1, r1, r2
        str     r1, [r0]
 
-#endif
        b       1f
 
 didle_wakeup:
@@ -517,7 +401,6 @@ system_clock_init:
 
        mov     pc, lr
 
-#ifndef CONFIG_ONENAND_IPL
 internal_ram_init:
        ldreq   r0, =0xE3800000
        ldrne   r0, =0xF1500000
@@ -525,9 +408,7 @@ internal_ram_init:
        str     r1, [r0]
 
        mov     pc, lr
-#endif
 
-#ifndef CONFIG_ONENAND_IPL
 /*
  * uart_asm_init: Initialize UART's pins
  */
@@ -582,4 +463,3 @@ uart_asm_init:
        str     r1, [r0, #0x4]                  @ S5PC1XX_GPIO_DAT_OFFSET
 200:
        mov     pc, lr
-#endif
index 6d18835..6f9a554 100644 (file)
@@ -50,12 +50,10 @@ lowlevel_init:
        orr     r0, r0, #0x0
        str     r5, [r0]
 
-#ifndef CONFIG_ONENAND_IPL
        /* setting SRAM */
        ldr     r0, =S5PC100_SROMC_BASE
        ldr     r1, =0x9
        str     r1, [r0]
-#endif
 
        /* S5PC100 has 3 groups of interrupt sources */
        ldr     r0, =S5PC100_VIC0_BASE                  @0xE4000000
@@ -68,7 +66,6 @@ lowlevel_init:
        str     r3, [r1, #0x14]                         @INTENCLEAR
        str     r3, [r2, #0x14]                         @INTENCLEAR
 
-#ifndef CONFIG_ONENAND_IPL
        /* Set all interrupts as IRQ */
        str     r5, [r0, #0xc]                          @INTSELECT
        str     r5, [r1, #0xc]                          @INTSELECT
@@ -78,54 +75,17 @@ lowlevel_init:
        str     r5, [r0, #0xf00]                        @INTADDRESS
        str     r5, [r1, #0xf00]                        @INTADDRESS
        str     r5, [r2, #0xf00]                        @INTADDRESS
-#endif
 
-#ifndef CONFIG_ONENAND_IPL
        /* for UART */
        bl uart_asm_init
 
        /* for TZPC */
        bl tzpc_asm_init
-#endif
-
-#ifdef CONFIG_ONENAND_IPL
-       /* init system clock */
-       bl      system_clock_init
-
-       bl      mem_ctrl_asm_init
-
-       /* Wakeup support. Don't know if it's going to be used, untested. */
-       ldr     r0, =S5PC100_RST_STAT
-       ldr     r1, [r0]
-       bic     r1, r1, #0xfffffff7
-       cmp     r1, #0x8
-       beq     wakeup_reset
-#endif
 
 1:
        mov     lr, r9
        mov     pc, lr
 
-#ifdef CONFIG_ONENAND_IPL
-wakeup_reset:
-
-       /* Clear wakeup status register */
-       ldr     r0, =S5PC100_WAKEUP_STAT
-       ldr     r1, [r0]
-       str     r1, [r0]
-
-       /* Load return address and jump to kernel */
-       ldr     r0, =S5PC100_INFORM0
-
-       /* r1 = physical address of s5pc100_cpu_resume function */
-       ldr     r1, [r0]
-
-       /* Jump to kernel (sleep.S) */
-       mov     pc, r1
-       nop
-       nop
-#endif
-
 /*
  * system_clock_init: Initialize core clock and bus clock.
  * void system_clock_init(void)
@@ -178,7 +138,6 @@ system_clock_init:
 
        mov     pc, lr
 
-#ifndef CONFIG_ONENAND_IPL
 /*
  * uart_asm_init: Initialize UART's pins
  */
@@ -212,4 +171,3 @@ tzpc_asm_init:
        str     r1, [r0, #0x810]
 
        mov     pc, lr
-#endif
index ea5c7a9..b4e0d3c 100644 (file)
@@ -50,7 +50,6 @@ tt01                         arm         arm1136     -                   hale
 imx31_litekit                arm         arm1136     -                   logicpd        mx31
 flea3                        arm         arm1136     -                   CarMediaLab    mx35
 mx35pdk                      arm         arm1136     -                   freescale      mx35
-apollon                             arm         arm1136     apollon             -              omap24xx
 omap2420h4                   arm         arm1136     -                   ti             omap24xx
 tnetv107x_evm                arm         arm1176     tnetv107xevm        ti             tnetv107x
 rpi_b                        arm         arm1176     rpi_b               raspberrypi    bcm2835
index 42f08fd..23bd8a5 100644 (file)
@@ -216,15 +216,15 @@ int do_bdinfo(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
        print_num("flashstart             ", bd->bi_flashstart);
        print_num("CONFIG_SYS_MONITOR_BASE       ", CONFIG_SYS_MONITOR_BASE);
        print_num("CONFIG_ENV_ADDR           ", CONFIG_ENV_ADDR);
-       printf("CONFIG_SYS_RELOC_MONITOR_BASE = 0x%lx (%d)\n", CONFIG_SYS_RELOC_MONITOR_BASE,
+       printf("CONFIG_SYS_RELOC_MONITOR_BASE = 0x%x (%d)\n", CONFIG_SYS_RELOC_MONITOR_BASE,
               CONFIG_SYS_MONITOR_LEN);
-       printf("CONFIG_SYS_MALLOC_BASE        = 0x%lx (%d)\n", CONFIG_SYS_MALLOC_BASE,
+       printf("CONFIG_SYS_MALLOC_BASE        = 0x%x (%d)\n", CONFIG_SYS_MALLOC_BASE,
               CONFIG_SYS_MALLOC_LEN);
-       printf("CONFIG_SYS_INIT_SP_OFFSET     = 0x%lx (%d)\n", CONFIG_SYS_INIT_SP_OFFSET,
+       printf("CONFIG_SYS_INIT_SP_OFFSET     = 0x%x (%d)\n", CONFIG_SYS_INIT_SP_OFFSET,
               CONFIG_SYS_STACK_SIZE);
-       printf("CONFIG_SYS_PROM_OFFSET        = 0x%lx (%d)\n", CONFIG_SYS_PROM_OFFSET,
+       printf("CONFIG_SYS_PROM_OFFSET        = 0x%x (%d)\n", CONFIG_SYS_PROM_OFFSET,
               CONFIG_SYS_PROM_SIZE);
-       printf("CONFIG_SYS_GBL_DATA_OFFSET    = 0x%lx (%d)\n", CONFIG_SYS_GBL_DATA_OFFSET,
+       printf("CONFIG_SYS_GBL_DATA_OFFSET    = 0x%x (%d)\n", CONFIG_SYS_GBL_DATA_OFFSET,
               GENERATED_GBL_DATA_SIZE);
 
 #if defined(CONFIG_CMD_NET)
index a91ccf4..9c6dabe 100644 (file)
@@ -231,12 +231,18 @@ print:
 #ifdef CONFIG_CMD_NAND_LOCK_UNLOCK
 static void print_status(ulong start, ulong end, ulong erasesize, int status)
 {
+       /*
+        * Micron NAND flash (e.g. MT29F4G08ABADAH4) BLOCK LOCK READ STATUS is
+        * not the same as others.  Instead of bit 1 being lock, it is
+        * #lock_tight. To make the driver support either format, ignore bit 1
+        * and use only bit 0 and bit 2.
+        */
        printf("%08lx - %08lx: %08lx blocks %s%s%s\n",
                start,
                end - 1,
                (end - start) / erasesize,
                ((status & NAND_LOCK_STATUS_TIGHT) ?  "TIGHT " : ""),
-               ((status & NAND_LOCK_STATUS_LOCK) ?  "LOCK " : ""),
+               (!(status & NAND_LOCK_STATUS_UNLOCK) ?  "LOCK " : ""),
                ((status & NAND_LOCK_STATUS_UNLOCK) ?  "UNLOCK " : ""));
 }
 
@@ -749,11 +755,18 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
                return 0;
        }
 
-       if (strcmp(cmd, "unlock") == 0) {
+       if (strncmp(cmd, "unlock", 5) == 0) {
+               int allexcept = 0;
+
+               s = strchr(cmd, '.');
+
+               if (s && !strcmp(s, ".allexcept"))
+                       allexcept = 1;
+
                if (arg_off_size(argc - 2, argv + 2, &dev, &off, &size) < 0)
                        return 1;
 
-               if (!nand_unlock(&nand_info[dev], off, size)) {
+               if (!nand_unlock(&nand_info[dev], off, size, allexcept)) {
                        puts("NAND flash successfully unlocked\n");
                } else {
                        puts("Error unlocking NAND flash, "
@@ -807,7 +820,7 @@ U_BOOT_CMD(
        "\n"
        "nand lock [tight] [status]\n"
        "    bring nand to lock state or display locked pages\n"
-       "nand unlock [offset] [size] - unlock section"
+       "nand unlock[.allexcept] [offset] [size] - unlock section"
 #endif
 #ifdef CONFIG_ENV_OFFSET_OOB
        "\n"
index fd05e72..3474bc6 100644 (file)
@@ -198,31 +198,20 @@ static int do_env_grep(cmd_tbl_t *cmdtp, int flag,
 #endif
 
 /*
- * Set a new environment variable,
- * or replace or delete an existing one.
+ * Perform consistency checking before setting, replacing, or deleting an
+ * environment variable, then (if successful) apply the changes to internals so
+ * to make them effective.  Code for this function was taken out of
+ * _do_env_set(), which now calls it instead.
+ * Also called as a callback function by himport_r().
+ * Returns 0 in case of success, 1 in case of failure.
+ * When (flag & H_FORCE) is set, do not print out any error message and force
+ * overwriting of write-once variables.
  */
-int _do_env_set(int flag, int argc, char * const argv[])
+
+int env_check_apply(const char *name, const char *oldval,
+                       const char *newval, int flag)
 {
-       int   i, len;
        int   console = -1;
-       char  *name, *value, *s;
-       ENTRY e, *ep;
-
-       name = argv[1];
-
-       if (strchr(name, '=')) {
-               printf("## Error: illegal character '=' in variable name"
-                      "\"%s\"\n", name);
-               return 1;
-       }
-
-       env_id++;
-       /*
-        * search if variable with this name already exists
-        */
-       e.key = name;
-       e.data = NULL;
-       hsearch_r(e, FIND, &ep, &env_htab);
 
        /* Check for console redirection */
        if (strcmp(name, "stdin") == 0)
@@ -233,60 +222,75 @@ int _do_env_set(int flag, int argc, char * const argv[])
                console = stderr;
 
        if (console != -1) {
-               if (argc < 3) {         /* Cannot delete it! */
-                       printf("Can't delete \"%s\"\n", name);
+               if ((newval == NULL) || (*newval == '\0')) {
+                       /* We cannot delete stdin/stdout/stderr */
+                       if ((flag & H_FORCE) == 0)
+                               printf("Can't delete \"%s\"\n", name);
                        return 1;
                }
 
 #ifdef CONFIG_CONSOLE_MUX
-               i = iomux_doenv(console, argv[2]);
-               if (i)
-                       return i;
+               if (iomux_doenv(console, newval))
+                       return 1;
 #else
                /* Try assigning specified device */
-               if (console_assign(console, argv[2]) < 0)
+               if (console_assign(console, newval) < 0)
                        return 1;
 
 #ifdef CONFIG_SERIAL_MULTI
-               if (serial_assign(argv[2]) < 0)
+               if (serial_assign(newval) < 0)
                        return 1;
 #endif
 #endif /* CONFIG_CONSOLE_MUX */
        }
 
        /*
-        * Some variables like "ethaddr" and "serial#" can be set only
-        * once and cannot be deleted; also, "ver" is readonly.
+        * Some variables like "ethaddr" and "serial#" can be set only once and
+        * cannot be deleted, unless CONFIG_ENV_OVERWRITE is defined.
         */
-       if (ep) {               /* variable exists */
 #ifndef CONFIG_ENV_OVERWRITE
+       if (oldval != NULL &&                   /* variable exists */
+               (flag & H_FORCE) == 0) {        /* and we are not forced */
                if (strcmp(name, "serial#") == 0 ||
                    (strcmp(name, "ethaddr") == 0
 #if defined(CONFIG_OVERWRITE_ETHADDR_ONCE) && defined(CONFIG_ETHADDR)
-                    && strcmp(ep->data, MK_STR(CONFIG_ETHADDR)) != 0
+                    && strcmp(oldval, MK_STR(CONFIG_ETHADDR)) != 0
 #endif /* CONFIG_OVERWRITE_ETHADDR_ONCE && CONFIG_ETHADDR */
                        )) {
                        printf("Can't overwrite \"%s\"\n", name);
                        return 1;
                }
+       }
 #endif
+       /*
+        * When we change baudrate, or we are doing an env default -a
+        * (which will erase all variables prior to calling this),
+        * we want the baudrate to actually change - for real.
+        */
+       if (oldval != NULL ||                   /* variable exists */
+               (flag & H_NOCLEAR) == 0) {      /* or env is clear */
                /*
                 * Switch to new baudrate if new baudrate is supported
                 */
                if (strcmp(name, "baudrate") == 0) {
-                       int baudrate = simple_strtoul(argv[2], NULL, 10);
+                       int baudrate = simple_strtoul(newval, NULL, 10);
                        int i;
                        for (i = 0; i < N_BAUDRATES; ++i) {
                                if (baudrate == baudrate_table[i])
                                        break;
                        }
                        if (i == N_BAUDRATES) {
-                               printf("## Baudrate %d bps not supported\n",
-                                       baudrate);
+                               if ((flag & H_FORCE) == 0)
+                                       printf("## Baudrate %d bps not "
+                                               "supported\n", baudrate);
                                return 1;
                        }
+                       if (gd->baudrate == baudrate) {
+                               /* If unchanged, we just say it's OK */
+                               return 0;
+                       }
                        printf("## Switch baudrate to %d bps and"
-                              "press ENTER ...\n", baudrate);
+                               "press ENTER ...\n", baudrate);
                        udelay(50000);
                        gd->baudrate = baudrate;
 #if defined(CONFIG_PPC) || defined(CONFIG_MCF52x2)
@@ -300,9 +304,62 @@ int _do_env_set(int flag, int argc, char * const argv[])
                }
        }
 
+       /*
+        * Some variables should be updated when the corresponding
+        * entry in the environment is changed
+        */
+       if (strcmp(name, "loadaddr") == 0) {
+               load_addr = simple_strtoul(newval, NULL, 16);
+               return 0;
+       }
+#if defined(CONFIG_CMD_NET)
+       else if (strcmp(name, "bootfile") == 0) {
+               copy_filename(BootFile, newval, sizeof(BootFile));
+               return 0;
+       }
+#endif
+       return 0;
+}
+
+/*
+ * Set a new environment variable,
+ * or replace or delete an existing one.
+*/
+int _do_env_set(int flag, int argc, char * const argv[])
+{
+       int   i, len;
+       char  *name, *value, *s;
+       ENTRY e, *ep;
+
+       name = argv[1];
+       value = argv[2];
+
+       if (strchr(name, '=')) {
+               printf("## Error: illegal character '='"
+                      "in variable name \"%s\"\n", name);
+               return 1;
+       }
+
+       env_id++;
+       /*
+        * search if variable with this name already exists
+        */
+       e.key = name;
+       e.data = NULL;
+       hsearch_r(e, FIND, &ep, &env_htab);
+
+       /*
+        * Perform requested checks. Notice how since we are overwriting
+        * a single variable, we need to set H_NOCLEAR
+        */
+       if (env_check_apply(name, ep ? ep->data : NULL, value, H_NOCLEAR)) {
+               debug("check function did not approve, refusing\n");
+               return 1;
+       }
+
        /* Delete only ? */
        if (argc < 3 || argv[2] == NULL) {
-               int rc = hdelete_r(name, &env_htab);
+               int rc = hdelete_r(name, &env_htab, 0);
                return !rc;
        }
 
@@ -337,20 +394,6 @@ int _do_env_set(int flag, int argc, char * const argv[])
                return 1;
        }
 
-       /*
-        * Some variables should be updated when the corresponding
-        * entry in the environment is changed
-        */
-       if (strcmp(argv[1], "loadaddr") == 0) {
-               load_addr = simple_strtoul(argv[2], NULL, 16);
-               return 0;
-       }
-#if defined(CONFIG_CMD_NET)
-       else if (strcmp(argv[1], "bootfile") == 0) {
-               copy_filename(BootFile, argv[2], sizeof(BootFile));
-               return 0;
-       }
-#endif
        return 0;
 }
 
@@ -613,14 +656,41 @@ int envmatch(uchar *s1, int i2)
        return -1;
 }
 
-static int do_env_default(cmd_tbl_t *cmdtp, int flag,
+static int do_env_default(cmd_tbl_t *cmdtp, int __flag,
                          int argc, char * const argv[])
 {
-       if (argc != 2 || strcmp(argv[1], "-f") != 0)
-               return CMD_RET_USAGE;
+       int all = 0, flag = 0;
 
-       set_default_env("## Resetting to default environment\n");
-       return 0;
+       debug("Initial value for argc=%d\n", argc);
+       while (--argc > 0 && **++argv == '-') {
+               char *arg = *argv;
+
+               while (*++arg) {
+                       switch (*arg) {
+                       case 'a':               /* default all */
+                               all = 1;
+                               break;
+                       case 'f':               /* force */
+                               flag |= H_FORCE;
+                               break;
+                       default:
+                               return cmd_usage(cmdtp);
+                       }
+               }
+       }
+       debug("Final value for argc=%d\n", argc);
+       if (all && (argc == 0)) {
+               /* Reset the whole environment */
+               set_default_env("## Resetting to default environment\n");
+               return 0;
+       }
+       if (!all && (argc > 0)) {
+               /* Reset individual variables */
+               set_default_vars(argc, argv);
+               return 0;
+       }
+
+       return cmd_usage(cmdtp);
 }
 
 static int do_env_delete(cmd_tbl_t *cmdtp, int flag,
@@ -872,7 +942,8 @@ static int do_env_import(cmd_tbl_t *cmdtp, int flag,
                addr = (char *)ep->data;
        }
 
-       if (himport_r(&env_htab, addr, size, sep, del ? 0 : H_NOCLEAR) == 0) {
+       if (himport_r(&env_htab, addr, size, sep, del ? 0 : H_NOCLEAR,
+                       0, NULL, 0 /* do_apply */) == 0) {
                error("Environment import failed: errno = %d\n", errno);
                return 1;
        }
@@ -950,15 +1021,20 @@ U_BOOT_CMD(
 #if defined(CONFIG_CMD_ASKENV)
        "ask name [message] [size] - ask for environment variable\nenv "
 #endif
-       "default -f - reset default environment\n"
+       "default [-f] -a - [forcibly] reset default environment\n"
+       "env default [-f] var [...] - [forcibly] reset variable(s) to their default values\n"
 #if defined(CONFIG_CMD_EDITENV)
        "env edit name - edit environment variable\n"
 #endif
+#if defined(CONFIG_CMD_EXPORTENV)
        "env export [-t | -b | -c] [-s size] addr [var ...] - export environment\n"
+#endif
 #if defined(CONFIG_CMD_GREPENV)
        "env grep string [...] - search environment\n"
 #endif
+#if defined(CONFIG_CMD_IMPORTENV)
        "env import [-d] [-t | -b | -c] addr [size] - import environment\n"
+#endif
        "env print [name ...] - print environment\n"
 #if defined(CONFIG_CMD_RUN)
        "env run var [...] - run commands in an environment variable\n"
index d9e990d..3e46c26 100644 (file)
@@ -80,6 +80,9 @@ const uchar default_environment[] = {
 #ifdef CONFIG_ETH5ADDR
        "eth5addr="     MK_STR(CONFIG_ETH5ADDR)         "\0"
 #endif
+#ifdef CONFIG_ETHPRIME
+       "ethprime="     CONFIG_ETHPRIME                 "\0"
+#endif
 #ifdef CONFIG_IPADDR
        "ipaddr="       MK_STR(CONFIG_IPADDR)           "\0"
 #endif
@@ -133,7 +136,9 @@ const uchar default_environment[] = {
        "\0"
 };
 
-struct hsearch_data env_htab;
+struct hsearch_data env_htab = {
+       .apply = env_check_apply,
+};
 
 static uchar __env_get_char_spec(int index)
 {
@@ -175,6 +180,11 @@ const uchar *env_get_addr(int index)
 
 void set_default_env(const char *s)
 {
+       /*
+        * By default, do not apply changes as they will eventually
+        * be applied by someone else
+        */
+       int do_apply = 0;
        if (sizeof(default_environment) > ENV_SIZE) {
                puts("*** Error - default environment is too large\n\n");
                return;
@@ -186,6 +196,14 @@ void set_default_env(const char *s)
                                "using default environment\n\n",
                                s + 1);
                } else {
+                       /*
+                        * This set_to_default was explicitly asked for
+                        * by the user, as opposed to being a recovery
+                        * mechanism.  Therefore we check every single
+                        * variable and apply changes to the system
+                        * right away (e.g. baudrate, console).
+                        */
+                       do_apply = 1;
                        puts(s);
                }
        } else {
@@ -193,12 +211,26 @@ void set_default_env(const char *s)
        }
 
        if (himport_r(&env_htab, (char *)default_environment,
-                       sizeof(default_environment), '\0', 0) == 0)
+                       sizeof(default_environment), '\0', 0,
+                       0, NULL, do_apply) == 0)
                error("Environment import failed: errno = %d\n", errno);
 
        gd->flags |= GD_FLG_ENV_READY;
 }
 
+
+/* [re]set individual variables to their value in the default environment */
+int set_default_vars(int nvars, char * const vars[])
+{
+       /*
+        * Special use-case: import from default environment
+        * (and use \0 as a separator)
+        */
+       return himport_r(&env_htab, (const char *)default_environment,
+                               sizeof(default_environment), '\0', H_NOCLEAR,
+                               nvars, vars, 1 /* do_apply */);
+}
+
 /*
  * Check if CRC is valid and (if yes) import the environment.
  * Note that "buf" may or may not be aligned.
@@ -218,7 +250,8 @@ int env_import(const char *buf, int check)
                }
        }
 
-       if (himport_r(&env_htab, (char *)ep->data, ENV_SIZE, '\0', 0)) {
+       if (himport_r(&env_htab, (char *)ep->data, ENV_SIZE, '\0', 0,
+                       0, NULL, 0 /* do_apply */)) {
                gd->flags |= GD_FLG_ENV_READY;
                return 1;
        }
index e635472..79e8033 100644 (file)
@@ -226,7 +226,7 @@ int saveenv(void)
 int saveenv(void)
 {
        int     ret = 0;
-       ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, sizeof(env_t));
+       ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1);
        ssize_t len;
        char    *res;
        nand_erase_options_t nand_erase_options;
index 963e4f3..74cf075 100644 (file)
@@ -73,6 +73,7 @@ long get_ram_size(long *base, long maxsize)
                }
                return (0);
        }
+       *addr = save[i];
 
        for (cnt = 1; cnt < maxsize / sizeof (long); cnt <<= 1) {
                addr = base + cnt;      /* pointer arith! */
index 1602b5e..c130189 100644 (file)
@@ -228,6 +228,8 @@ NAND locking command (for chips with active LOCKPRE pin)
   "nand unlock [offset] [size]"
   unlock consecutive area (can be called multiple times for different areas)
 
+  "nand unlock.allexcept [offset] [size]"
+  unlock all except specified consecutive area
 
 I have tested the code with board containing 128MiB NAND large page chips
 and 32MiB small page chips.
index 4b5558d..5929a8e 100644 (file)
@@ -11,6 +11,7 @@ easily if here is something they might want to dig for...
 
 Board  Arch    CPU     removed     Commit      last known maintainer/contact
 =============================================================================
+apollon arm     omap24xx -        2012-09-06    Kyungmin Park <kyungmin.park@samsung.com>
 tb0229 mips    mips32  -         2011-12-12
 rmu    powerpc MPC850  fb82fd7   2011-12-07    Wolfgang Denk <wd@denx.de>
 OXC    powerpc MPC8240 309a292   2011-12-07
index 936186f..d0ded48 100644 (file)
 #if defined(CONFIG_MX25) || defined(CONFIG_MX27) || defined(CONFIG_MX35)
 #include <asm/arch/imx-regs.h>
 #endif
+#include <fsl_nfc.h>
 
 #define DRIVER_NAME "mxc_nand"
 
-/*
- * TODO: Use same register defs here as nand_spl mxc nand driver.
- */
-/*
- * Register map and bit definitions for the Freescale NAND Flash Controller
- * present in various i.MX devices.
- *
- * MX31 and MX27 have version 1 which has
- *     4 512 byte main buffers and
- *     4 16 byte spare buffers
- *     to support up to 2K byte pagesize nand.
- *     Reading or writing a 2K page requires 4 FDI/FDO cycles.
- *
- * MX25 has version 1.1 which has
- *     8 512 byte main buffers and
- *     8 64 byte spare buffers
- *     to support up to 4K byte pagesize nand.
- *     Reading or writing a 2K or 4K page requires only 1 FDI/FDO cycle.
- *      Also some of registers are moved and/or changed meaning as seen below.
- */
-#if defined(CONFIG_MX31) || defined(CONFIG_MX27)
-#define MXC_NFC_V1
-#elif defined(CONFIG_MX25) || defined(CONFIG_MX35)
-#define MXC_NFC_V1_1
-#else
-#warning "MXC NFC version not defined"
-#endif
-
-#if defined(MXC_NFC_V1)
-#define NAND_MXC_NR_BUFS               4
-#define NAND_MXC_SPARE_BUF_SIZE                16
-#define NAND_MXC_REG_OFFSET            0xe00
-#define is_mxc_nfc_11()                0
-#elif defined(MXC_NFC_V1_1)
-#define NAND_MXC_NR_BUFS               8
-#define NAND_MXC_SPARE_BUF_SIZE                64
-#define NAND_MXC_REG_OFFSET            0x1e00
-#define is_mxc_nfc_11()                1
-#else
-#error "define CONFIG_NAND_MXC_VXXX to use mtd mxc nand driver"
-#endif
-struct nfc_regs {
-       uint8_t main_area[NAND_MXC_NR_BUFS][0x200];
-       uint8_t spare_area[NAND_MXC_NR_BUFS][NAND_MXC_SPARE_BUF_SIZE];
-       /*
-        * reserved size is offset of nfc registers
-        * minus total main and spare sizes
-        */
-       uint8_t reserved1[NAND_MXC_REG_OFFSET
-               - NAND_MXC_NR_BUFS * (512 + NAND_MXC_SPARE_BUF_SIZE)];
-#if defined(MXC_NFC_V1)
-       uint16_t nfc_buf_size;
-       uint16_t reserved2;
-       uint16_t nfc_buf_addr;
-       uint16_t nfc_flash_addr;
-       uint16_t nfc_flash_cmd;
-       uint16_t nfc_config;
-       uint16_t nfc_ecc_status_result;
-       uint16_t nfc_rsltmain_area;
-       uint16_t nfc_rsltspare_area;
-       uint16_t nfc_wrprot;
-       uint16_t nfc_unlockstart_blkaddr;
-       uint16_t nfc_unlockend_blkaddr;
-       uint16_t nfc_nf_wrprst;
-       uint16_t nfc_config1;
-       uint16_t nfc_config2;
-#elif defined(MXC_NFC_V1_1)
-       uint16_t reserved2[2];
-       uint16_t nfc_buf_addr;
-       uint16_t nfc_flash_addr;
-       uint16_t nfc_flash_cmd;
-       uint16_t nfc_config;
-       uint16_t nfc_ecc_status_result;
-       uint16_t nfc_ecc_status_result2;
-       uint16_t nfc_spare_area_size;
-       uint16_t nfc_wrprot;
-       uint16_t reserved3[2];
-       uint16_t nfc_nf_wrprst;
-       uint16_t nfc_config1;
-       uint16_t nfc_config2;
-       uint16_t reserved4;
-       uint16_t nfc_unlockstart_blkaddr;
-       uint16_t nfc_unlockend_blkaddr;
-       uint16_t nfc_unlockstart_blkaddr1;
-       uint16_t nfc_unlockend_blkaddr1;
-       uint16_t nfc_unlockstart_blkaddr2;
-       uint16_t nfc_unlockend_blkaddr2;
-       uint16_t nfc_unlockstart_blkaddr3;
-       uint16_t nfc_unlockend_blkaddr3;
-#endif
-};
-
-/*
- * Set INT to 0, FCMD to 1, rest to 0 in NFC_CONFIG2 Register
- * for Command operation
- */
-#define NFC_CMD            0x1
-
-/*
- * Set INT to 0, FADD to 1, rest to 0 in NFC_CONFIG2 Register
- * for Address operation
- */
-#define NFC_ADDR           0x2
-
-/*
- * Set INT to 0, FDI to 1, rest to 0 in NFC_CONFIG2 Register
- * for Input operation
- */
-#define NFC_INPUT          0x4
-
-/*
- * Set INT to 0, FDO to 001, rest to 0 in NFC_CONFIG2 Register
- * for Data Output operation
- */
-#define NFC_OUTPUT         0x8
-
-/*
- * Set INT to 0, FD0 to 010, rest to 0 in NFC_CONFIG2 Register
- * for Read ID operation
- */
-#define NFC_ID             0x10
-
-/*
- * Set INT to 0, FDO to 100, rest to 0 in NFC_CONFIG2 Register
- * for Read Status operation
- */
-#define NFC_STATUS         0x20
-
-/*
- * Set INT to 1, rest to 0 in NFC_CONFIG2 Register for Read
- * Status operation
- */
-#define NFC_INT            0x8000
-
-#ifdef MXC_NFC_V1_1
-#define NFC_4_8N_ECC   (1 << 0)
-#else
-#define NFC_4_8N_ECC   0
-#endif
-#define NFC_SP_EN           (1 << 2)
-#define NFC_ECC_EN          (1 << 3)
-#define NFC_BIG             (1 << 5)
-#define NFC_RST             (1 << 6)
-#define NFC_CE              (1 << 7)
-#define NFC_ONE_CYCLE       (1 << 8)
-
 typedef enum {false, true} bool;
 
 struct mxc_nand_host {
-       struct mtd_info         mtd;
-       struct nand_chip        *nand;
-
-       struct nfc_regs __iomem *regs;
-       int                     spare_only;
-       int                     status_request;
-       int                     pagesize_2k;
-       int                     clk_act;
-       uint16_t                col_addr;
-       unsigned int            page_addr;
+       struct mtd_info                 mtd;
+       struct nand_chip                *nand;
+
+       struct fsl_nfc_regs __iomem     *regs;
+       int                             spare_only;
+       int                             status_request;
+       int                             pagesize_2k;
+       int                             clk_act;
+       uint16_t                        col_addr;
+       unsigned int                    page_addr;
 };
 
 static struct mxc_nand_host mxc_host;
@@ -222,7 +77,7 @@ static struct nand_ecclayout nand_hw_eccoob2k = {
        .oobfree = { {2, 4}, {11, 11}, {27, 11}, {43, 11}, {59, 5} },
 };
 #endif
-#elif defined(MXC_NFC_V1_1)
+#elif defined(MXC_NFC_V2_1)
 #ifndef CONFIG_SYS_NAND_LARGEPAGE
 static struct nand_ecclayout nand_hw_eccoob = {
        .eccbytes = 9,
@@ -268,8 +123,7 @@ static int is_16bit_nand(void)
 #elif defined(CONFIG_MX25) || defined(CONFIG_MX35)
 static int is_16bit_nand(void)
 {
-       struct ccm_regs *ccm =
-               (struct ccm_regs *)IMX_CCM_BASE;
+       struct ccm_regs *ccm = (struct ccm_regs *)IMX_CCM_BASE;
 
        if (readl(&ccm->rcsr) & CCM_RCSR_NF_16BIT_SEL)
                return 1;
@@ -304,10 +158,10 @@ static void wait_op_done(struct mxc_nand_host *host, int max_retries,
        uint32_t tmp;
 
        while (max_retries-- > 0) {
-               if (readw(&host->regs->nfc_config2) & NFC_INT) {
-                       tmp = readw(&host->regs->nfc_config2);
+               if (readw(&host->regs->config2) & NFC_INT) {
+                       tmp = readw(&host->regs->config2);
                        tmp  &= ~NFC_INT;
-                       writew(tmp, &host->regs->nfc_config2);
+                       writew(tmp, &host->regs->config2);
                        break;
                }
                udelay(1);
@@ -326,8 +180,8 @@ static void send_cmd(struct mxc_nand_host *host, uint16_t cmd)
 {
        MTDDEBUG(MTD_DEBUG_LEVEL3, "send_cmd(host, 0x%x)\n", cmd);
 
-       writew(cmd, &host->regs->nfc_flash_cmd);
-       writew(NFC_CMD, &host->regs->nfc_config2);
+       writew(cmd, &host->regs->flash_cmd);
+       writew(NFC_CMD, &host->regs->config2);
 
        /* Wait for operation to complete */
        wait_op_done(host, TROP_US_DELAY, cmd);
@@ -342,8 +196,8 @@ static void send_addr(struct mxc_nand_host *host, uint16_t addr)
 {
        MTDDEBUG(MTD_DEBUG_LEVEL3, "send_addr(host, 0x%x)\n", addr);
 
-       writew(addr, &host->regs->nfc_flash_addr);
-       writew(NFC_ADDR, &host->regs->nfc_config2);
+       writew(addr, &host->regs->flash_addr);
+       writew(NFC_ADDR, &host->regs->config2);
 
        /* Wait for operation to complete */
        wait_op_done(host, TROP_US_DELAY, addr);
@@ -359,7 +213,7 @@ static void send_prog_page(struct mxc_nand_host *host, uint8_t buf_id,
        if (spare_only)
                MTDDEBUG(MTD_DEBUG_LEVEL1, "send_prog_page (%d)\n", spare_only);
 
-       if (is_mxc_nfc_11()) {
+       if (is_mxc_nfc_21()) {
                int i;
                /*
                 *  The controller copies the 64 bytes of spare data from
@@ -375,19 +229,19 @@ static void send_prog_page(struct mxc_nand_host *host, uint8_t buf_id,
                }
        }
 
-       writew(buf_id, &host->regs->nfc_buf_addr);
+       writew(buf_id, &host->regs->buf_addr);
 
        /* Configure spare or page+spare access */
        if (!host->pagesize_2k) {
-               uint16_t config1 = readw(&host->regs->nfc_config1);
+               uint16_t config1 = readw(&host->regs->config1);
                if (spare_only)
                        config1 |= NFC_SP_EN;
                else
-                       config1 &= ~(NFC_SP_EN);
-               writew(config1, &host->regs->nfc_config1);
+                       config1 &= ~NFC_SP_EN;
+               writew(config1, &host->regs->config1);
        }
 
-       writew(NFC_INPUT, &host->regs->nfc_config2);
+       writew(NFC_INPUT, &host->regs->config2);
 
        /* Wait for operation to complete */
        wait_op_done(host, TROP_US_DELAY, spare_only);
@@ -402,24 +256,24 @@ static void send_read_page(struct mxc_nand_host *host, uint8_t buf_id,
 {
        MTDDEBUG(MTD_DEBUG_LEVEL3, "send_read_page (%d)\n", spare_only);
 
-       writew(buf_id, &host->regs->nfc_buf_addr);
+       writew(buf_id, &host->regs->buf_addr);
 
        /* Configure spare or page+spare access */
        if (!host->pagesize_2k) {
-               uint32_t config1 = readw(&host->regs->nfc_config1);
+               uint32_t config1 = readw(&host->regs->config1);
                if (spare_only)
                        config1 |= NFC_SP_EN;
                else
                        config1 &= ~NFC_SP_EN;
-               writew(config1, &host->regs->nfc_config1);
+               writew(config1, &host->regs->config1);
        }
 
-       writew(NFC_OUTPUT, &host->regs->nfc_config2);
+       writew(NFC_OUTPUT, &host->regs->config2);
 
        /* Wait for operation to complete */
        wait_op_done(host, TROP_US_DELAY, spare_only);
 
-       if (is_mxc_nfc_11()) {
+       if (is_mxc_nfc_21()) {
                int i;
 
                /*
@@ -442,14 +296,14 @@ static void send_read_id(struct mxc_nand_host *host)
        uint16_t tmp;
 
        /* NANDFC buffer 0 is used for device ID output */
-       writew(0x0, &host->regs->nfc_buf_addr);
+       writew(0x0, &host->regs->buf_addr);
 
        /* Read ID into main buffer */
-       tmp = readw(&host->regs->nfc_config1);
+       tmp = readw(&host->regs->config1);
        tmp &= ~NFC_SP_EN;
-       writew(tmp, &host->regs->nfc_config1);
+       writew(tmp, &host->regs->config1);
 
-       writew(NFC_ID, &host->regs->nfc_config2);
+       writew(NFC_ID, &host->regs->config2);
 
        /* Wait for operation to complete */
        wait_op_done(host, TROP_US_DELAY, 0);
@@ -469,14 +323,14 @@ static uint16_t get_dev_status(struct mxc_nand_host *host)
        /* store the main area1 first word, later do recovery */
        store = readl(main_buf);
        /* NANDFC buffer 1 is used for device status */
-       writew(1, &host->regs->nfc_buf_addr);
+       writew(1, &host->regs->buf_addr);
 
        /* Read status into main buffer */
-       tmp = readw(&host->regs->nfc_config1);
+       tmp = readw(&host->regs->config1);
        tmp &= ~NFC_SP_EN;
-       writew(tmp, &host->regs->nfc_config1);
+       writew(tmp, &host->regs->config1);
 
-       writew(NFC_STATUS, &host->regs->nfc_config2);
+       writew(NFC_STATUS, &host->regs->config2);
 
        /* Wait for operation to complete */
        wait_op_done(host, TROP_US_DELAY, 0);
@@ -501,29 +355,29 @@ static int mxc_nand_dev_ready(struct mtd_info *mtd)
        return 1;
 }
 
-#ifdef CONFIG_MXC_NAND_HWECC
-static void mxc_nand_enable_hwecc(struct mtd_info *mtd, int mode)
-{
-       /*
-        * If HW ECC is enabled, we turn it on during init. There is
-        * no need to enable again here.
-        */
-}
-
-#ifdef MXC_NFC_V1_1
 static void _mxc_nand_enable_hwecc(struct mtd_info *mtd, int on)
 {
        struct nand_chip *nand_chip = mtd->priv;
        struct mxc_nand_host *host = nand_chip->priv;
-       uint16_t tmp = readw(&host->regs->nfc_config1);
+       uint16_t tmp = readw(&host->regs->config1);
 
        if (on)
                tmp |= NFC_ECC_EN;
        else
                tmp &= ~NFC_ECC_EN;
-       writew(tmp, &host->regs->nfc_config1);
+       writew(tmp, &host->regs->config1);
+}
+
+#ifdef CONFIG_MXC_NAND_HWECC
+static void mxc_nand_enable_hwecc(struct mtd_info *mtd, int mode)
+{
+       /*
+        * If HW ECC is enabled, we turn it on during init. There is
+        * no need to enable again here.
+        */
 }
 
+#ifdef MXC_NFC_V2_1
 static int mxc_nand_read_oob_syndrome(struct mtd_info *mtd,
                                      struct nand_chip *chip,
                                      int page, int sndcmd)
@@ -616,7 +470,7 @@ static int mxc_nand_read_page_raw_syndrome(struct mtd_info *mtd,
        size = mtd->oobsize - (oob - chip->oob_poi);
        if (size)
                chip->read_buf(mtd, oob, size);
-       _mxc_nand_enable_hwecc(mtd, 0);
+       _mxc_nand_enable_hwecc(mtd, 1);
 
        return 0;
 }
@@ -799,7 +653,7 @@ static int mxc_nand_correct_data(struct mtd_info *mtd, u_char *dat,
 {
        struct nand_chip *nand_chip = mtd->priv;
        struct mxc_nand_host *host = nand_chip->priv;
-       uint16_t ecc_status = readw(&host->regs->nfc_ecc_status_result);
+       uint32_t ecc_status = readl(&host->regs->ecc_status_result);
        int subpages = mtd->writesize / nand_chip->subpagesize;
        int pg2blk_shift = nand_chip->phys_erase_shift -
                           nand_chip->page_shift;
@@ -832,7 +686,6 @@ static int mxc_nand_correct_data(struct mtd_info *mtd, u_char *dat,
 #define mxc_nand_write_page_syndrome NULL
 #define mxc_nand_write_page_raw_syndrome NULL
 #define mxc_nand_write_oob_syndrome NULL
-#define mxc_nfc_11_nand_correct_data NULL
 
 static int mxc_nand_correct_data(struct mtd_info *mtd, u_char *dat,
                                 u_char *read_ecc, u_char *calc_ecc)
@@ -845,7 +698,7 @@ static int mxc_nand_correct_data(struct mtd_info *mtd, u_char *dat,
         * additional correction.  2-Bit errors cannot be corrected by
         * HW ECC, so we need to return failure
         */
-       uint16_t ecc_status = readw(&host->regs->nfc_ecc_status_result);
+       uint16_t ecc_status = readw(&host->regs->ecc_status_result);
 
        if (((ecc_status & 0x3) == 2) || ((ecc_status >> 2) == 2)) {
                MTDDEBUG(MTD_DEBUG_LEVEL0,
@@ -1208,7 +1061,7 @@ void mxc_nand_command(struct mtd_info *mtd, unsigned command,
        case NAND_CMD_PAGEPROG:
                send_prog_page(host, 0, host->spare_only);
 
-               if (host->pagesize_2k && !is_mxc_nfc_11()) {
+               if (host->pagesize_2k && is_mxc_nfc_1()) {
                        /* data in 4 areas */
                        send_prog_page(host, 1, host->spare_only);
                        send_prog_page(host, 2, host->spare_only);
@@ -1258,7 +1111,7 @@ void mxc_nand_command(struct mtd_info *mtd, unsigned command,
                        send_cmd(host, NAND_CMD_READSTART);
                        /* read for each AREA */
                        send_read_page(host, 0, host->spare_only);
-                       if (!is_mxc_nfc_11()) {
+                       if (is_mxc_nfc_1()) {
                                send_read_page(host, 1, host->spare_only);
                                send_read_page(host, 2, host->spare_only);
                                send_read_page(host, 3, host->spare_only);
@@ -1284,24 +1137,6 @@ void mxc_nand_command(struct mtd_info *mtd, unsigned command,
        }
 }
 
-#ifdef MXC_NFC_V1_1
-static void mxc_setup_config1(void)
-{
-       uint16_t tmp;
-
-       tmp = readw(&host->regs->nfc_config1);
-       tmp |= NFC_ONE_CYCLE;
-       tmp |= NFC_4_8N_ECC;
-       writew(tmp, &host->regs->nfc_config1);
-       if (host->pagesize_2k)
-               writew(64/2, &host->regs->nfc_spare_area_size);
-       else
-               writew(16/2, &host->regs->nfc_spare_area_size);
-}
-#else
-#define mxc_setup_config1()
-#endif
-
 #ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
 
 static u8 bbt_pattern[] = {'B', 'b', 't', '0' };
@@ -1332,8 +1167,9 @@ static struct nand_bbt_descr bbt_mirror_descr = {
 int board_nand_init(struct nand_chip *this)
 {
        struct mtd_info *mtd;
+#ifdef MXC_NFC_V2_1
        uint16_t tmp;
-       int err = 0;
+#endif
 
 #ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
        this->options |= NAND_USE_FLASH_BBT;
@@ -1359,14 +1195,14 @@ int board_nand_init(struct nand_chip *this)
        this->read_buf = mxc_nand_read_buf;
        this->verify_buf = mxc_nand_verify_buf;
 
-       host->regs = (struct nfc_regs __iomem *)CONFIG_MXC_NAND_REGS_BASE;
+       host->regs = (struct fsl_nfc_regs __iomem *)CONFIG_MXC_NAND_REGS_BASE;
        host->clk_act = 1;
 
 #ifdef CONFIG_MXC_NAND_HWECC
        this->ecc.calculate = mxc_nand_calculate_ecc;
        this->ecc.hwctl = mxc_nand_enable_hwecc;
        this->ecc.correct = mxc_nand_correct_data;
-       if (is_mxc_nfc_11()) {
+       if (is_mxc_nfc_21()) {
                this->ecc.mode = NAND_ECC_HW_SYNDROME;
                this->ecc.read_page = mxc_nand_read_page_syndrome;
                this->ecc.read_page_raw = mxc_nand_read_page_raw_syndrome;
@@ -1383,27 +1219,46 @@ int board_nand_init(struct nand_chip *this)
        host->pagesize_2k = 0;
 
        this->ecc.size = 512;
-       tmp = readw(&host->regs->nfc_config1);
-       tmp |= NFC_ECC_EN;
-       writew(tmp, &host->regs->nfc_config1);
+       _mxc_nand_enable_hwecc(mtd, 1);
 #else
        this->ecc.layout = &nand_soft_eccoob;
        this->ecc.mode = NAND_ECC_SOFT;
-       tmp = readw(&host->regs->nfc_config1);
-       tmp &= ~NFC_ECC_EN;
-       writew(tmp, &host->regs->nfc_config1);
+       _mxc_nand_enable_hwecc(mtd, 0);
 #endif
        /* Reset NAND */
        this->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
 
+       /* NAND bus width determines access functions used by upper layer */
+       if (is_16bit_nand())
+               this->options |= NAND_BUSWIDTH_16;
+
+#ifdef CONFIG_SYS_NAND_LARGEPAGE
+       host->pagesize_2k = 1;
+       this->ecc.layout = &nand_hw_eccoob2k;
+#else
+       host->pagesize_2k = 0;
+       this->ecc.layout = &nand_hw_eccoob;
+#endif
+
+#ifdef MXC_NFC_V2_1
+       tmp = readw(&host->regs->config1);
+       tmp |= NFC_ONE_CYCLE;
+       tmp |= NFC_4_8N_ECC;
+       writew(tmp, &host->regs->config1);
+       if (host->pagesize_2k)
+               writew(64/2, &host->regs->spare_area_size);
+       else
+               writew(16/2, &host->regs->spare_area_size);
+#endif
+
        /*
         * preset operation
         * Unlock the internal RAM Buffer
         */
-       writew(0x2, &host->regs->nfc_config);
+       writew(0x2, &host->regs->config);
 
        /* Blocks to be unlocked */
-       writew(0x0, &host->regs->nfc_unlockstart_blkaddr);
+       writew(0x0, &host->regs->unlockstart_blkaddr);
        /* Originally (Freescale LTIB 2.6.21) 0x4000 was written to the
         * unlockend_blkaddr, but the magic 0x4000 does not always work
         * when writing more than some 32 megabytes (on 2k page nands)
@@ -1415,22 +1270,10 @@ int board_nand_init(struct nand_chip *this)
         * This might be NAND chip specific and the i.MX31 datasheet is
         * extremely vague about the semantics of this register.
         */
-       writew(0xFFFF, &host->regs->nfc_unlockend_blkaddr);
+       writew(0xFFFF, &host->regs->unlockend_blkaddr);
 
        /* Unlock Block Command for given address range */
-       writew(0x4, &host->regs->nfc_wrprot);
+       writew(0x4, &host->regs->wrprot);
 
-       /* NAND bus width determines access functions used by upper layer */
-       if (is_16bit_nand())
-               this->options |= NAND_BUSWIDTH_16;
-
-#ifdef CONFIG_SYS_NAND_LARGEPAGE
-       host->pagesize_2k = 1;
-       this->ecc.layout = &nand_hw_eccoob2k;
-#else
-       host->pagesize_2k = 0;
-       this->ecc.layout = &nand_hw_eccoob;
-#endif
-       mxc_setup_config1();
-       return err;
+       return 0;
 }
index bfd668f..390ff90 100644 (file)
@@ -2573,14 +2573,13 @@ static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
        mtd->writesize = le32_to_cpu(p->byte_per_page);
        mtd->erasesize = le32_to_cpu(p->pages_per_block) * mtd->writesize;
        mtd->oobsize = le16_to_cpu(p->spare_bytes_per_page);
-       chip->chipsize = (uint64_t)le32_to_cpu(p->blocks_per_lun) * mtd->erasesize;
+       chip->chipsize = le32_to_cpu(p->blocks_per_lun);
+       chip->chipsize *= (uint64_t)mtd->erasesize * p->lun_count;
        *busw = 0;
        if (le16_to_cpu(p->features) & 1)
                *busw = NAND_BUSWIDTH_16;
 
-       chip->options &= ~NAND_CHIPOPTIONS_MSK;
-       chip->options |= (NAND_NO_READRDY |
-                       NAND_NO_AUTOINCR) & NAND_CHIPOPTIONS_MSK;
+       chip->options |= NAND_NO_READRDY | NAND_NO_AUTOINCR;
 
        return 1;
 }
@@ -2752,8 +2751,7 @@ static const struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
                }
        }
        /* Get chip options, preserve non chip based options */
-       chip->options &= ~NAND_CHIPOPTIONS_MSK;
-       chip->options |= type->options & NAND_CHIPOPTIONS_MSK;
+       chip->options |= type->options;
 
        /* Check if chip is a not a samsung device. Do not clear the
         * options for chips which are not having an extended id.
index 7ed8b18..c4752a7 100644 (file)
@@ -207,12 +207,6 @@ int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts)
  * Support for locking / unlocking operations of some NAND devices
  *****************************************************************************/
 
-#define NAND_CMD_LOCK          0x2a
-#define NAND_CMD_LOCK_TIGHT    0x2c
-#define NAND_CMD_UNLOCK1       0x23
-#define NAND_CMD_UNLOCK2       0x24
-#define NAND_CMD_LOCK_STATUS   0x7a
-
 /**
  * nand_lock: Set all pages of NAND flash chip to the LOCK or LOCK-TIGHT
  *           state
@@ -271,7 +265,6 @@ int nand_lock(struct mtd_info *mtd, int tight)
  *                     >0 lock status:
  *                       bitfield with the following combinations:
  *                       NAND_LOCK_STATUS_TIGHT: page in tight state
- *                       NAND_LOCK_STATUS_LOCK:  page locked
  *                       NAND_LOCK_STATUS_UNLOCK: page unlocked
  *
  */
@@ -300,7 +293,6 @@ int nand_get_lock_status(struct mtd_info *mtd, loff_t offset)
        chip->cmdfunc(mtd, NAND_CMD_LOCK_STATUS, -1, page & chip->pagemask);
 
        ret = chip->read_byte(mtd) & (NAND_LOCK_STATUS_TIGHT
-                                         | NAND_LOCK_STATUS_LOCK
                                          | NAND_LOCK_STATUS_UNLOCK);
 
  out:
@@ -317,18 +309,21 @@ int nand_get_lock_status(struct mtd_info *mtd, loff_t offset)
  * @param start                start byte address
  * @param length       number of bytes to unlock (must be a multiple of
  *                     page size nand->writesize)
+ * @param allexcept    if set, unlock everything not selected
  *
  * @return             0 on success, -1 in case of error
  */
-int nand_unlock(struct mtd_info *mtd, ulong start, ulong length)
+int nand_unlock(struct mtd_info *mtd, loff_t start, size_t length,
+       int allexcept)
 {
        int ret = 0;
        int chipnr;
        int status;
        int page;
        struct nand_chip *chip = mtd->priv;
-       printf ("nand_unlock: start: %08x, length: %d!\n",
-               (int)start, (int)length);
+
+       debug("nand_unlock%s: start: %08llx, length: %d!\n",
+               allexcept ? " (allexcept)" : "", start, length);
 
        /* select the NAND device */
        chipnr = (int)(start >> chip->chip_shift);
@@ -368,6 +363,15 @@ int nand_unlock(struct mtd_info *mtd, ulong start, ulong length)
 
        /* submit ADDRESS of LAST page to unlock */
        page += (int)(length >> chip->page_shift);
+
+       /*
+        * Page addresses for unlocking are supposed to be block-aligned.
+        * At least some NAND chips use the low bit to indicate that the
+        * page range should be inverted.
+        */
+       if (allexcept)
+               page |= 1;
+
        chip->cmdfunc(mtd, NAND_CMD_UNLOCK2, -1, page & chip->pagemask);
 
        /* call wait ready function */
index 08206c8..3103a74 100644 (file)
@@ -483,7 +483,7 @@ int greth_recv(struct eth_device *dev)
        greth_regs *regs = greth->regs;
        greth_bd *rxbd;
        unsigned int status, len = 0, bad;
-       unsigned char *d;
+       char *d;
        int enable = 0;
        int i;
 
@@ -504,7 +504,7 @@ int greth_recv(struct eth_device *dev)
                        goto done;
                }
 
-               debug("greth_recv: packet 0x%lx, 0x%lx, len: %d\n",
+               debug("greth_recv: packet 0x%x, 0x%x, len: %d\n",
                       (unsigned int)rxbd, status, status & GRETH_BD_LEN);
 
                /* Check status for errors.
@@ -620,7 +620,7 @@ int greth_initialize(bd_t * bis)
 
        greth->regs = (greth_regs *) apbdev.address;
        greth->irq = apbdev.irq;
-       debug("Found GRETH at 0x%lx, irq %d\n", greth->regs, greth->irq);
+       debug("Found GRETH at %p, irq %d\n", greth->regs, greth->irq);
        dev->priv = (void *)greth;
        dev->iobase = (unsigned int)greth->regs;
        dev->init = greth_init;
@@ -652,7 +652,7 @@ int greth_initialize(bd_t * bis)
        /* initiate PHY, select speed/duplex depending on connected PHY */
        if (greth_init_phy(greth, bis)) {
                /* Failed to init PHY (timedout) */
-               debug("GRETH[0x%08x]: Failed to init PHY\n", greth->regs);
+               debug("GRETH[%p]: Failed to init PHY\n", greth->regs);
                return -1;
        }
 
@@ -681,6 +681,6 @@ int greth_initialize(bd_t * bis)
        /* set and remember MAC address */
        greth_set_hwaddr(greth, addr);
 
-       debug("GRETH[0x%08x]: Initialized successfully\n", greth->regs);
+       debug("GRETH[%p]: Initialized successfully\n", greth->regs);
        return 0;
 }
index f7bb1da..19f6a8c 100644 (file)
@@ -1109,11 +1109,11 @@ rootdir_done:
                        goto exit;
                }
 
-               if (idx >= 0) {
-                       if (!(dentptr->attr & ATTR_DIR))
-                               goto exit;
+               if (isdir && !(dentptr->attr & ATTR_DIR))
+                       goto exit;
+
+               if (idx >= 0)
                        subname = nextname;
-               }
        }
 
        ret = get_contents(mydata, dentptr, buffer, maxsize);
diff --git a/include/configs/apollon.h b/include/configs/apollon.h
deleted file mode 100644 (file)
index b8ca8a8..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * (C) Copyright 2005-2008
- * Samsung Electronics,
- * Kyungmin Park <kyungmin.park@samsung.com>
- *
- * Configuration settings for the 2420 Samsung Apollon board.
- *
- * 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
- */
-#define CONFIG_ARM1136         1 /* This is an arm1136 CPU core */
-#define CONFIG_OMAP            1 /* in a TI OMAP core */
-#define CONFIG_OMAP2420                1 /* which is in a 2420 */
-#define CONFIG_OMAP2420_APOLLON        1
-#define CONFIG_APOLLON         1
-#define CONFIG_APOLLON_PLUS    1 /* If you have apollon plus 1.x */
-
-#define CONFIG_ONENAND_U_BOOT  y
-
-/* Clock config to target*/
-#define PRCM_CONFIG_I          1
-/* #define PRCM_CONFIG_II      1 */
-
-/* Boot method */
-/* uncomment if you use NOR boot */
-/* #define CONFIG_SYS_NOR_BOOT         1 */
-
-/* uncomment if you use NOR on CS3 */
-/* #define CONFIG_SYS_USE_NOR          1 */
-
-#ifdef CONFIG_SYS_NOR_BOOT
-#undef CONFIG_SYS_USE_NOR
-#define CONFIG_SYS_USE_NOR             1
-#endif
-
-/* uncommnet if you want to use UBI */
-#define CONFIG_SYS_USE_UBI
-
-#include <asm/arch/omap2420.h> /* get chip and board defs */
-
-#define        V_SCLK  12000000
-
-/* input clock of PLL */
-/* the OMAP2420 H4 has 12MHz, 13MHz, or 19.2Mhz crystal input */
-#define        CONFIG_SYS_CLK_FREQ     V_SCLK
-
-#define        CONFIG_MISC_INIT_R
-
-#define        CONFIG_CMDLINE_TAG      1       /* enable passing of ATAGs */
-#define        CONFIG_SETUP_MEMORY_TAGS        1
-#define        CONFIG_INITRD_TAG       1
-#define        CONFIG_REVISION_TAG     1
-
-/*
- * Size of malloc() pool
- */
-#define        CONFIG_ENV_SIZE SZ_128K /* Total Size of Environment Sector */
-#define CONFIG_ENV_SIZE_FLEX SZ_256K
-#define        CONFIG_SYS_MALLOC_LEN   (CONFIG_ENV_SIZE + SZ_1M)
-
-/*
- * Hardware drivers
- */
-
-/*
- * SMC91c96 Etherent
- */
-#define        CONFIG_LAN91C96
-#define        CONFIG_LAN91C96_BASE    (APOLLON_CS1_BASE+0x300)
-#define        CONFIG_LAN91C96_EXT_PHY
-
-/*
- * 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   /* 3MHz (1.5MHz*2) */
-#define        CONFIG_SYS_NS16550_COM1 OMAP2420_UART1
-
-/*
- * select serial console configuration
- */
-#define        CONFIG_SERIAL1  1       /* UART1 on H4 */
-
-/* allow to overwrite serial and ethaddr */
-#define        CONFIG_ENV_OVERWRITE
-#define        CONFIG_CONS_INDEX       1
-#define        CONFIG_BAUDRATE         115200
-
-/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
-#include       <config_cmd_default.h>
-
-#define        CONFIG_CMD_DHCP
-#define        CONFIG_CMD_DIAG
-#define        CONFIG_CMD_ONENAND
-
-#ifdef CONFIG_SYS_USE_UBI
-#define        CONFIG_CMD_JFFS2
-#define        CONFIG_CMD_UBI
-#define        CONFIG_RBTREE
-#define CONFIG_MTD_DEVICE              /* needed for mtdparts commands */
-#define CONFIG_MTD_PARTITIONS
-#endif
-
-#undef CONFIG_CMD_SOURCE
-
-#ifndef        CONFIG_SYS_USE_NOR
-# undef        CONFIG_CMD_FLASH
-# undef        CONFIG_CMD_IMLS
-#endif
-
-#define        CONFIG_BOOTP_MASK       CONFIG_BOOTP_DEFAULT
-
-#define        CONFIG_BOOTDELAY        1
-
-#define        CONFIG_NETMASK  255.255.255.0
-#define        CONFIG_IPADDR   192.168.116.25
-#define        CONFIG_SERVERIP 192.168.116.1
-#define        CONFIG_BOOTFILE "uImage"
-#define        CONFIG_ETHADDR  00:0E:99:00:24:20
-
-#ifdef CONFIG_APOLLON_PLUS
-#define CONFIG_SYS_MEM "mem=64M"
-#else
-#define CONFIG_SYS_MEM "mem=128"
-#endif
-
-#ifdef CONFIG_SYS_USE_UBI
-#define CONFIG_SYS_UBI "ubi.mtd=4"
-#else
-#define CONFIG_SYS_UBI ""
-#endif
-
-#define CONFIG_BOOTARGS "root=/dev/nfs rw " CONFIG_SYS_MEM \
-       " console=ttyS0,115200n8" \
-       " ip=192.168.116.25:192.168.116.1:192.168.116.1:255.255.255.0:" \
-       "apollon:eth0:off nfsroot=/tftpboot/nfsroot profile=2 " \
-       CONFIG_SYS_UBI
-
-#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
-       "Image=tftp 0x80008000 Image; go 0x80008000\0"                  \
-       "zImage=tftp 0x80180000 zImage; go 0x80180000\0"                \
-       "uImage=tftp 0x80180000 uImage; bootm 0x80180000\0"             \
-       "uboot=tftp 0x80008000 u-boot.bin; go 0x80008000\0"             \
-       "xloader=tftp 0x80180000 x-load.bin; "                          \
-       " cp.w 0x80180000 0x00000400 0x1000; go 0x00000400\0"           \
-       "syncmode50=mw.w 0x1e442 0xc0c4; mw 0x6800a060 0xe30d1201\0"    \
-       "syncmode=mw.w 0x1e442 0xe0f4; mw 0x6800a060 0xe30d1201\0"      \
-       "norboot=cp32 0x18040000 0x80008000 0x200000; go 0x80008000\0"  \
-       "oneboot=onenand read 0x80008000 0x40000 0x200000; go 0x80008000\0" \
-       "onesyncboot=run syncmode oneboot\0"                            \
-       "updateb=tftp 0x80180000 u-boot-onenand.bin; "                  \
-       " onenand erase 0x0 0x20000; onenand write 0x80180000 0x0 0x20000\0" \
-       "ubi=setenv bootargs ${bootargs} ubi.mtd=4 ${mtdparts}; run uImage\0" \
-       "bootcmd=run uboot\0"
-
-/*
- * Miscellaneous configurable options
- */
-#define        CONFIG_SYS_LONGHELP     /* undef to save memory */
-#define        CONFIG_SYS_PROMPT       "Apollon # "
-#define        CONFIG_SYS_CBSIZE       256     /* Console I/O Buffer Size */
-/* Print Buffer Size */
-#define        CONFIG_SYS_PBSIZE       (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
-#define        CONFIG_SYS_MAXARGS      16      /* max number of command args */
-/* Boot Argument Buffer Size */
-#define        CONFIG_SYS_BARGSIZE     CONFIG_SYS_CBSIZE
-/* memtest works on */
-#define        CONFIG_SYS_MEMTEST_START        (OMAP2420_SDRC_CS0)
-#define        CONFIG_SYS_MEMTEST_END          (OMAP2420_SDRC_CS0+SZ_31M)
-
-/* default load address */
-#define        CONFIG_SYS_LOAD_ADDR    (OMAP2420_SDRC_CS0)
-
-/* The 2420 has 12 GP timers, they can be driven by the SysClk (12/13/19.2)
- * or by 32KHz clk, or from external sig. This rate is divided by a local
- * divisor.
- */
-#define        CONFIG_SYS_TIMERBASE    OMAP2420_GPT2
-#define        CONFIG_SYS_PTV          7       /* 2^(PTV+1) */
-#define        CONFIG_SYS_HZ           ((CONFIG_SYS_CLK_FREQ)/(2 << CONFIG_SYS_PTV))
-
-/*-----------------------------------------------------------------------
- * Physical Memory Map
- */
-#define        CONFIG_NR_DRAM_BANKS    1       /* CS1 may or may not be populated */
-#define        PHYS_SDRAM_1            OMAP2420_SDRC_CS0
-#define        PHYS_SDRAM_1_SIZE       SZ_128M
-#define        PHYS_SDRAM_2            OMAP2420_SDRC_CS1
-
-/*-----------------------------------------------------------------------
- * FLASH and environment organization
- */
-#ifdef CONFIG_SYS_USE_NOR
-/* OneNAND boot, NOR has CS3, But NOR has CS0 when NOR boot */
-# define       CONFIG_SYS_FLASH_BASE           0x18000000
-# define       CONFIG_SYS_MAX_FLASH_BANKS      1
-# define       CONFIG_SYS_MAX_FLASH_SECT       1024
-/*-----------------------------------------------------------------------
- * CFI FLASH driver setup
- */
-/* Flash memory is CFI compliant */
-# define       CONFIG_SYS_FLASH_CFI    1
-# define       CONFIG_FLASH_CFI_DRIVER 1       /* Use drivers/cfi_flash.c */
-/* Use buffered writes (~10x faster) */
-/* #define CONFIG_SYS_FLASH_USE_BUFFER_WRITE 1 */
-/* Use h/w sector protection*/
-# define       CONFIG_SYS_FLASH_PROTECTION     1
-
-#else  /* !CONFIG_SYS_USE_NOR */
-# define       CONFIG_SYS_NO_FLASH     1
-#endif /* CONFIG_SYS_USE_NOR */
-
-/* OneNAND boot, OneNAND has CS0, NOR boot ONeNAND has CS2 */
-#define        CONFIG_SYS_ONENAND_BASE 0x00000000
-#define CONFIG_SYS_MONITOR_LEN         SZ_256K /* U-Boot image size */
-#define        CONFIG_ENV_IS_IN_ONENAND        1
-#define CONFIG_ENV_ADDR                0x00020000
-#define CONFIG_ENV_ADDR_FLEX   0x00040000
-
-#ifdef CONFIG_SYS_USE_UBI
-#define CONFIG_CMD_MTDPARTS
-#define MTDIDS_DEFAULT         "onenand0=onenand"
-#define MTDPARTS_DEFAULT       "mtdparts=onenand:128k(bootloader),"    \
-                                       "128k(params),"                 \
-                                       "2m(kernel),"                   \
-                                       "16m(rootfs),"                  \
-                                       "32m(fs),"                      \
-                                       "-(ubifs)"
-#endif
-
-#define PHYS_SRAM                      0x4020F800
-#define CONFIG_SYS_SDRAM_BASE          PHYS_SDRAM_1
-#define CONFIG_SYS_INIT_SP_ADDR        PHYS_SRAM
-
-#endif /* __CONFIG_H */
index 4350518..027a5dc 100644 (file)
  * NAND FLASH driver setup
  */
 #define CONFIG_NAND_MXC
-#define CONFIG_NAND_MXC_V1_1
 #define CONFIG_MXC_NAND_REGS_BASE      (NFC_BASE_ADDR)
 #define CONFIG_SYS_MAX_NAND_DEVICE     1
 #define CONFIG_SYS_NAND_BASE           (NFC_BASE_ADDR)
index 9bc6bd4..5816152 100644 (file)
  * NAND FLASH driver setup
  */
 #define CONFIG_NAND_MXC
-#define CONFIG_NAND_MXC_V1_1
 #define CONFIG_MXC_NAND_REGS_BASE      (NFC_BASE_ADDR)
 #define CONFIG_SYS_MAX_NAND_DEVICE     1
 #define CONFIG_SYS_NAND_BASE           (NFC_BASE_ADDR)
index c8a49bb..71b1d32 100644 (file)
 
 /* NAND */
 #define CONFIG_NAND_MXC
-#define CONFIG_NAND_MXC_V1_1
 #define CONFIG_MXC_NAND_REGS_BASE      (0xBB000000)
 #define CONFIG_SYS_MAX_NAND_DEVICE     1
 #define CONFIG_SYS_NAND_BASE           (0xBB000000)
index ae3f7b6..e8ab703 100644 (file)
@@ -181,9 +181,21 @@ void env_crc_update(void);
 /* [re]set to the default environment */
 void set_default_env(const char *s);
 
+/* [re]set individual variables to their value in the default environment */
+int set_default_vars(int nvars, char * const vars[]);
+
 /* Import from binary representation into hash table */
 int env_import(const char *buf, int check);
 
+/*
+ * Check if variable "name" can be changed from oldval to newval,
+ * and if so, apply the changes (e.g. baudrate).
+ * When (flag & H_FORCE) is set, it does not print out any error
+ * message and forces overwriting of write-once variables.
+ */
+int env_check_apply(const char *name, const char *oldval,
+                       const char *newval, int flag);
+
 #endif /* DO_DEPS_ONLY */
 
 #endif /* _ENVIRONMENT_H_ */
index 279aaa5..ff537b4 100644 (file)
 #define __FSL_NFC_H
 
 /*
- * TODO: Use same register defs for nand_spl mxc nand driver
- * and mtd mxc nand driver.
+ * Register map and bit definitions for the Freescale NAND Flash Controller
+ * present in various i.MX devices.
  *
- * Register map and bit definitions for the Freescale NAND Flash
- * Controller present in various i.MX devices.
+ * MX31 and MX27 have version 1, which has:
+ *     4 512-byte main buffers and
+ *     4 16-byte spare buffers
+ *     to support up to 2K byte pagesize nand.
+ *     Reading or writing a 2K page requires 4 FDI/FDO cycles.
  *
- * MX31 and MX27 have version 1 which has
- *     4 512 byte main buffers and
- *     4 16 byte spare buffers
- *     to support up to 2K byte pagesize nand.
- *     Reading or writing a 2K page requires 4 FDI/FDO cycles.
- *
- * MX25 has version 1.1 which has
- *     8 512 byte main buffers and
- *     8 64 byte spare buffers
- *     to support up to 4K byte pagesize nand.
- *     Reading or writing a 2K or 4K page requires only 1 FDI/FDO cycle.
- *      Also some of registers are moved and/or changed meaning as seen below.
+ * MX25 and MX35 have version 2.1, which has:
+ *     8 512-byte main buffers and
+ *     8 64-byte spare buffers
+ *     to support up to 4K byte pagesize nand.
+ *     Reading or writing a 2K or 4K page requires only 1 FDI/FDO cycle.
+ *     Also some of registers are moved and/or changed meaning as seen below.
  */
-#if defined(CONFIG_MX31) || defined(CONFIG_MX27)
+#if defined(CONFIG_MX27) || defined(CONFIG_MX31)
 #define MXC_NFC_V1
-#elif defined(CONFIG_MX25)
-#define MXC_NFC_V1_1
+#define is_mxc_nfc_1()         1
+#define is_mxc_nfc_21()                0
+#elif defined(CONFIG_MX25) || defined(CONFIG_MX35)
+#define MXC_NFC_V2_1
+#define is_mxc_nfc_1()         0
+#define is_mxc_nfc_21()                1
 #else
-#warning "MXC NFC version not defined"
+#error "MXC NFC implementation not supported"
 #endif
 
 #if defined(MXC_NFC_V1)
 #define NAND_MXC_NR_BUFS               4
 #define NAND_MXC_SPARE_BUF_SIZE                16
 #define NAND_MXC_REG_OFFSET            0xe00
-#define NAND_MXC_2K_MULTI_CYCLE                1
-#elif defined(MXC_NFC_V1_1)
+#define NAND_MXC_2K_MULTI_CYCLE
+#elif defined(MXC_NFC_V2_1)
 #define NAND_MXC_NR_BUFS               8
 #define NAND_MXC_SPARE_BUF_SIZE                64
 #define NAND_MXC_REG_OFFSET            0x1e00
-#else
-#error "define CONFIG_NAND_MXC_VXXX to use the mxc spl_nand driver"
 #endif
 
 struct fsl_nfc_regs {
-       u32 main_area[NAND_MXC_NR_BUFS][512/4];
-       u32 spare_area[NAND_MXC_NR_BUFS][NAND_MXC_SPARE_BUF_SIZE/4];
+       u8 main_area[NAND_MXC_NR_BUFS][0x200];
+       u8 spare_area[NAND_MXC_NR_BUFS][NAND_MXC_SPARE_BUF_SIZE];
        /*
         * reserved size is offset of nfc registers
         * minus total main and spare sizes
@@ -74,44 +73,43 @@ struct fsl_nfc_regs {
        u8 reserved1[NAND_MXC_REG_OFFSET
                - NAND_MXC_NR_BUFS * (512 + NAND_MXC_SPARE_BUF_SIZE)];
 #if defined(MXC_NFC_V1)
-       u16 bufsiz;
+       u16 buf_size;
        u16 reserved2;
-       u16 buffer_address;
-       u16 flash_add;
+       u16 buf_addr;
+       u16 flash_addr;
        u16 flash_cmd;
-       u16 configuration;
+       u16 config;
        u16 ecc_status_result;
-       u16 ecc_rslt_main_area;
-       u16 ecc_rslt_spare_area;
-       u16 nf_wr_prot;
-       u16 unlock_start_blk_add;
-       u16 unlock_end_blk_add;
-       u16 nand_flash_wr_pr_st;
-       u16 nand_flash_config1;
-       u16 nand_flash_config2;
-#elif defined(MXC_NFC_V1_1)
+       u16 rsltmain_area;
+       u16 rsltspare_area;
+       u16 wrprot;
+       u16 unlockstart_blkaddr;
+       u16 unlockend_blkaddr;
+       u16 nf_wrprst;
+       u16 config1;
+       u16 config2;
+#elif defined(MXC_NFC_V2_1)
        u16 reserved2[2];
-       u16 buffer_address;
-       u16 flash_add;
+       u16 buf_addr;
+       u16 flash_addr;
        u16 flash_cmd;
-       u16 configuration;
-       u16 ecc_status_result;
-       u16 ecc_status_result2;
+       u16 config;
+       u32 ecc_status_result;
        u16 spare_area_size;
-       u16 nf_wr_prot;
+       u16 wrprot;
        u16 reserved3[2];
-       u16 nand_flash_wr_pr_st;
-       u16 nand_flash_config1;
-       u16 nand_flash_config2;
+       u16 nf_wrprst;
+       u16 config1;
+       u16 config2;
        u16 reserved4;
-       u16 unlock_start_blk_add0;
-       u16 unlock_end_blk_add0;
-       u16 unlock_start_blk_add1;
-       u16 unlock_end_blk_add1;
-       u16 unlock_start_blk_add2;
-       u16 unlock_end_blk_add2;
-       u16 unlock_start_blk_add3;
-       u16 unlock_end_blk_add3;
+       u16 unlockstart_blkaddr;
+       u16 unlockend_blkaddr;
+       u16 unlockstart_blkaddr1;
+       u16 unlockend_blkaddr1;
+       u16 unlockstart_blkaddr2;
+       u16 unlockend_blkaddr2;
+       u16 unlockstart_blkaddr3;
+       u16 unlockend_blkaddr3;
 #endif
 };
 
@@ -157,7 +155,7 @@ struct fsl_nfc_regs {
  */
 #define NFC_INT                0x8000
 
-#ifdef MXC_NFC_V1_1
+#ifdef MXC_NFC_V2_1
 #define NFC_4_8N_ECC   (1 << 0)
 #endif
 #define NFC_SP_EN      (1 << 2)
@@ -167,5 +165,6 @@ struct fsl_nfc_regs {
 #define NFC_RST                (1 << 6)
 #define NFC_CE         (1 << 7)
 #define NFC_ONE_CYCLE  (1 << 8)
+#define NFC_FP_INT     (1 << 11)
 
 #endif /* __FSL_NFC_H */
index 82704de..c06866b 100644 (file)
@@ -85,8 +85,10 @@ extern void nand_wait_ready(struct mtd_info *mtd);
 #define NAND_CMD_RESET         0xff
 
 #define NAND_CMD_LOCK          0x2a
+#define NAND_CMD_LOCK_TIGHT    0x2c
 #define NAND_CMD_UNLOCK1       0x23
 #define NAND_CMD_UNLOCK2       0x24
+#define NAND_CMD_LOCK_STATUS   0x7a
 
 /* Extended commands for large page devices */
 #define NAND_CMD_READSTART     0x30
@@ -205,9 +207,6 @@ typedef enum {
 #define NAND_SUBPAGE_READ(chip) ((chip->ecc.mode == NAND_ECC_SOFT) \
                                        && (chip->page_shift > 9))
 
-/* Mask to zero out the chip options, which come from the id table */
-#define NAND_CHIPOPTIONS_MSK   (0x0000ffff & ~NAND_NO_AUTOINCR)
-
 /* Non chip related options */
 /*
  * Use a flash based bad block table. OOB identifier is saved in OOB area.
index c554c55..bbe28b2 100644 (file)
@@ -141,11 +141,11 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
 int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts);
 
 #define NAND_LOCK_STATUS_TIGHT 0x01
-#define NAND_LOCK_STATUS_LOCK  0x02
 #define NAND_LOCK_STATUS_UNLOCK 0x04
 
-int nand_lock( nand_info_t *meminfo, int tight );
-int nand_unlock( nand_info_t *meminfo, ulong start, ulong length );
+int nand_lock(nand_info_t *meminfo, int tight);
+int nand_unlock(nand_info_t *meminfo, loff_t start, size_t length,
+       int allexcept);
 int nand_get_lock_status(nand_info_t *meminfo, loff_t offset);
 
 int nand_spl_load_image(uint32_t offs, unsigned int size, void *dst);
index ef53edb..93e1cbc 100644 (file)
@@ -57,13 +57,23 @@ struct hsearch_data {
        struct _ENTRY *table;
        unsigned int size;
        unsigned int filled;
+/*
+ * Callback function which will check whether the given change for variable
+ * "name" from "oldval" to "newval" may be applied or not, and possibly apply
+ * such change.
+ * When (flag & H_FORCE) is set, it shall not print out any error message and
+ * shall force overwriting of write-once variables.
+.* Must return 0 for approval, 1 for denial.
+ */
+       int (*apply)(const char *name, const char *oldval,
+                       const char *newval, int flag);
 };
 
 /* Create a new hashing table which will at most contain NEL elements.  */
 extern int hcreate_r(size_t __nel, struct hsearch_data *__htab);
 
 /* Destroy current internal hashing table.  */
-extern void hdestroy_r(struct hsearch_data *__htab);
+extern void hdestroy_r(struct hsearch_data *__htab, int do_apply);
 
 /*
  * Search for entry matching ITEM.key in internal hash table.  If
@@ -88,17 +98,25 @@ extern int hstrstr_r(const char *__match, int __last_idx, ENTRY ** __retval,
                    struct hsearch_data *__htab);
 
 /* Search and delete entry matching ITEM.key in internal hash table. */
-extern int hdelete_r(const char *__key, struct hsearch_data *__htab);
+extern int hdelete_r(const char *__key, struct hsearch_data *__htab,
+                       int do_apply);
 
 extern ssize_t hexport_r(struct hsearch_data *__htab,
                     const char __sep, char **__resp, size_t __size,
                     int argc, char * const argv[]);
 
+/*
+ * nvars: length of vars array
+ * vars: array of strings (variable names) to import (nvars == 0 means all)
+ * do_apply: whether to call callback function to check the new argument,
+ * and possibly apply changes (false means accept everything)
+ */
 extern int himport_r(struct hsearch_data *__htab,
                     const char *__env, size_t __size, const char __sep,
-                    int __flag);
+                    int __flag, int nvars, char * const vars[], int do_apply);
 
 /* Flags for himport_r() */
-#define        H_NOCLEAR       1       /* do not clear hash table before importing */
+#define        H_NOCLEAR       (1 << 0) /* do not clear hash table before importing */
+#define        H_FORCE         (1 << 1) /* overwrite read-only/write-once variables */
 
 #endif /* search.h */
index abd61c8..670a704 100644 (file)
@@ -142,7 +142,7 @@ int hcreate_r(size_t nel, struct hsearch_data *htab)
  * be freed and the local static variable can be marked as not used.
  */
 
-void hdestroy_r(struct hsearch_data *htab)
+void hdestroy_r(struct hsearch_data *htab, int do_apply)
 {
        int i;
 
@@ -156,7 +156,10 @@ void hdestroy_r(struct hsearch_data *htab)
        for (i = 1; i <= htab->size; ++i) {
                if (htab->table[i].used > 0) {
                        ENTRY *ep = &htab->table[i].entry;
-
+                       if (do_apply && htab->apply != NULL) {
+                               /* deletion is always forced */
+                               htab->apply(ep->key, ep->data, NULL, H_FORCE);
+                       }
                        free((void *)ep->key);
                        free(ep->data);
                }
@@ -401,7 +404,7 @@ int hsearch_r(ENTRY item, ACTION action, ENTRY ** retval,
  * do that.
  */
 
-int hdelete_r(const char *key, struct hsearch_data *htab)
+int hdelete_r(const char *key, struct hsearch_data *htab, int do_apply)
 {
        ENTRY e, *ep;
        int idx;
@@ -417,7 +420,8 @@ int hdelete_r(const char *key, struct hsearch_data *htab)
 
        /* free used ENTRY */
        debug("hdelete: DELETING key \"%s\"\n", key);
-
+       if (do_apply && htab->apply != NULL)
+               htab->apply(ep->key, ep->data, NULL, H_FORCE);
        free((void *)ep->key);
        free(ep->data);
        htab->table[idx].used = -1;
@@ -603,6 +607,34 @@ ssize_t hexport_r(struct hsearch_data *htab, const char sep,
  * himport()
  */
 
+/*
+ * Check whether variable 'name' is amongst vars[],
+ * and remove all instances by setting the pointer to NULL
+ */
+static int drop_var_from_set(const char *name, int nvars, char * vars[])
+{
+       int i = 0;
+       int res = 0;
+
+       /* No variables specified means process all of them */
+       if (nvars == 0)
+               return 1;
+
+       for (i = 0; i < nvars; i++) {
+               if (vars[i] == NULL)
+                       continue;
+               /* If we found it, delete all of them */
+               if (!strcmp(name, vars[i])) {
+                       vars[i] = NULL;
+                       res = 1;
+               }
+       }
+       if (!res)
+               debug("Skipping non-listed variable %s\n", name);
+
+       return res;
+}
+
 /*
  * Import linearized data into hash table.
  *
@@ -639,9 +671,12 @@ ssize_t hexport_r(struct hsearch_data *htab, const char sep,
  */
 
 int himport_r(struct hsearch_data *htab,
-             const char *env, size_t size, const char sep, int flag)
+               const char *env, size_t size, const char sep, int flag,
+               int nvars, char * const vars[], int do_apply)
 {
        char *data, *sp, *dp, *name, *value;
+       char *localvars[nvars];
+       int i;
 
        /* Test for correct arguments.  */
        if (htab == NULL) {
@@ -658,12 +693,16 @@ int himport_r(struct hsearch_data *htab,
        memcpy(data, env, size);
        dp = data;
 
+       /* make a local copy of the list of variables */
+       if (nvars)
+               memcpy(localvars, vars, sizeof(vars[0]) * nvars);
+
        if ((flag & H_NOCLEAR) == 0) {
                /* Destroy old hash table if one exists */
                debug("Destroy Hash Table: %p table = %p\n", htab,
                       htab->table);
                if (htab->table)
-                       hdestroy_r(htab);
+                       hdestroy_r(htab, do_apply);
        }
 
        /*
@@ -726,8 +765,10 @@ int himport_r(struct hsearch_data *htab,
                        *dp++ = '\0';   /* terminate name */
 
                        debug("DELETE CANDIDATE: \"%s\"\n", name);
+                       if (!drop_var_from_set(name, nvars, localvars))
+                               continue;
 
-                       if (hdelete_r(name, htab) == 0)
+                       if (hdelete_r(name, htab, do_apply) == 0)
                                debug("DELETE ERROR ##############################\n");
 
                        continue;
@@ -743,10 +784,32 @@ int himport_r(struct hsearch_data *htab,
                *sp++ = '\0';   /* terminate value */
                ++dp;
 
+               /* Skip variables which are not supposed to be processed */
+               if (!drop_var_from_set(name, nvars, localvars))
+                       continue;
+
                /* enter into hash table */
                e.key = name;
                e.data = value;
 
+               /* if there is an apply function, check what it has to say */
+               if (do_apply && htab->apply != NULL) {
+                       debug("searching before calling cb function"
+                               " for  %s\n", name);
+                       /*
+                        * Search for variable in existing env, so to pass
+                        * its previous value to the apply callback
+                        */
+                       hsearch_r(e, FIND, &rv, htab);
+                       debug("previous value was %s\n", rv ? rv->data : "");
+                       if (htab->apply(name, rv ? rv->data : NULL,
+                               value, flag)) {
+                               debug("callback function refused to set"
+                                       " variable %s, skipping it!\n", name);
+                               continue;
+                       }
+               }
+
                hsearch_r(e, ENTER, &rv, htab);
                if (rv == NULL) {
                        printf("himport_r: can't insert \"%s=%s\" into hash table\n",
@@ -762,6 +825,24 @@ int himport_r(struct hsearch_data *htab,
        debug("INSERT: free(data = %p)\n", data);
        free(data);
 
+       /* process variables which were not considered */
+       for (i = 0; i < nvars; i++) {
+               if (localvars[i] == NULL)
+                       continue;
+               /*
+                * All variables which were not deleted from the variable list
+                * were not present in the imported env
+                * This could mean two things:
+                * a) if the variable was present in current env, we delete it
+                * b) if the variable was not present in current env, we notify
+                *    it might be a typo
+                */
+               if (hdelete_r(localvars[i], htab, do_apply) == 0)
+                       printf("WARNING: '%s' neither in running nor in imported env!\n", localvars[i]);
+               else
+                       printf("WARNING: '%s' not in imported env, deleting it!\n", localvars[i]);
+       }
+
        debug("INSERT: done\n");
        return 1;               /* everything OK */
 }
index d6b0d9b..a40c998 100644 (file)
@@ -36,50 +36,58 @@ static void nfc_wait_ready(void)
 {
        uint32_t tmp;
 
-       while (!(readw(&nfc->nand_flash_config2) & NFC_INT))
+       while (!(readw(&nfc->config2) & NFC_INT))
                ;
 
        /* Reset interrupt flag */
-       tmp = readw(&nfc->nand_flash_config2);
+       tmp = readw(&nfc->config2);
        tmp &= ~NFC_INT;
-       writew(tmp, &nfc->nand_flash_config2);
+       writew(tmp, &nfc->config2);
 }
 
-void nfc_nand_init(void)
+static void nfc_nand_init(void)
 {
-#if defined(MXC_NFC_V1_1)
-       int ecc_per_page  = CONFIG_SYS_NAND_PAGE_SIZE / 512;
+#if defined(MXC_NFC_V2_1)
+       int ecc_per_page = CONFIG_SYS_NAND_PAGE_SIZE / 512;
        int config1;
 
        writew(CONFIG_SYS_NAND_SPARE_SIZE / 2, &nfc->spare_area_size);
 
        /* unlocking RAM Buff */
-       writew(0x2, &nfc->configuration);
+       writew(0x2, &nfc->config);
 
        /* hardware ECC checking and correct */
-       config1 = readw(&nfc->nand_flash_config1) | NFC_ECC_EN | 0x800;
+       config1 = readw(&nfc->config1) | NFC_ECC_EN | NFC_INT_MSK |
+                       NFC_ONE_CYCLE | NFC_FP_INT;
        /*
         * if spare size is larger that 16 bytes per 512 byte hunk
         * then use 8 symbol correction instead of 4
         */
-       if ((CONFIG_SYS_NAND_SPARE_SIZE / ecc_per_page) > 16)
+       if (CONFIG_SYS_NAND_SPARE_SIZE / ecc_per_page > 16)
                config1 &= ~NFC_4_8N_ECC;
        else
                config1 |= NFC_4_8N_ECC;
-       writew(config1, &nfc->nand_flash_config1);
+       writew(config1, &nfc->config1);
 #elif defined(MXC_NFC_V1)
        /* unlocking RAM Buff */
-       writew(0x2, &nfc->configuration);
+       writew(0x2, &nfc->config);
 
        /* hardware ECC checking and correct */
-       writew(NFC_ECC_EN, &nfc->nand_flash_config1);
+       writew(NFC_ECC_EN | NFC_INT_MSK, &nfc->config1);
 #endif
 }
 
 static void nfc_nand_command(unsigned short command)
 {
        writew(command, &nfc->flash_cmd);
-       writew(NFC_CMD, &nfc->nand_flash_config2);
+       writew(NFC_CMD, &nfc->config2);
+       nfc_wait_ready();
+}
+
+static void nfc_nand_address(unsigned short address)
+{
+       writew(address, &nfc->flash_addr);
+       writew(NFC_ADDR, &nfc->config2);
        nfc_wait_ready();
 }
 
@@ -87,58 +95,43 @@ static void nfc_nand_page_address(unsigned int page_address)
 {
        unsigned int page_count;
 
-       writew(0x00, &nfc->flash_add);
-       writew(NFC_ADDR, &nfc->nand_flash_config2);
-       nfc_wait_ready();
+       nfc_nand_address(0x00);
 
        /* code only for large page flash */
-       if (CONFIG_SYS_NAND_PAGE_SIZE > 512) {
-               writew(0x00, &nfc->flash_add);
-               writew(NFC_ADDR, &nfc->nand_flash_config2);
-               nfc_wait_ready();
-       }
+       if (CONFIG_SYS_NAND_PAGE_SIZE > 512)
+               nfc_nand_address(0x00);
 
        page_count = CONFIG_SYS_NAND_SIZE / CONFIG_SYS_NAND_PAGE_SIZE;
 
        if (page_address <= page_count) {
                page_count--; /* transform 0x01000000 to 0x00ffffff */
                do {
-                       writew(page_address & 0xff, &nfc->flash_add);
-                       writew(NFC_ADDR, &nfc->nand_flash_config2);
-                       nfc_wait_ready();
+                       nfc_nand_address(page_address & 0xff);
                        page_address = page_address >> 8;
                        page_count = page_count >> 8;
                } while (page_count);
        }
 
-       writew(0x00, &nfc->flash_add);
-       writew(NFC_ADDR, &nfc->nand_flash_config2);
-       nfc_wait_ready();
+       nfc_nand_address(0x00);
 }
 
 static void nfc_nand_data_output(void)
 {
-       int config1 = readw(&nfc->nand_flash_config1);
 #ifdef NAND_MXC_2K_MULTI_CYCLE
        int i;
 #endif
 
-       config1 |= NFC_ECC_EN | NFC_INT_MSK;
-       writew(config1, &nfc->nand_flash_config1);
-       writew(0, &nfc->buffer_address);
-       writew(NFC_OUTPUT, &nfc->nand_flash_config2);
+       writew(0, &nfc->buf_addr);
+       writew(NFC_OUTPUT, &nfc->config2);
        nfc_wait_ready();
 #ifdef NAND_MXC_2K_MULTI_CYCLE
        /*
         * This NAND controller requires multiple input commands
         * for pages larger than 512 bytes.
         */
-       for (i = 1; i < (CONFIG_SYS_NAND_PAGE_SIZE / 512); i++) {
-               config1 = readw(&nfc->nand_flash_config1);
-               config1 |= NFC_ECC_EN | NFC_INT_MSK;
-               writew(config1, &nfc->nand_flash_config1);
-               writew(i, &nfc->buffer_address);
-               writew(NFC_OUTPUT, &nfc->nand_flash_config2);
+       for (i = 1; i < CONFIG_SYS_NAND_PAGE_SIZE / 512; i++) {
+               writew(i, &nfc->buf_addr);
+               writew(NFC_OUTPUT, &nfc->config2);
                nfc_wait_ready();
        }
 #endif
@@ -146,16 +139,28 @@ static void nfc_nand_data_output(void)
 
 static int nfc_nand_check_ecc(void)
 {
-       return readw(&nfc->ecc_status_result);
+#if defined(MXC_NFC_V1)
+       u16 ecc_status = readw(&nfc->ecc_status_result);
+       return (ecc_status & 0x3) == 2 || (ecc_status >> 2) == 2;
+#elif defined(MXC_NFC_V2_1)
+       u32 ecc_status = readl(&nfc->ecc_status_result);
+       int ecc_per_page = CONFIG_SYS_NAND_PAGE_SIZE / 512;
+       int err_limit = CONFIG_SYS_NAND_SPARE_SIZE / ecc_per_page > 16 ? 8 : 4;
+       int subpages = CONFIG_SYS_NAND_PAGE_SIZE / 512;
+
+       do {
+               if ((ecc_status & 0xf) > err_limit)
+                       return 1;
+               ecc_status >>= 4;
+       } while (--subpages);
+
+       return 0;
+#endif
 }
 
-static int nfc_read_page(unsigned int page_address, unsigned char *buf)
+static void nfc_nand_read_page(unsigned int page_address)
 {
-       int i;
-       u32 *src;
-       u32 *dst;
-
-       writew(0, &nfc->buffer_address); /* read in first 0 buffer */
+       writew(0, &nfc->buf_addr); /* read in first 0 buffer */
        nfc_nand_command(NAND_CMD_READ0);
        nfc_nand_page_address(page_address);
 
@@ -163,15 +168,24 @@ static int nfc_read_page(unsigned int page_address, unsigned char *buf)
                nfc_nand_command(NAND_CMD_READSTART);
 
        nfc_nand_data_output(); /* fill the main buffer 0 */
+}
+
+static int nfc_read_page(unsigned int page_address, unsigned char *buf)
+{
+       int i;
+       u32 *src;
+       u32 *dst;
+
+       nfc_nand_read_page(page_address);
 
        if (nfc_nand_check_ecc())
                return -1;
 
-       src = &nfc->main_area[0][0];
+       src = (u32 *)&nfc->main_area[0][0];
        dst = (u32 *)buf;
 
        /* main copy loop from NAND-buffer to SDRAM memory */
-       for (i = 0; i < (CONFIG_SYS_NAND_PAGE_SIZE / 4); i++) {
+       for (i = 0; i < CONFIG_SYS_NAND_PAGE_SIZE / 4; i++) {
                writel(readl(src), dst);
                src++;
                dst++;
@@ -188,16 +202,9 @@ static int is_badblock(int pagenumber)
 
        /* Check the first two pages for bad block markers */
        for (page = pagenumber; page < pagenumber + 2; page++) {
-               writew(0, &nfc->buffer_address); /* read in first 0 buffer */
-               nfc_nand_command(NAND_CMD_READ0);
-               nfc_nand_page_address(page);
-
-               if (CONFIG_SYS_NAND_PAGE_SIZE > 512)
-                       nfc_nand_command(NAND_CMD_READSTART);
-
-               nfc_nand_data_output(); /* fill the main buffer 0 */
+               nfc_nand_read_page(page);
 
-               src = &nfc->spare_area[0][0];
+               src = (u32 *)&nfc->spare_area[0][0];
 
                /*
                 * IMPORTANT NOTE: The nand flash controller uses a non-
@@ -230,7 +237,7 @@ static int nand_load(unsigned int from, unsigned int size, unsigned char *buf)
        page = from / CONFIG_SYS_NAND_PAGE_SIZE;
        i = 0;
 
-       while (i < (size / CONFIG_SYS_NAND_PAGE_SIZE)) {
+       while (i < size / CONFIG_SYS_NAND_PAGE_SIZE) {
                if (nfc_read_page(page, buf) < 0)
                        return -1;
 
diff --git a/onenand_ipl/board/apollon/Makefile b/onenand_ipl/board/apollon/Makefile
deleted file mode 100644 (file)
index 3bc9920..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-
-include $(TOPDIR)/config.mk
-include $(TOPDIR)/onenand_ipl/board/$(BOARDDIR)/config.mk
-
-LDSCRIPT= $(TOPDIR)/onenand_ipl/board/$(BOARDDIR)/u-boot.onenand.lds
-LDFLAGS        = -Bstatic -T $(onenandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(PLATFORM_LDFLAGS)
-AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_ONENAND_IPL
-CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_ONENAND_IPL
-OBJCFLAGS += --gap-fill=0x00
-
-SOBJS  := low_levelinit.o
-SOBJS  += start.o
-COBJS  := apollon.o
-COBJS  += onenand_read.o
-COBJS  += onenand_boot.o
-
-SRCS   := $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))
-OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
-__OBJS := $(SOBJS) $(COBJS)
-LNDIR  := $(OBJTREE)/onenand_ipl/board/$(BOARDDIR)
-
-onenandobj     := $(OBJTREE)/onenand_ipl/
-
-ALL    = $(onenandobj)onenand-ipl $(onenandobj)onenand-ipl.bin $(onenandobj)onenand-ipl-2k.bin $(onenandobj)onenand-ipl-4k.bin
-
-all:   $(obj).depend $(ALL)
-
-$(onenandobj)onenand-ipl-2k.bin:       $(onenandobj)onenand-ipl
-       $(OBJCOPY) ${OBJCFLAGS} --pad-to=0x800 -O binary $< $@
-
-$(onenandobj)onenand-ipl-4k.bin:       $(onenandobj)onenand-ipl
-       $(OBJCOPY) ${OBJCFLAGS} --pad-to=0x1000 -O binary $< $@
-
-$(onenandobj)onenand-ipl.bin:  $(onenandobj)onenand-ipl
-       $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
-
-$(onenandobj)onenand-ipl:      $(OBJS) $(onenandobj)u-boot.lds
-       cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
-               -Map $@.map -o $@
-
-$(onenandobj)u-boot.lds:       $(LDSCRIPT)
-       $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
-
-# create symbolic links from common files
-
-# from cpu directory
-$(obj)start.S:
-       @rm -f $@
-       ln -s $(SRCTREE)/$(CPUDIR)/start.S $@
-
-# from onenand_ipl directory
-$(obj)onenand_ipl.h:
-       @rm -f $@
-       ln -s $(SRCTREE)/onenand_ipl/onenand_ipl.h $@
-
-$(obj)onenand_boot.c:  $(obj)onenand_ipl.h
-       @rm -f $@
-       ln -s $(SRCTREE)/onenand_ipl/onenand_boot.c $@
-
-$(obj)onenand_read.c:  $(obj)onenand_ipl.h
-       @rm -f $@
-       ln -s $(SRCTREE)/onenand_ipl/onenand_read.c $@
-
-ifneq ($(OBJTREE), $(SRCTREE))
-$(obj)apollon.c:
-       @rm -f $@
-       ln -s $(SRCTREE)/onenand_ipl/board/$(BOARDDIR)/apollon.c $@
-
-$(obj)low_levelinit.S:
-       @rm -f $@
-       ln -s $(SRCTREE)/onenand_ipl/board/$(BOARDDIR)/low_levelinit.S $@
-endif
-
-#########################################################################
-
-$(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/onenand_ipl/board/apollon/apollon.c b/onenand_ipl/board/apollon/apollon.c
deleted file mode 100644 (file)
index 4936e00..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * (C) Copyright 2005-2008 Samsung Electronics
- * Kyungmin Park <kyungmin.park@samsung.com>
- *
- * 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 <asm/arch/mux.h>
-
-#define write_config_reg(reg, value)                                    \
-do {                                                                    \
-       writeb(value, reg);                                             \
-} while (0)
-
-/*****************************************
- * Routine: board_init
- * Description: Early hardware init.
- *****************************************/
-int board_init(void)
-{
-       return 0;
-}
-
-#ifdef CONFIG_SYS_PRINTF
-/* Pin Muxing registers used for UART1 */
-/****************************************
- * Routine: muxSetupUART1  (ostboot)
- * Description: Set up uart1 muxing
- *****************************************/
-static void muxSetupUART1(void)
-{
-       /* UART1_CTS pin configuration, PIN = D21 */
-       write_config_reg(CONTROL_PADCONF_UART1_CTS, 0);
-       /* UART1_RTS pin configuration, PIN = H21 */
-       write_config_reg(CONTROL_PADCONF_UART1_RTS, 0);
-       /* UART1_TX pin configuration, PIN = L20 */
-       write_config_reg(CONTROL_PADCONF_UART1_TX, 0);
-       /* UART1_RX pin configuration, PIN = T21 */
-       write_config_reg(CONTROL_PADCONF_UART1_RX, 0);
-}
-#endif
-
-/**********************************************************
- * Routine: s_init
- * Description: Does early system init of muxing and clocks.
- * - Called at time when only stack is available.
- **********************************************************/
-int s_init(int skip)
-{
-#ifdef CONFIG_SYS_PRINTF
-       muxSetupUART1();
-#endif
-       return 0;
-}
diff --git a/onenand_ipl/board/apollon/config.mk b/onenand_ipl/board/apollon/config.mk
deleted file mode 100644 (file)
index 62956e8..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# (C) Copyright 2005-2008 Samsung Electronics
-# Kyungmin Park <kyungmin.park@samsung.com>
-#
-# Samsung Apollon board with OMAP2420 (ARM1136) cpu
-#
-# Apollon has 1 bank of 128MB mDDR-SDRAM on CS0
-# Physical Address:
-# 8000'0000 (bank0)
-# 8800'0000 (bank1)
-# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
-# (mem base + reserved)
-
-CONFIG_SYS_TEXT_BASE = 0x00000000
diff --git a/onenand_ipl/board/apollon/low_levelinit.S b/onenand_ipl/board/apollon/low_levelinit.S
deleted file mode 100644 (file)
index cab4227..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Board specific setup info
- *
- * (C) Copyright 2005-2008 Samsung Electronics
- * Kyungmin Park <kyungmin.park@samsung.com>
- *
- * Derived from board/omap2420h4/platform.S
- *
- * 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 <config.h>
-#include <asm/arch/omap2420.h>
-#include <asm/arch/mem.h>
-#include <asm/arch/clocks.h>
-
-#define APOLLON_CS0_BASE       0x00000000
-
-#ifdef PRCM_CONFIG_I
-#define SDRC_ACTIM_CTRLA_0_VAL 0x7BA35907
-#define SDRC_ACTIM_CTRLB_0_VAL 0x00000013
-#define SDRC_RFR_CTRL_0_VAL    0x00044C01
-
-/* GPMC */
-#define APOLLON_GPMC_CONFIG1_0 0xe30d1201
-#define APOLLON_GPMC_CONFIG2_0 0x000c1000
-#define APOLLON_GPMC_CONFIG3_0 0x00030400
-#define APOLLON_GPMC_CONFIG4_0 0x0B841006
-#define APOLLON_GPMC_CONFIG5_0 0x020F0C11
-#define APOLLON_GPMC_CONFIG6_0 0x00000000
-#define APOLLON_GPMC_CONFIG7_0 (0x00000e40 | (APOLLON_CS0_BASE >> 24))
-
-#elif defined(PRCM_CONFIG_II)
-#define SDRC_ACTIM_CTRLA_0_VAL 0x4A59B485
-#define SDRC_ACTIM_CTRLB_0_VAL 0x0000000C
-#define SDRC_RFR_CTRL_0_VAL    0x00030001
-
-/* GPMC */
-#define APOLLON_GPMC_CONFIG1_0 0xe30d1201
-#define APOLLON_GPMC_CONFIG2_0 0x00080E81
-#define APOLLON_GPMC_CONFIG3_0 0x00030400
-#define APOLLON_GPMC_CONFIG4_0 0x08041586
-#define APOLLON_GPMC_CONFIG5_0 0x020C090E
-#define APOLLON_GPMC_CONFIG6_0 0x00000000
-#define APOLLON_GPMC_CONFIG7_0 (0x00000e40 | (APOLLON_CS0_BASE >> 24))
-
-#else
-#error "Please configure PRCM schecm"
-#endif
-
-_TEXT_BASE:
-       .word   CONFIG_SYS_TEXT_BASE    /* sdram load addr from config.mk */
-
-.globl lowlevel_init
-lowlevel_init:
-       mov r3, r0     /* save skip information */
-
-       /* Disable watchdog */
-       ldr     r0, =WD2_BASE
-       ldr     r1, =WD_UNLOCK1
-       str     r1, [r0, #WSPR]
-
-       ldr     r1, =WD_UNLOCK2
-       str     r1, [r0, #WSPR]
-
-#ifdef DEBUG_LED
-       /* LED0 OFF */
-       ldr     r0, =0x480000E5         /* ball AA10, mode 3 */
-       mov     r1, #0x0b
-       strb    r1, [r0]
-#endif
-
-       /* Pin muxing for SDRC */
-       mov     r1, #0x00
-       ldr     r0, =0x480000A1         /* ball C12, mode 0 */
-       strb    r1, [r0]
-
-       ldr     r0, =0x48000032         /* ball D11, mode 0 */
-       strb    r1, [r0]
-
-       ldr     r0, =0x480000A3         /* ball B13, mode 0 */
-       strb    r1, [r0]
-
-       /* SDRC setting */
-       ldr     r0, =OMAP2420_SDRC_BASE
-       ldr     r1, =0x00000010
-       str     r1, [r0, #0x10]
-
-       ldr     r1, =0x00000100
-       str     r1, [r0, #0x44]
-
-       /* SDRC CS0 configuration */
-#ifdef CONFIG_APOLLON_PLUS
-       ldr     r1, =0x01702011
-#else
-       ldr     r1, =0x00d04011
-#endif
-       str     r1, [r0, #0x80]
-
-       ldr     r1, =SDRC_ACTIM_CTRLA_0_VAL
-       str     r1, [r0, #0x9C]
-
-       ldr     r1, =SDRC_ACTIM_CTRLB_0_VAL
-       str     r1, [r0, #0xA0]
-
-       ldr     r1, =SDRC_RFR_CTRL_0_VAL
-       str     r1, [r0, #0xA4]
-
-       ldr     r1, =0x00000041
-       str     r1, [r0, #0x70]
-
-       /* Manual command sequence */
-       ldr     r1, =0x00000007
-       str     r1, [r0, #0xA8]
-
-       ldr     r1, =0x00000000
-       str     r1, [r0, #0xA8]
-
-       ldr     r1, =0x00000001
-       str     r1, [r0, #0xA8]
-
-       ldr     r1, =0x00000002
-       str     r1, [r0, #0xA8]
-       str     r1, [r0, #0xA8]
-
-       /*
-        * CS0 SDRC Mode register
-        *   Burst length = 4 - DDR memory
-        *   Serial mode
-        *   CAS latency = 3
-        */
-       ldr     r1, =0x00000032
-       str     r1, [r0, #0x84]
-
-       /* Note: You MUST set EMR values */
-       /* EMR1 & EMR2 */
-       ldr     r1, =0x00000000
-       str     r1, [r0, #0x88]
-       str     r1, [r0, #0x8C]
-
-#ifdef OLD_SDRC_DLLA_CTRL
-       /* SDRC_DLLA_CTRL */
-       ldr     r1, =0x00007306
-       str     r1, [r0, #0x60]
-
-       ldr     r1, =0x00007303
-       str     r1, [r0, #0x60]
-#else
-       /* SDRC_DLLA_CTRL */
-       ldr     r1, =0x00000506
-       str     r1, [r0, #0x60]
-
-       ldr     r1, =0x00000503
-       str     r1, [r0, #0x60]
-#endif
-
-#ifdef __BROKEN_FEATURE__
-       /* SDRC_DLLB_CTRL */
-       ldr     r1, =0x00000506
-       str     r1, [r0, #0x68]
-
-       ldr     r1, =0x00000503
-       str     r1, [r0, #0x68]
-#endif
-
-       /* little delay after init */
-       mov     r2, #0x1800
-1:
-       subs    r2, r2, #0x1
-       bne     1b
-
-       ldr     sp, SRAM_STACK
-       str     ip, [sp]        /* stash old link register */
-       mov     ip, lr          /* save link reg across call */
-       mov     r0, r3          /* pass skip info to s_init */
-
-       bl      s_init          /* go setup pll,mux,memory */
-
-       ldr     ip, [sp]        /* restore save ip */
-       mov     lr, ip          /* restore link reg */
-
-       /* back to arch calling code */
-       mov     pc,     lr
-
-       /* the literal pools origin */
-       .ltorg
-
-SRAM_STACK:
-       .word LOW_LEVEL_SRAM_STACK
diff --git a/onenand_ipl/board/apollon/u-boot.onenand.lds b/onenand_ipl/board/apollon/u-boot.onenand.lds
deleted file mode 100644 (file)
index 721d2f5..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * (C) Copyright 2005-2008 Samsung Electronics
- * Kyungmin Park <kyungmin.park@samsung.com>
- *
- * Derived from X-loader
- *
- * 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
-{
-       . = 0x00000000;
-
-       . = ALIGN(4);
-       .text      :
-       {
-         start.o       (.text)
-         *(.text)
-       }
-
-       . = ALIGN(4);
-       .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
-
-       . = ALIGN(4);
-       .data : { *(.data) }
-
-       . = ALIGN(4);
-       .got : { *(.got) }
-
-       . = ALIGN(4);
-       __bss_start = .;
-       .bss : { *(.bss) . = ALIGN(4); }
-       __bss_end__ = .;
-}
diff --git a/onenand_ipl/onenand_boot.c b/onenand_ipl/onenand_boot.c
deleted file mode 100644 (file)
index 22baebb..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * (C) Copyright 2005-2008 Samsung Electronics
- * Kyungmin Park <kyungmin.park@samsung.com>
- *
- * Derived from x-loader
- *
- * 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 "onenand_ipl.h"
-
-typedef int (init_fnc_t)(void);
-
-void start_oneboot(void)
-{
-       uchar *buf;
-
-       buf = (uchar *) CONFIG_SYS_LOAD_ADDR;
-
-       onenand_read_block(buf);
-
-       ((init_fnc_t *)CONFIG_SYS_LOAD_ADDR)();
-
-       /* should never come here */
-}
-
-void hang(void)
-{
-       for (;;);
-}
diff --git a/onenand_ipl/onenand_ipl.h b/onenand_ipl/onenand_ipl.h
deleted file mode 100644 (file)
index 7ebb3e3..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * (C) Copyright 2005-2008 Samsung Electronics
- * Kyungmin Park <kyungmin.park@samsung.com>
- *
- * 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 _ONENAND_IPL_H
-#define _ONENAND_IPL_H
-
-#include <linux/mtd/onenand_regs.h>
-
-#define onenand_readw(a)        readw(THIS_ONENAND(a))
-#define onenand_writew(v, a)    writew(v, THIS_ONENAND(a))
-
-#define THIS_ONENAND(a)         (CONFIG_SYS_ONENAND_BASE + (a))
-
-#define READ_INTERRUPT()       onenand_readw(ONENAND_REG_INTERRUPT)
-
-extern int (*onenand_read_page)(ulong block, ulong page,
-                               u_char *buf, int pagesize);
-extern int onenand_read_block(unsigned char *buf);
-#endif
diff --git a/onenand_ipl/onenand_read.c b/onenand_ipl/onenand_read.c
deleted file mode 100644 (file)
index 8d0df81..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * (C) Copyright 2005-2009 Samsung Electronics
- * Kyungmin Park <kyungmin.park@samsung.com>
- *
- * 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 <asm/io.h>
-#include <asm/string.h>
-
-#include "onenand_ipl.h"
-
-#define onenand_block_address(block)           (block)
-#define onenand_sector_address(page)           (page << 2)
-#define onenand_buffer_address()               ((1 << 3) << 8)
-#define onenand_bufferram_address(block)       (0)
-
-#ifdef __HAVE_ARCH_MEMCPY32
-extern void *memcpy32(void *dest, void *src, int size);
-#endif
-
-int (*onenand_read_page)(ulong block, ulong page, u_char *buf, int pagesize);
-
-/* read a page with ECC */
-static int generic_onenand_read_page(ulong block, ulong page,
-                               u_char * buf, int pagesize)
-{
-       unsigned long *base;
-
-#ifndef __HAVE_ARCH_MEMCPY32
-       unsigned int offset, value;
-       unsigned long *p;
-#endif
-
-       onenand_writew(onenand_block_address(block),
-                       ONENAND_REG_START_ADDRESS1);
-
-       onenand_writew(onenand_bufferram_address(block),
-                       ONENAND_REG_START_ADDRESS2);
-
-       onenand_writew(onenand_sector_address(page),
-                       ONENAND_REG_START_ADDRESS8);
-
-       onenand_writew(onenand_buffer_address(),
-                       ONENAND_REG_START_BUFFER);
-
-       onenand_writew(ONENAND_INT_CLEAR, ONENAND_REG_INTERRUPT);
-
-       onenand_writew(ONENAND_CMD_READ, ONENAND_REG_COMMAND);
-
-#ifndef __HAVE_ARCH_MEMCPY32
-       p = (unsigned long *) buf;
-#endif
-       base = (unsigned long *) (CONFIG_SYS_ONENAND_BASE + ONENAND_DATARAM);
-
-       while (!(READ_INTERRUPT() & ONENAND_INT_READ))
-               continue;
-
-       /* Check for invalid block mark */
-       if (page < 2 && (onenand_readw(ONENAND_SPARERAM) != 0xffff))
-               return 1;
-
-#ifdef __HAVE_ARCH_MEMCPY32
-       /* 32 bytes boundary memory copy */
-       memcpy32(buf, base, pagesize);
-#else
-       for (offset = 0; offset < (pagesize >> 2); offset++) {
-               value = *(base + offset);
-               *p++ = value;
-       }
-#endif
-
-       return 0;
-}
-
-#ifndef CONFIG_ONENAND_START_PAGE
-#define CONFIG_ONENAND_START_PAGE      1
-#endif
-#define ONENAND_PAGES_PER_BLOCK                64
-
-static void onenand_generic_init(int *page_is_4KiB, int *page)
-{
-       int dev_id, density;
-
-       if (onenand_readw(ONENAND_REG_TECHNOLOGY))
-               *page_is_4KiB = 1;
-       dev_id = onenand_readw(ONENAND_REG_DEVICE_ID);
-       density = dev_id >> ONENAND_DEVICE_DENSITY_SHIFT;
-       density &= ONENAND_DEVICE_DENSITY_MASK;
-       if (density >= ONENAND_DEVICE_DENSITY_4Gb &&
-           !(dev_id & ONENAND_DEVICE_IS_DDP))
-               *page_is_4KiB = 1;
-}
-
-/**
- * onenand_read_block - Read CONFIG_SYS_MONITOR_LEN from begining
- *                      of OneNAND, skipping bad blocks
- * @return 0 on success
- */
-int onenand_read_block(unsigned char *buf)
-{
-       int block, nblocks;
-       int page = CONFIG_ONENAND_START_PAGE, offset = 0;
-       int pagesize, erasesize, erase_shift;
-       int page_is_4KiB = 0;
-
-       onenand_read_page = generic_onenand_read_page;
-
-       onenand_generic_init(&page_is_4KiB, &page);
-
-       if (page_is_4KiB) {
-               pagesize = 4096; /* OneNAND has 4KiB pagesize */
-               erase_shift = 18;
-       } else {
-               pagesize = 2048; /* OneNAND has 2KiB pagesize */
-               erase_shift = 17;
-       }
-
-       erasesize = (1 << erase_shift);
-       nblocks = (CONFIG_SYS_MONITOR_LEN + erasesize - 1) >> erase_shift;
-
-       /* NOTE: you must read page from page 1 of block 0 */
-       /* read the block page by page */
-       for (block = 0; block < nblocks; block++) {
-               for (; page < ONENAND_PAGES_PER_BLOCK; page++) {
-                       if (onenand_read_page(block, page, buf + offset,
-                                               pagesize)) {
-                               /* This block is bad. Skip it
-                                * and read next block */
-                               offset -= page * pagesize;
-                               nblocks++;
-                               break;
-                       }
-                       offset += pagesize;
-               }
-               page = 0;
-       }
-
-       return 0;
-}
index 476a5e6..d4cb668 100644 (file)
@@ -135,9 +135,7 @@ $(obj)u-boot-spl.bin:       $(obj)u-boot-spl
        $(OBJCOPY) $(OBJCFLAGS) -O binary $< $@
 
 GEN_UBOOT = \
-       UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) | \
-       sed  -n -e 's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
-       cd $(obj) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) $$UNDEF_SYM $(__START) \
+       cd $(obj) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) $(__START) \
                --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
                -Map u-boot-spl.map -o u-boot-spl
 
index e292d2b..1a2c227 100644 (file)
@@ -203,6 +203,17 @@ static char default_environment[] = {
 #if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0)
        "pcidelay=" MK_STR (CONFIG_PCI_BOOTDELAY) "\0"
 #endif
+#ifdef CONFIG_ENV_VARS_UBOOT_CONFIG
+       "arch=" CONFIG_SYS_ARCH "\0"
+       "cpu=" CONFIG_SYS_CPU "\0"
+       "board=" CONFIG_SYS_BOARD "\0"
+#ifdef CONFIG_SYS_VENDOR
+       "vendor=" CONFIG_SYS_VENDOR "\0"
+#endif
+#ifdef CONFIG_SYS_SOC
+       "soc=" CONFIG_SYS_SOC "\0"
+#endif
+#endif
 #ifdef  CONFIG_EXTRA_ENV_SETTINGS
        CONFIG_EXTRA_ENV_SETTINGS
 #endif