Merge branch 'asm-generic' of git://git.denx.de/u-boot-microblaze
authorWolfgang Denk <wd@denx.de>
Thu, 16 Jul 2009 19:53:15 +0000 (21:53 +0200)
committerWolfgang Denk <wd@denx.de>
Thu, 16 Jul 2009 19:53:15 +0000 (21:53 +0200)
141 files changed:
MAINTAINERS
MAKEALL
Makefile
README
api_examples/.gitignore
api_examples/Makefile
board/amcc/canyonlands/canyonlands.c
board/armltd/versatile/Makefile
board/armltd/versatile/flash.c [deleted file]
board/atmel/at91sam9261ek/at91sam9261ek.c
board/atmel/at91sam9m10g45ek/Makefile [new file with mode: 0644]
board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c [new file with mode: 0644]
board/atmel/at91sam9m10g45ek/config.mk [new file with mode: 0644]
board/atmel/at91sam9m10g45ek/led.c [new file with mode: 0644]
board/bf537-stamp/Makefile
board/bf537-stamp/nand.c [deleted file]
board/davedenx/aria/aria.c
board/davinci/sonata/sonata.c
board/esd/mecp5123/mecp5123.c
board/espt/Makefile [new file with mode: 0644]
board/espt/config.mk [new file with mode: 0644]
board/espt/espt.c [new file with mode: 0644]
board/espt/lowlevel_init.S [new file with mode: 0644]
board/freescale/mpc5121ads/mpc5121ads.c
board/ms7720se/u-boot.lds [deleted file]
board/ms7722se/u-boot.lds [deleted file]
board/ms7750se/u-boot.lds [deleted file]
board/omap3/pandora/pandora.h
board/phytec/pcm030/Makefile [new file with mode: 0644]
board/phytec/pcm030/config.mk [new file with mode: 0644]
board/phytec/pcm030/mt46v32m16-75.h [new file with mode: 0644]
board/phytec/pcm030/pcm030.c [new file with mode: 0644]
board/renesas/MigoR/u-boot.lds [deleted file]
board/renesas/ap325rxa/u-boot.lds [deleted file]
board/renesas/r2dplus/u-boot.lds [deleted file]
board/renesas/r7780mp/u-boot.lds [deleted file]
board/renesas/sh7763rdp/u-boot.lds [deleted file]
board/renesas/sh7785lcr/Makefile
board/renesas/sh7785lcr/lowlevel_init.S
board/renesas/sh7785lcr/u-boot_29bit [deleted file]
board/renesas/sh7785lcr/u-boot_32bit [deleted file]
common/cmd_nand.c
common/cmd_onenand.c
common/cmd_ubi.c
common/cmd_ubifs.c
common/env_nand.c
common/env_onenand.c
cpu/arm926ejs/at91/Makefile
cpu/arm926ejs/at91/at91sam9m10g45_devices.c [new file with mode: 0644]
cpu/arm926ejs/at91/clock.c
cpu/mpc512x/Makefile
cpu/mpc512x/fixed_sdram.c [new file with mode: 0644]
cpu/mpc5xxx/ide.c
cpu/mpc83xx/cpu_init.c
cpu/ppc4xx/44x_spd_ddr2.c
cpu/ppc4xx/4xx_pci.c
cpu/ppc4xx/cpu.c
cpu/ppc4xx/cpu_init.c
cpu/ppc4xx/start.S
cpu/ppc4xx/uic.c
cpu/sh2/u-boot.lds [moved from board/renesas/rsk7203/u-boot.lds with 89% similarity]
cpu/sh3/u-boot.lds [moved from board/mpr2/u-boot.lds with 87% similarity]
cpu/sh4/u-boot.lds [moved from board/renesas/sh7785lcr/u-boot.lds with 90% similarity]
doc/README.at91
doc/README.nand
doc/README.phytec.pcm030 [new file with mode: 0644]
drivers/mtd/cfi_flash.c
drivers/mtd/nand/Makefile
drivers/mtd/nand/davinci_nand.c
drivers/mtd/nand/fsl_elbc_nand.c
drivers/mtd/nand/kirkwood_nand.c [new file with mode: 0644]
drivers/mtd/nand/nand_plat.c [new file with mode: 0644]
drivers/mtd/nand/nand_util.c
drivers/net/macb.c
drivers/usb/host/Makefile
drivers/usb/host/ehci-fsl.c
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ehci-kirkwood.c [new file with mode: 0644]
drivers/usb/musb/musb_core.h
drivers/usb/musb/musb_hcd.c
drivers/usb/musb/musb_hcd.h
include/asm-arm/arch-at91/at91_pmc.h
include/asm-arm/arch-at91/at91sam9_matrix.h
include/asm-arm/arch-at91/at91sam9g45.h [new file with mode: 0644]
include/asm-arm/arch-at91/at91sam9g45_matrix.h [new file with mode: 0644]
include/asm-arm/arch-at91/clk.h
include/asm-arm/arch-at91/hardware.h
include/asm-arm/arch-at91/memory-map.h
include/asm-arm/arch-davinci/nand_defs.h
include/asm-arm/arch-kirkwood/kirkwood.h
include/asm-arm/arch-pxa/pxa-regs.h
include/asm-ppc/immap_512x.h
include/asm-ppc/mpc512x.h [new file with mode: 0644]
include/asm-sh/clk.h [new file with mode: 0644]
include/asm-sh/macro.h
include/common.h
include/configs/HIDDEN_DRAGON.h
include/configs/M5253DEMO.h
include/configs/M5253EVBE.h
include/configs/M54455EVB.h
include/configs/MPC8349ITX.h
include/configs/MPC8536DS.h
include/configs/MPC8544DS.h
include/configs/MPC8572DS.h
include/configs/MPC8610HPCD.h
include/configs/MPC8641HPCN.h
include/configs/MVBLM7.h
include/configs/MigoR.h
include/configs/P2020DS.h
include/configs/ap325rxa.h
include/configs/aria.h
include/configs/at91sam9261ek.h
include/configs/at91sam9m10g45ek.h [new file with mode: 0644]
include/configs/bf537-stamp.h
include/configs/bfin_adi_common.h
include/configs/blackstamp.h
include/configs/canyonlands.h
include/configs/cm-bf561.h
include/configs/espt.h [new file with mode: 0644]
include/configs/mecp5123.h
include/configs/mpc5121ads.h
include/configs/mpc7448hpc2.h
include/configs/mpr2.h
include/configs/ms7720se.h
include/configs/ms7722se.h
include/configs/ms7750se.h
include/configs/pcm030.h [new file with mode: 0644]
include/configs/r2dplus.h
include/configs/r7780mp.h
include/configs/sh7763rdp.h
include/configs/sh7785lcr.h
include/configs/smdk6400.h
include/configs/versatile.h
include/nand.h
include/pci_ids.h
include/usb/ehci-fsl.h
lib_blackfin/Makefile
lib_blackfin/cmd_cache_dump.c [new file with mode: 0644]
lib_sh/time.c
nand_spl/nand_boot.c
sh_config.mk

index 705bac5..575a7ec 100644 (file)
@@ -411,6 +411,10 @@ Andre Schwarz <andre.schwarz@matrix-vision.de>
        mvbc_p          MPC5200
        mvblm7          MPC8343
 
+Jon Smirl <jonsmirl@gmail.com>
+
+       pcm030          MPC5200
+
 Timur Tabi <timur@freescale.com>
 
        MPC8349E-mITX   MPC8349
@@ -547,6 +551,10 @@ Daniel Gorsulowski <daniel.gorsulowski@esd.eu>
 
        meesc           ARM926EJS (AT91SAM9263 SoC)
 
+Sedji Gaouaou<sedji.gaouaou@atmel.com>
+       at91sam9g10ek           ARM926EJS (AT91SAM9G10 SoC)     
+       at91sam9m10g45ek        ARM926EJS (AT91SAM9G45 SoC)
+
 Marius Gröger <mag@sysgo.de>
 
        impa7           ARM720T (EP7211)
@@ -583,6 +591,10 @@ Prakash Kumar <prakash@embedx.com>
 
        cerf250         xscale
 
+Sergey Lapin <slapin@ossfans.org>
+
+       afeb9260        ARM926EJS (AT91SAM9260 SoC)
+
 Guennadi Liakhovetski <g.liakhovetski@gmx.de>
 
        imx31_phycore_eet       i.MX31
@@ -682,10 +694,6 @@ Alex Z
        lart            SA1100
        dnp1110         SA1110
 
-Sergey Lapin <slapin@ossfans.org>
-
-       afeb9260        ARM926EJS (AT91SAM9260 SoC)
-
 -------------------------------------------------------------------------
 
 Unknown / orphaned boards:
@@ -782,14 +790,14 @@ Michal Simek <monstr@monstr.eu>
 #      Board           CPU                                             #
 #########################################################################
 
-Matthias Fuchs <matthias.fuchs@esd-electronics.com>
-
-       TASREG          MCF5249
-
 Hayden Fraser <Hayden.Fraser@freescale.com>
 
        M5253EVBE       mcf52x2
 
+Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+       TASREG          MCF5249
+
 TsiChung Liew <Tsi-Chung.Liew@freescale.com>
 
        M52277EVB       mcf5227x
@@ -862,10 +870,6 @@ Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
        MS7720SE        SH7720
        R0P77850011RL   SH7785
 
-Yusuke Goda <goda.yusuke@renesas.com>
-
-       MIGO-R          SH7722
-
 #########################################################################
 # Blackfin Systems:                                                    #
 #                                                                      #
diff --git a/MAKEALL b/MAKEALL
index 41f1445..020ff73 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -60,6 +60,7 @@ LIST_5xxx="           \
        munices         \
        MVBC_P          \
        o2dnt           \
+       pcm030          \
        pf5200          \
        PM520           \
        TB5200          \
@@ -578,24 +579,26 @@ LIST_ARM_CORTEX_A8="              \
 ## AT91 Systems
 #########################################################################
 
-LIST_at91="            \
-       afeb9260        \
-       at91cap9adk     \
-       at91rm9200dk    \
-       at91rm9200ek    \
-       at91sam9260ek   \
-       at91sam9261ek   \
-       at91sam9263ek   \
-       at91sam9g20ek   \
-       at91sam9rlek    \
-       cmc_pu2         \
-       csb637          \
-       kb9202          \
-       meesc           \
-       mp2usb          \
-       m501sk          \
-       pm9261          \
-       pm9263          \
+LIST_at91="                    \
+       afeb9260                \
+       at91cap9adk             \
+       at91rm9200dk            \
+       at91rm9200ek            \
+       at91sam9260ek           \
+       at91sam9261ek           \
+       at91sam9263ek           \
+       at91sam9g10ek   \
+       at91sam9g20ek           \
+       at91sam9m10g45ek        \
+       at91sam9rlek            \
+       cmc_pu2                 \
+       csb637                  \
+       kb9202                  \
+       meesc                   \
+       mp2usb                  \
+       m501sk                  \
+       pm9261                  \
+       pm9263                  \
 "
 
 #########################################################################
@@ -848,6 +851,7 @@ LIST_sh4="          \
        sh7763rdp       \
        sh7785lcr       \
        ap325rxa        \
+       espt            \
 "
 
 LIST_sh="              \
index 2a06440..090e645 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -352,7 +352,7 @@ GEN_UBOOT = \
 $(obj)u-boot:          depend $(SUBDIRS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT)
                $(GEN_UBOOT)
 ifeq ($(CONFIG_KALLSYMS),y)
-               smap=`$(call SYSTEM_MAP,u-boot) | awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\0"}'` ; \
+               smap=`$(call SYSTEM_MAP,u-boot) | awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \
                $(CC) $(CFLAGS) -DSYSTEM_MAP="\"$${smap}\"" -c common/system_map.c -o $(obj)common/system_map.o
                $(GEN_UBOOT) $(obj)common/system_map.o
 endif
@@ -695,6 +695,15 @@ MVBC_P_config: unconfig
 o2dnt_config:  unconfig
        @$(MKCONFIG) o2dnt ppc mpc5xxx o2dnt
 
+pcm030_config \
+pcm030_LOWBOOT_config: unconfig
+       @ >include/config.h
+       @[ -z "$(findstring LOWBOOT_,$@)" ] || \
+               { echo "TEXT_BASE = 0xFF000000" >$(obj)board/phytec/pcm030/config.tmp ; \
+                 echo "... with LOWBOOT configuration" ; \
+               }
+       @$(MKCONFIG) -a pcm030 ppc mpc5xxx pcm030 phytec
+
 pf5200_config: unconfig
        @$(MKCONFIG) pf5200  ppc mpc5xxx pf5200 esd
 
@@ -2743,12 +2752,22 @@ at91sam9xeek_config     :       unconfig
 at91sam9261ek_nandflash_config \
 at91sam9261ek_dataflash_cs0_config \
 at91sam9261ek_dataflash_cs3_config \
-at91sam9261ek_config   :       unconfig
-       @mkdir -p $(obj)include
+at91sam9261ek_config \
+at91sam9g10ek_nandflash_config \
+at91sam9g10ek_dataflash_cs0_config \
+at91sam9g10ek_dataflash_cs3_config \
+at91sam9g10ek_config   :       unconfig
+       @mkdir -p $(obj)include
+       @if [ "$(findstring 9g10,$@)" ] ; then \
+               echo "#define CONFIG_AT91SAM9G10EK 1"   >>$(obj)include/config.h ; \
+               $(XECHO) "... 9G10 Variant" ; \
+       else \
+               echo "#define CONFIG_AT91SAM9261EK 1"   >>$(obj)include/config.h ; \
+       fi;
        @if [ "$(findstring _nandflash,$@)" ] ; then \
                echo "#define CONFIG_SYS_USE_NANDFLASH 1"       >>$(obj)include/config.h ; \
                $(XECHO) "... with environment variable in NAND FLASH" ; \
-       elif [ "$(findstring dataflash_cs3,$@)" ] ; then \
+       elif [ "$(findstring dataflash_cs0,$@)" ] ; then \
                echo "#define CONFIG_SYS_USE_DATAFLASH_CS3 1"   >>$(obj)include/config.h ; \
                $(XECHO) "... with environment variable in SPI DATAFLASH CS3" ; \
        else \
@@ -2800,6 +2819,31 @@ meesc_config     :       unconfig
 pm9261_config  :       unconfig
        @$(MKCONFIG) $(@:_config=) arm arm926ejs pm9261 ronetix at91
 
+at91sam9m10g45ek_nandflash_config \
+at91sam9m10g45ek_dataflash_config \
+at91sam9m10g45ek_dataflash_cs0_config \
+at91sam9m10g45ek_config \
+at91sam9g45ekes_nandflash_config \
+at91sam9g45ekes_dataflash_config \
+at91sam9g45ekes_dataflash_cs0_config \
+at91sam9g45ekes_config :       unconfig
+       @mkdir -p $(obj)include
+               @if [ "$(findstring 9m10,$@)" ] ; then \
+               echo "#define CONFIG_AT91SAM9M10G45EK 1"        >>$(obj)include/config.h ; \
+               $(XECHO) "... 9M10G45 Variant" ; \
+       else \
+               echo "#define CONFIG_AT91SAM9G45EKES 1" >>$(obj)include/config.h ; \
+       fi;
+
+       @if [ "$(findstring _nandflash,$@)" ] ; then \
+               echo "#define CONFIG_SYS_USE_NANDFLASH 1"       >>$(obj)include/config.h ; \
+               $(XECHO) "... with environment variable in NAND FLASH" ; \
+       else \
+               echo "#define CONFIG_ATMEL_SPI 1"       >>$(obj)include/config.h ; \
+               $(XECHO) "... with environment variable in SPI DATAFLASH CS0" ; \
+       fi;
+       @$(MKCONFIG) -a at91sam9m10g45ek arm arm926ejs at91sam9m10g45ek atmel at91
+
 pm9263_config  :       unconfig
        @$(MKCONFIG) $(@:_config=) arm arm926ejs pm9263 ronetix at91
 
@@ -3529,18 +3573,14 @@ sh7763rdp_config  :   unconfig
 xtract_sh7785lcr = $(subst _32bit,,$(subst _config,,$1))
 sh7785lcr_32bit_config \
 sh7785lcr_config  :   unconfig
-       @ >include/config.h
-       @echo "#define CONFIG_SH7785LCR 1" >> include/config.h
+       @mkdir -p $(obj)include
+       @mkdir -p $(obj)board/renesas/sh7785lcr
+       @echo "#define CONFIG_SH7785LCR 1" > $(obj)include/config.h
        @if [ "$(findstring 32bit, $@)" ] ; then \
                echo "#define CONFIG_SH_32BIT 1" >> $(obj)include/config.h ; \
-               cp $(obj)board/renesas/sh7785lcr/u-boot_32bit \
-                       $(obj)board/renesas/sh7785lcr/u-boot.lds ; \
                echo "TEXT_BASE = 0x8ff80000" > \
                        $(obj)board/renesas/sh7785lcr/config.tmp ; \
                  $(XECHO) " ... enable 32-Bit Address Extended Mode" ; \
-       else \
-               cp $(obj)board/renesas/sh7785lcr/u-boot_29bit \
-                       $(obj)board/renesas/sh7785lcr/u-boot.lds ; \
        fi
        @$(MKCONFIG) -a $(call xtract_sh7785lcr,$@) sh sh4 sh7785lcr renesas
 
@@ -3549,6 +3589,11 @@ ap325rxa_config  :   unconfig
        @echo "#define CONFIG_AP325RXA 1" > $(obj)include/config.h
        @$(MKCONFIG) -a $(@:_config=) sh sh4 ap325rxa renesas
 
+espt_config  :   unconfig
+       @mkdir -p $(obj)include
+       @echo "#define CONFIG_ESPT 1" > $(obj)include/config.h
+       @$(MKCONFIG) -a $(@:_config=) sh sh4 espt
+
 #========================================================================
 # SPARC
 #========================================================================
@@ -3627,7 +3672,6 @@ clobber:  clean
        @rm -f $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm
        @[ ! -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
-       @[ ! -d $(obj)api_examples ] || find $(obj)api_examples -name "*" -type l -print | xargs rm -f
 
 ifeq ($(OBJTREE),$(SRCTREE))
 mrproper \
diff --git a/README b/README
index 0e84337..ca415d3 100644 (file)
--- a/README
+++ b/README
@@ -2428,6 +2428,12 @@ to save the current settings.
        to a block boundary, and CONFIG_ENV_SIZE must be a multiple of
        the NAND devices block size.
 
+- CONFIG_NAND_ENV_DST
+
+       Defines address in RAM to which the nand_spl code should copy the
+       environment. If redundant environment is used, it will be copied to
+       CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE.
+
 - CONFIG_SYS_SPI_INIT_OFFSET
 
        Defines offset to the initial SPI buffer area in DPRAM. The
@@ -3986,15 +3992,15 @@ U-Boot Porting Guide:
 list, October 2002]
 
 
-int main (int argc, char *argv[])
+int main(int argc, char *argv[])
 {
        sighandler_t no_more_time;
 
-       signal (SIGALRM, no_more_time);
-       alarm (PROJECT_DEADLINE - toSec (3 * WEEK));
+       signal(SIGALRM, no_more_time);
+       alarm(PROJECT_DEADLINE - toSec (3 * WEEK));
 
        if (available_money > available_manpower) {
-               pay consultant to port U-Boot;
+               Pay consultant to port U-Boot;
                return 0;
        }
 
@@ -4002,35 +4008,47 @@ int main (int argc, char *argv[])
 
        Subscribe to u-boot mailing list;
 
-       if (clueless) {
-               email ("Hi, I am new to U-Boot, how do I get started?");
-       }
+       if (clueless)
+               email("Hi, I am new to U-Boot, how do I get started?");
 
        while (learning) {
                Read the README file in the top level directory;
-               Read http://www.denx.de/twiki/bin/view/DULG/Manual ;
+               Read http://www.denx.de/twiki/bin/view/DULG/Manual;
+               Read applicable doc/*.README;
                Read the source, Luke;
+               /* find . -name "*.[chS]" | xargs grep -i <keyword> */
        }
 
-       if (available_money > toLocalCurrency ($2500)) {
-               Buy a BDI2000;
-       } else {
+       if (available_money > toLocalCurrency ($2500))
+               Buy a BDI3000;
+       else
                Add a lot of aggravation and time;
-       }
 
-       Create your own board support subdirectory;
-
-       Create your own board config file;
-
-       while (!running) {
-               do {
-                       Add / modify source code;
-               } until (compiles);
-               Debug;
-               if (clueless)
-                       email ("Hi, I am having problems...");
+       if (a similar board exists) {   /* hopefully... */
+               cp -a board/<similar> board/<myboard>
+               cp include/configs/<similar>.h include/configs/<myboard>.h
+       } else {
+               Create your own board support subdirectory;
+               Create your own board include/configs/<myboard>.h file;
+       }
+       Edit new board/<myboard> files
+       Edit new include/configs/<myboard>.h
+
+       while (!accepted) {
+               while (!running) {
+                       do {
+                               Add / modify source code;
+                       } until (compiles);
+                       Debug;
+                       if (clueless)
+                               email("Hi, I am having problems...");
+               }
+               Send patch file to the U-Boot email list;
+               if (reasonable critiques)
+                       Incorporate improvements from email list code review;
+               else
+                       Defend code as written;
        }
-       Send patch file to Wolfgang;
 
        return 0;
 }
index 272816f..d7b18dc 100644 (file)
@@ -1,7 +1,2 @@
-crc32.c
-ctype.c
 demo
 demo.bin
-ppcstring.S
-string.c
-vsprintf.c
index 4c01437..2a30bef 100644 (file)
@@ -29,74 +29,56 @@ endif
 
 include $(TOPDIR)/config.mk
 
-ELF-$(CONFIG_API) += demo
-BIN-$(CONFIG_API) += demo.bin
-ELF    := $(ELF-y)
-BIN    := $(BIN-y)
-
-#CFLAGS += -v
-
-COBJS-$(CONFIG_API) += $(ELF:=.o)
-SOBJS-$(CONFIG_API) += crt0.o
+# Resulting ELF and binary exectuables will be named demo and demo.bin
+OUTPUT-$(CONFIG_API) = $(obj)demo
+OUTPUT = $(OUTPUT-y)
+
+# Source files located in the api_examples directory
+SOBJ_FILES-$(CONFIG_API) += crt0.o
+COBJ_FILES-$(CONFIG_API) += demo.o
+COBJ_FILES-$(CONFIG_API) += glue.o
+COBJ_FILES-$(CONFIG_API) += libgenwrap.o
+
+# Source files which exist outside the api_examples directory
+EXT_COBJ_FILES-$(CONFIG_API) += lib_generic/crc32.o
+EXT_COBJ_FILES-$(CONFIG_API) += lib_generic/ctype.o
+EXT_COBJ_FILES-$(CONFIG_API) += lib_generic/string.o
+EXT_COBJ_FILES-$(CONFIG_API) += lib_generic/vsprintf.o
 ifeq ($(ARCH),ppc)
-SOBJS-$(CONFIG_API) += ppcstring.o
+EXT_SOBJ_FILES-$(CONFIG_API) += lib_ppc/ppcstring.o
 endif
-COBJS  := $(COBJS-y)
-SOBJS  := $(SOBJS-y)
-
-LIB    = $(obj)libglue.a
-LIBCOBJS-$(CONFIG_API) += glue.o crc32.o ctype.o string.o vsprintf.o \
-                               libgenwrap.o
-LIBCOBJS := $(LIBCOBJS-y)
 
-LIBOBJS        = $(addprefix $(obj),$(SOBJS) $(LIBCOBJS))
+# Create a list of source files so their dependencies can be auto-generated
+SRCS   += $(addprefix $(SRCTREE)/,$(EXT_COBJ_FILES-y:.o=.c))
+SRCS   += $(addprefix $(SRCTREE)/,$(EXT_SOBJ_FILES-y:.o=.S))
+SRCS   += $(addprefix $(SRCTREE)/api_examples/,$(COBJ_FILES-y:.o=.c))
+SRCS   += $(addprefix $(SRCTREE)/api_examples/,$(SOBJ_FILES-y:.o=.S))
 
-SRCS   := $(COBJS:.o=.c) $(LIBCOBJS:.o=.c) $(SOBJS:.o=.S)
-OBJS   := $(addprefix $(obj),$(COBJS))
-ELF    := $(addprefix $(obj),$(ELF))
-BIN    := $(addprefix $(obj),$(BIN))
+# Create a list of object files to be compiled
+OBJS   += $(addprefix $(obj),$(SOBJ_FILES-y))
+OBJS   += $(addprefix $(obj),$(COBJ_FILES-y))
+OBJS   += $(addprefix $(obj),$(notdir $(EXT_COBJ_FILES-y)))
+OBJS   += $(addprefix $(obj),$(notdir $(EXT_SOBJ_FILES-y)))
 
 gcclibdir := $(shell dirname `$(CC) -print-libgcc-file-name`)
 
 CPPFLAGS += -I..
 
-all:   $(obj).depend $(OBJS) $(LIB) $(ELF) $(BIN)
+all:   $(obj).depend $(OUTPUT)
 
 #########################################################################
-$(LIB):        $(obj).depend $(LIBOBJS)
-               $(AR) $(ARFLAGS) $@ $(LIBOBJS)
-
-$(ELF):
-$(obj)%:       $(obj)%.o $(LIB)
-               $(LD) $(obj)crt0.o -Ttext $(LOAD_ADDR) \
-                       -o $@ $< $(LIB) \
-                       -L$(gcclibdir) -lgcc
-
-$(BIN):
-$(obj)%.bin:   $(obj)%
-               $(OBJCOPY) -O binary $< $@ 2>/dev/null
 
-$(obj)crc32.c:
-       @rm -f $(obj)crc32.c
-       ln -s $(src)../lib_generic/crc32.c $(obj)crc32.c
+$(OUTPUT):     $(OBJS)
+               $(LD) -Ttext $(LOAD_ADDR) -o $@ $^ -L$(gcclibdir) -lgcc
+               $(OBJCOPY) -O binary $@ $(OUTPUT).bin 2>/dev/null
 
-$(obj)ctype.c:
-       @rm -f $(obj)ctype.c
-       ln -s $(src)../lib_generic/ctype.c $(obj)ctype.c
+# Rule to build generic library C files
+$(obj)%.o: $(SRCTREE)/lib_generic/%.c
+       $(CC) -g $(CFLAGS) -c -o $@ $<
 
-$(obj)string.c:
-       @rm -f $(obj)string.c
-       ln -s $(src)../lib_generic/string.c $(obj)string.c
-
-$(obj)vsprintf.c:
-       @rm -f $(obj)vsprintf.c
-       ln -s $(src)../lib_generic/vsprintf.c $(obj)vsprintf.c
-
-ifeq ($(ARCH),ppc)
-$(obj)ppcstring.S:
-       @rm -f $(obj)ppcstring.S
-       ln -s $(src)../lib_ppc/ppcstring.S $(obj)ppcstring.S
-endif
+# Rule to build architecture-specific library assembly files
+$(obj)%.o: $(SRCTREE)/lib_$(ARCH)/%.S
+       $(CC) -g $(CFLAGS) -c -o $@ $<
 
 #########################################################################
 
index 2b74689..cfc1023 100644 (file)
@@ -575,15 +575,17 @@ int misc_init_r(void)
 #endif /* !defined(CONFIG_ARCHES) */
 
 #if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+extern void __ft_board_setup(void *blob, bd_t *bd);
+
 void ft_board_setup(void *blob, bd_t *bd)
 {
        u32 val[4];
        int rc;
 
-       ft_cpu_setup(blob, bd);
+       __ft_board_setup(blob, bd);
 
        /* Fixup NOR mapping */
-       val[0] = 0;                             /* chip select number */
+       val[0] = CONFIG_SYS_NOR_CS;             /* chip select number */
        val[1] = 0;                             /* always 0 */
        val[2] = CONFIG_SYS_FLASH_BASE_PHYS_L;          /* we fixed up this address */
        val[3] = gd->bd->bi_flashsize;
index 044a429..80a2c7e 100644 (file)
@@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := versatile.o flash.o
+COBJS  := versatile.o
 SOBJS  := lowlevel_init.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
diff --git a/board/armltd/versatile/flash.c b/board/armltd/versatile/flash.c
deleted file mode 100644 (file)
index 3bdc895..0000000
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- * (C) Copyright 2001
- * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
- *
- * (C) Copyright 2001-2004
- * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * (C) Copyright 2003
- * Texas Instruments, <www.ti.com>
- * Kshitij Gupta <Kshitij@ti.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 <linux/byteorder/swab.h>
-
-#define PHYS_FLASH_SECT_SIZE   0x00020000      /* 256 KB sectors (x2) */
-flash_info_t flash_info[CONFIG_SYS_MAX_FLASH_BANKS];   /* info for FLASH chips    */
-
-/* Board support for 1 or 2 flash devices */
-#define FLASH_PORT_WIDTH32
-#undef FLASH_PORT_WIDTH16
-
-#ifdef FLASH_PORT_WIDTH16
-#define FLASH_PORT_WIDTH               ushort
-#define FLASH_PORT_WIDTHV              vu_short
-#define SWAP(x)                        __swab16(x)
-#else
-#define FLASH_PORT_WIDTH               ulong
-#define FLASH_PORT_WIDTHV              vu_long
-#define SWAP(x)                        __swab32(x)
-#endif
-
-#define FPW    FLASH_PORT_WIDTH
-#define FPWV   FLASH_PORT_WIDTHV
-
-#define mb() __asm__ __volatile__ ("" : : : "memory")
-
-
-/* Flash Organization Structure */
-typedef struct OrgDef {
-       unsigned int sector_number;
-       unsigned int sector_size;
-} OrgDef;
-
-
-/* Flash Organizations */
-OrgDef OrgIntel_28F256K3[] = {
-       {256, 128 * 1024},              /* 256 * 128kBytes sectors */
-};
-
-
-/*-----------------------------------------------------------------------
- * Functions
- */
-unsigned long flash_init (void);
-static ulong flash_get_size (FPW * addr, flash_info_t * info);
-static int write_data (flash_info_t * info, ulong dest, FPW data);
-static void flash_get_offsets (ulong base, flash_info_t * info);
-void inline spin_wheel (void);
-void flash_print_info (flash_info_t * info);
-void flash_unprotect_sectors (FPWV * addr);
-int flash_erase (flash_info_t * info, int s_first, int s_last);
-int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt);
-
-/*-----------------------------------------------------------------------
- */
-
-static void flash_vpp(int on)
-{
-       unsigned int tmp;
-
-       tmp = *(unsigned int *)(VERSATILE_FLASHCTRL);
-
-       if (on)
-           tmp |= VERSATILE_FLASHPROG_FLVPPEN;
-       else
-           tmp &= ~VERSATILE_FLASHPROG_FLVPPEN;
-
-       *(unsigned int *)(VERSATILE_FLASHCTRL) = tmp;
-}
-
-unsigned long flash_init (void)
-{
-       int i;
-       ulong size = 0;
-       for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; i++) {
-               switch (i) {
-               case 0:
-                       flash_vpp(1);
-                       flash_get_size ((FPW *) PHYS_FLASH_1, &flash_info[i]);
-                       flash_get_offsets (PHYS_FLASH_1, &flash_info[i]);
-                       flash_vpp(0);
-                       break;
-               default:
-                       panic ("configured too many flash banks!\n");
-                       break;
-               }
-               size += flash_info[i].size;
-       }
-
-       /* Protect monitor and environment sectors
-        */
-       flash_protect (FLAG_PROTECT_SET,
-                       CONFIG_SYS_FLASH_BASE,
-                       CONFIG_SYS_FLASH_BASE + monitor_flash_len - 1, &flash_info[0]);
-
-       return size;
-}
-
-/*-----------------------------------------------------------------------
- */
-static void flash_get_offsets (ulong base, flash_info_t * info)
-{
-       int i;
-       OrgDef *pOrgDef;
-
-       pOrgDef = OrgIntel_28F256K3;
-       if (info->flash_id == FLASH_UNKNOWN) {
-               return;
-       }
-
-       if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL) {
-               for (i = 0; i < info->sector_count; i++) {
-                       if (i > 255) {
-                               info->start[i] = base + (i * 0x8000);
-                               info->protect[i] = 0;
-                       } else {
-                               info->start[i] = base +
-                                               (i * PHYS_FLASH_SECT_SIZE);
-                               info->protect[i] = 0;
-                       }
-               }
-       }
-}
-
-/*-----------------------------------------------------------------------
- */
-void flash_print_info (flash_info_t * info)
-{
-       int i;
-
-       if (info->flash_id == FLASH_UNKNOWN) {
-               printf ("missing or unknown FLASH type\n");
-               return;
-       }
-
-       switch (info->flash_id & FLASH_VENDMASK) {
-       case FLASH_MAN_INTEL:
-               printf ("INTEL ");
-               break;
-       default:
-               printf ("Unknown Vendor ");
-               break;
-       }
-
-       switch (info->flash_id & FLASH_TYPEMASK) {
-       case FLASH_28F256L18T:
-               printf ("FLASH 28F256L18T\n");
-               break;
-       case FLASH_28F256K3:
-               printf ("FLASH 28F256K3\n");
-               break;
-       default:
-               printf ("Unknown Chip Type\n");
-               break;
-       }
-
-       printf ("  Size: %ld MB in %d Sectors\n",
-                       info->size >> 20, info->sector_count);
-
-       printf ("  Sector Start Addresses:");
-       for (i = 0; i < info->sector_count; ++i) {
-               if ((i % 5) == 0)
-                       printf ("\n   ");
-               printf (" %08lX%s",
-                       info->start[i], info->protect[i] ? " (RO)" : "     ");
-       }
-       printf ("\n");
-       return;
-}
-
-/*
- * The following code cannot be run from FLASH!
- */
-static ulong flash_get_size (FPW * addr, flash_info_t * info)
-{
-       volatile FPW value;
-
-       /* Write auto select command: read Manufacturer ID */
-       addr[0x5555] = (FPW) 0x00AA00AA;
-       addr[0x2AAA] = (FPW) 0x00550055;
-       addr[0x5555] = (FPW) 0x00900090;
-
-       mb ();
-       value = addr[0];
-       switch (value) {
-
-       case (FPW) INTEL_MANUFACT:
-               info->flash_id = FLASH_MAN_INTEL;
-               break;
-
-       default:
-               info->flash_id = FLASH_UNKNOWN;
-               info->sector_count = 0;
-               info->size = 0;
-               addr[0] = (FPW) 0x00FF00FF;     /* restore read mode */
-               return (0);             /* no or unknown flash  */
-       }
-
-       mb ();
-       value = addr[1];        /* device ID        */
-       switch (value) {
-
-       case (FPW) (INTEL_ID_28F256L18T):
-               info->flash_id += FLASH_28F256L18T;
-               info->sector_count = 259;
-               info->size = 0x02000000;
-               break;                  /* => 32 MB     */
-
-       case (FPW)(INTEL_ID_28F256K3):
-               info->flash_id += FLASH_28F256K3;
-               info->sector_count = 256;
-               info->size = 0x02000000;
-               break;
-
-       default:
-               info->flash_id = FLASH_UNKNOWN;
-               break;
-       }
-
-       if (info->sector_count > CONFIG_SYS_MAX_FLASH_SECT) {
-               printf ("** ERROR: sector count %d > max (%d) **\n",
-                               info->sector_count, CONFIG_SYS_MAX_FLASH_SECT);
-               info->sector_count = CONFIG_SYS_MAX_FLASH_SECT;
-       }
-
-       addr[0] = (FPW) 0x00FF00FF;     /* restore read mode */
-
-       return (info->size);
-}
-
-
-/* unprotects a sector for write and erase
- * on some intel parts, this unprotects the entire chip, but it
- * wont hurt to call this additional times per sector...
- */
-void flash_unprotect_sectors (FPWV * addr)
-{
-#define PD_FINTEL_WSMS_READY_MASK    0x0080
-
-       *addr = (FPW) 0x00500050;       /* clear status register */
-
-       /* this sends the clear lock bit command */
-       *addr = (FPW) 0x00600060;
-       *addr = (FPW) 0x00D000D0;
-}
-
-
-/*-----------------------------------------------------------------------
- */
-
-int flash_erase (flash_info_t * info, int s_first, int s_last)
-{
-       int flag, prot, sect;
-       ulong type, start, last;
-       int rcode = 0;
-
-       if ((s_first < 0) || (s_first > s_last)) {
-               if (info->flash_id == FLASH_UNKNOWN) {
-                       printf ("- missing\n");
-               } else {
-                       printf ("- no sectors to erase\n");
-               }
-               return 1;
-       }
-
-       type = (info->flash_id & FLASH_VENDMASK);
-       if ((type != FLASH_MAN_INTEL)) {
-               printf ("Can't erase unknown flash type %08lx - aborted\n",
-                               info->flash_id);
-               return 1;
-       }
-
-       prot = 0;
-       for (sect = s_first; sect <= s_last; ++sect) {
-               if (info->protect[sect]) {
-                       prot++;
-               }
-       }
-
-       if (prot) {
-               printf ("- Warning: %d protected sectors will not be erased!\n",
-                               prot);
-       } else {
-               printf ("\n");
-       }
-
-       flash_vpp(1);
-
-       start = get_timer (0);
-       last = start;
-
-       /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
-
-       /* Start erase on unprotected sectors */
-       for (sect = s_first; sect <= s_last; sect++) {
-               if (info->protect[sect] == 0) { /* not protected */
-                       FPWV *addr = (FPWV *) (info->start[sect]);
-                       FPW status;
-
-                       printf ("Erasing sector %2d ... ", sect);
-
-                       flash_unprotect_sectors (addr);
-
-                       /* arm simple, non interrupt dependent timer */
-                       reset_timer_masked ();
-
-                       *addr = (FPW) 0x00500050;/* clear status register */
-                       *addr = (FPW) 0x00200020;/* erase setup */
-                       *addr = (FPW) 0x00D000D0;/* erase confirm */
-
-                       while (((status =
-                               *addr) & (FPW) 0x00800080) !=
-                               (FPW) 0x00800080) {
-                                       if (get_timer_masked () >
-                                       CONFIG_SYS_FLASH_ERASE_TOUT) {
-                                       printf ("Timeout\n");
-                                       /* suspend erase     */
-                                       *addr = (FPW) 0x00B000B0;
-                                       /* reset to read mode */
-                                       *addr = (FPW) 0x00FF00FF;
-                                       rcode = 1;
-                                       break;
-                               }
-                       }
-
-                       /* clear status register cmd.   */
-                       *addr = (FPW) 0x00500050;
-                       *addr = (FPW) 0x00FF00FF;/* resest to read mode */
-                       printf (" done\n");
-               }
-       }
-
-       flash_vpp(0);
-
-       return rcode;
-}
-
-/*-----------------------------------------------------------------------
- * Copy memory to flash, returns:
- * 0 - OK
- * 1 - write timeout
- * 2 - Flash not erased
- * 4 - Flash not identified
- */
-
-int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
-{
-       ulong cp, wp;
-       FPW data;
-       int count, i, l, rc, port_width;
-
-       if (info->flash_id == FLASH_UNKNOWN) {
-               return 4;
-       }
-/* get lower word aligned address */
-#ifdef FLASH_PORT_WIDTH16
-       wp = (addr & ~1);
-       port_width = 2;
-#else
-       wp = (addr & ~3);
-       port_width = 4;
-#endif
-
-       flash_vpp(1);
-
-       /*
-        * handle unaligned start bytes
-        */
-       if ((l = addr - wp) != 0) {
-               data = 0;
-               for (i = 0, cp = wp; i < l; ++i, ++cp) {
-                       data = (data << 8) | (*(uchar *) cp);
-               }
-               for (; i < port_width && cnt > 0; ++i) {
-                       data = (data << 8) | *src++;
-                       --cnt;
-                       ++cp;
-               }
-               for (; cnt == 0 && i < port_width; ++i, ++cp) {
-                       data = (data << 8) | (*(uchar *) cp);
-               }
-
-               if ((rc = write_data (info, wp, SWAP (data))) != 0) {
-                       flash_vpp(0);
-                       return (rc);
-               }
-               wp += port_width;
-       }
-
-       /*
-        * handle word aligned part
-        */
-       count = 0;
-       while (cnt >= port_width) {
-               data = 0;
-               for (i = 0; i < port_width; ++i) {
-                       data = (data << 8) | *src++;
-               }
-               if ((rc = write_data (info, wp, SWAP (data))) != 0) {
-                       flash_vpp(0);
-                       return (rc);
-               }
-               wp += port_width;
-               cnt -= port_width;
-               if (count++ > 0x800) {
-                       spin_wheel ();
-                       count = 0;
-               }
-       }
-
-       if (cnt == 0) {
-               flash_vpp(0);
-               return (0);
-       }
-
-       /*
-        * handle unaligned tail bytes
-        */
-       data = 0;
-       for (i = 0, cp = wp; i < port_width && cnt > 0; ++i, ++cp) {
-               data = (data << 8) | *src++;
-               --cnt;
-       }
-       for (; i < port_width; ++i, ++cp) {
-               data = (data << 8) | (*(uchar *) cp);
-       }
-
-       rc = write_data (info, wp, SWAP (data));
-
-       flash_vpp(0);
-
-       return rc;
-}
-
-/*-----------------------------------------------------------------------
- * Write a word or halfword to Flash, returns:
- * 0 - OK
- * 1 - write timeout
- * 2 - Flash not erased
- */
-static int write_data (flash_info_t * info, ulong dest, FPW data)
-{
-       FPWV *addr = (FPWV *) dest;
-       ulong status;
-       int flag;
-
-       /* Check if Flash is (sufficiently) erased */
-       if ((*addr & data) != data) {
-               printf ("not erased at %08lx (%lx)\n", (ulong) addr, (ulong) *addr);
-               return (2);
-       }
-
-       flash_vpp(1);
-
-       flash_unprotect_sectors (addr);
-       /* Disable interrupts which might cause a timeout here */
-       flag = disable_interrupts ();
-       *addr = (FPW) 0x00400040;       /* write setup */
-       *addr = data;
-
-       /* arm simple, non interrupt dependent timer */
-       reset_timer_masked ();
-
-       /* wait while polling the status register */
-       while (((status = *addr) & (FPW) 0x00800080) != (FPW) 0x00800080) {
-               if (get_timer_masked () > CONFIG_SYS_FLASH_WRITE_TOUT) {
-                       *addr = (FPW) 0x00FF00FF;       /* restore read mode */
-                       flash_vpp(0);
-                       return (1);
-               }
-       }
-       *addr = (FPW) 0x00FF00FF;       /* restore read mode */
-       flash_vpp(0);
-       return (0);
-}
-
-void inline spin_wheel (void)
-{
-       static int p = 0;
-       static char w[] = "\\/-";
-
-       printf ("\010%c", w[p]);
-       (++p == 3) ? (p = 0) : 0;
-}
index 0817e60..2f6b599 100644 (file)
@@ -57,6 +57,16 @@ static void at91sam9261ek_nand_hw_init(void)
                       csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA);
 
        /* Configure SMC CS3 for NAND/SmartMedia */
+#ifdef CONFIG_AT91SAM9G10EK
+       at91_sys_write(AT91_SMC_SETUP(3),
+                      AT91_SMC_NWESETUP_(2) | AT91_SMC_NCS_WRSETUP_(0) |
+                      AT91_SMC_NRDSETUP_(2) | AT91_SMC_NCS_RDSETUP_(0));
+       at91_sys_write(AT91_SMC_PULSE(3),
+                      AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(7) |
+                      AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(7));
+       at91_sys_write(AT91_SMC_CYCLE(3),
+                      AT91_SMC_NWECYCLE_(7) | AT91_SMC_NRDCYCLE_(7));
+#else
        at91_sys_write(AT91_SMC_SETUP(3),
                       AT91_SMC_NWESETUP_(1) | AT91_SMC_NCS_WRSETUP_(0) |
                       AT91_SMC_NRDSETUP_(1) | AT91_SMC_NCS_RDSETUP_(0));
@@ -65,6 +75,7 @@ static void at91sam9261ek_nand_hw_init(void)
                       AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3));
        at91_sys_write(AT91_SMC_CYCLE(3),
                       AT91_SMC_NWECYCLE_(5) | AT91_SMC_NRDCYCLE_(5));
+#endif
        at91_sys_write(AT91_SMC_MODE(3),
                       AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
                       AT91_SMC_EXNWMODE_DISABLE |
@@ -92,6 +103,21 @@ static void at91sam9261ek_nand_hw_init(void)
 static void at91sam9261ek_dm9000_hw_init(void)
 {
        /* Configure SMC CS2 for DM9000 */
+#ifdef CONFIG_AT91SAM9G10EK
+       at91_sys_write(AT91_SMC_SETUP(2),
+                      AT91_SMC_NWESETUP_(3) | AT91_SMC_NCS_WRSETUP_(0) |
+                      AT91_SMC_NRDSETUP_(3) | AT91_SMC_NCS_RDSETUP_(0));
+       at91_sys_write(AT91_SMC_PULSE(2),
+                      AT91_SMC_NWEPULSE_(6) | AT91_SMC_NCS_WRPULSE_(8) |
+                      AT91_SMC_NRDPULSE_(6) | AT91_SMC_NCS_RDPULSE_(8));
+       at91_sys_write(AT91_SMC_CYCLE(2),
+                      AT91_SMC_NWECYCLE_(20) | AT91_SMC_NRDCYCLE_(20));
+       at91_sys_write(AT91_SMC_MODE(2),
+                      AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
+                      AT91_SMC_EXNWMODE_DISABLE |
+                      AT91_SMC_BAT_WRITE | AT91_SMC_DBW_16 |
+                      AT91_SMC_TDF_(1));
+#else
        at91_sys_write(AT91_SMC_SETUP(2),
                       AT91_SMC_NWESETUP_(2) | AT91_SMC_NCS_WRSETUP_(0) |
                       AT91_SMC_NRDSETUP_(2) | AT91_SMC_NCS_RDSETUP_(0));
@@ -105,6 +131,7 @@ static void at91sam9261ek_dm9000_hw_init(void)
                       AT91_SMC_EXNWMODE_DISABLE |
                       AT91_SMC_BAT_WRITE | AT91_SMC_DBW_16 |
                       AT91_SMC_TDF_(1));
+#endif
 
        /* Configure Reset signal as output */
        at91_set_gpio_output(AT91_PIN_PC10, 0);
@@ -169,7 +196,11 @@ static void at91sam9261ek_lcd_hw_init(void)
 
        at91_sys_write(AT91_PMC_SCER, AT91_PMC_HCK1);
 
+#ifdef CONFIG_AT91SAM9G10EK
+       gd->fb_base = CONFIG_AT91SAM9G10_LCD_BASE;
+#else
        gd->fb_base = AT91SAM9261_SRAM_BASE;
+#endif
 }
 
 #ifdef CONFIG_LCD_INFO
@@ -207,8 +238,13 @@ int board_init(void)
        /* Enable Ctrlc */
        console_init_f();
 
+#ifdef CONFIG_AT91SAM9G10EK
+       /* arch number of AT91SAM9G10EK-Board */
+       gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9G10EK;
+#else
        /* arch number of AT91SAM9261EK-Board */
        gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9261EK;
+#endif
        /* adress of boot parameters */
        gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
 
diff --git a/board/atmel/at91sam9m10g45ek/Makefile b/board/atmel/at91sam9m10g45ek/Makefile
new file mode 100644 (file)
index 0000000..4caf1e4
--- /dev/null
@@ -0,0 +1,55 @@
+#
+# (C) Copyright 2003-2008
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# (C) Copyright 2008
+# Stelian Pop <stelian.pop@leadtechdesign.com>
+# Lead Tech Design <www.leadtechdesign.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 $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS-y += at91sam9m10g45ek.o
+COBJS-y += led.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS-y))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c b/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c
new file mode 100644 (file)
index 0000000..45a14a9
--- /dev/null
@@ -0,0 +1,334 @@
+/*
+ * (C) Copyright 2007-2008
+ * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Lead Tech Design <www.leadtechdesign.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/sizes.h>
+#include <asm/arch/at91sam9g45.h>
+#include <asm/arch/at91sam9_matrix.h>
+#include <asm/arch/at91sam9_smc.h>
+#include <asm/arch/at91_common.h>
+#include <asm/arch/at91_pmc.h>
+#include <asm/arch/at91_rstc.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/io.h>
+#include <asm/arch/hardware.h>
+#include <lcd.h>
+#include <atmel_lcdc.h>
+#if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB)
+#include <net.h>
+#endif
+#include <netdev.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* ------------------------------------------------------------------------- */
+/*
+ * Miscelaneous platform dependent initialisations
+ */
+
+#ifdef CONFIG_CMD_NAND
+static void at91sam9m10g45ek_nand_hw_init(void)
+{
+       unsigned long csa;
+
+       /* Enable CS3 */
+       csa = at91_sys_read(AT91_MATRIX_EBICSA);
+       at91_sys_write(AT91_MATRIX_EBICSA,
+                      csa | AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA);
+
+       /* Configure SMC CS3 for NAND/SmartMedia */
+       at91_sys_write(AT91_SMC_SETUP(3),
+                      AT91_SMC_NWESETUP_(1) | AT91_SMC_NCS_WRSETUP_(0) |
+                      AT91_SMC_NRDSETUP_(1) | AT91_SMC_NCS_RDSETUP_(0));
+       at91_sys_write(AT91_SMC_PULSE(3),
+                      AT91_SMC_NWEPULSE_(4) | AT91_SMC_NCS_WRPULSE_(3) |
+                      AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(2));
+       at91_sys_write(AT91_SMC_CYCLE(3),
+                      AT91_SMC_NWECYCLE_(7) | AT91_SMC_NRDCYCLE_(4));
+       at91_sys_write(AT91_SMC_MODE(3),
+                      AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
+                      AT91_SMC_EXNWMODE_DISABLE |
+#ifdef CONFIG_SYS_NAND_DBW_16
+                      AT91_SMC_DBW_16 |
+#else /* CONFIG_SYS_NAND_DBW_8 */
+                      AT91_SMC_DBW_8 |
+#endif
+                      AT91_SMC_TDF_(3));
+
+       at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_PIOC);
+
+       /* Configure RDY/BSY */
+       at91_set_gpio_input(CONFIG_SYS_NAND_READY_PIN, 1);
+
+       /* Enable NandFlash */
+       at91_set_gpio_output(CONFIG_SYS_NAND_ENABLE_PIN, 1);
+}
+#endif
+
+#ifdef CONFIG_MACB
+static void at91sam9m10g45ek_macb_hw_init(void)
+{
+       unsigned long rstc;
+
+       /* Enable clock */
+       at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_EMAC);
+
+       /*
+        * Disable pull-up on:
+        *      RXDV (PA15) => PHY normal mode (not Test mode)
+        *      ERX0 (PA12) => PHY ADDR0
+        *      ERX1 (PA13) => PHY ADDR1 => PHYADDR = 0x0
+        *
+        * PHY has internal pull-down
+        */
+       writel(pin_to_mask(AT91_PIN_PA15) |
+              pin_to_mask(AT91_PIN_PA12) |
+              pin_to_mask(AT91_PIN_PA13),
+              pin_to_controller(AT91_PIN_PA0) + PIO_PUDR);
+
+       rstc = at91_sys_read(AT91_RSTC_MR);
+
+       /* Need to reset PHY -> 500ms reset */
+       at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
+                                    (AT91_RSTC_ERSTL & (0x0D << 8)) |
+                                    AT91_RSTC_URSTEN);
+
+       at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_EXTRST);
+
+       /* Wait for end hardware reset */
+       while (!(at91_sys_read(AT91_RSTC_SR) & AT91_RSTC_NRSTL));
+
+       /* Restore NRST value */
+       at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
+                                    (rstc) |
+                                    AT91_RSTC_URSTEN);
+
+       /* Re-enable pull-up */
+       writel(pin_to_mask(AT91_PIN_PA15) |
+              pin_to_mask(AT91_PIN_PA12) |
+              pin_to_mask(AT91_PIN_PA13),
+              pin_to_controller(AT91_PIN_PA0) + PIO_PUER);
+
+       at91_macb_hw_init();
+}
+#endif
+
+#ifdef CONFIG_LCD
+
+vidinfo_t panel_info = {
+       vl_col:         480,
+       vl_row:         272,
+       vl_clk:         9000000,
+       vl_sync:        ATMEL_LCDC_INVLINE_NORMAL |
+                       ATMEL_LCDC_INVFRAME_NORMAL,
+       vl_bpix:        3,
+       vl_tft:         1,
+       vl_hsync_len:   45,
+       vl_left_margin: 1,
+       vl_right_margin:1,
+       vl_vsync_len:   1,
+       vl_upper_margin:40,
+       vl_lower_margin:1,
+       mmio:           AT91SAM9G45_LCDC_BASE,
+};
+
+
+void lcd_enable(void)
+{
+       at91_set_A_periph(AT91_PIN_PE6, 1);     /* power up */
+}
+
+void lcd_disable(void)
+{
+       at91_set_A_periph(AT91_PIN_PE6, 0);     /* power down */
+}
+
+static void at91sam9m10g45ek_lcd_hw_init(void)
+{
+       at91_set_A_periph(AT91_PIN_PE0, 0);     /* LCDDPWR */
+       at91_set_A_periph(AT91_PIN_PE2, 0);     /* LCDCC */
+       at91_set_A_periph(AT91_PIN_PE3, 0);     /* LCDVSYNC */
+       at91_set_A_periph(AT91_PIN_PE4, 0);     /* LCDHSYNC */
+       at91_set_A_periph(AT91_PIN_PE5, 0);     /* LCDDOTCK */
+
+       at91_set_A_periph(AT91_PIN_PE7, 0);     /* LCDD0 */
+       at91_set_A_periph(AT91_PIN_PE8, 0);     /* LCDD1 */
+       at91_set_A_periph(AT91_PIN_PE9, 0);     /* LCDD2 */
+       at91_set_A_periph(AT91_PIN_PE10, 0);    /* LCDD3 */
+       at91_set_A_periph(AT91_PIN_PE11, 0);    /* LCDD4 */
+       at91_set_A_periph(AT91_PIN_PE12, 0);    /* LCDD5 */
+       at91_set_A_periph(AT91_PIN_PE13, 0);    /* LCDD6 */
+       at91_set_A_periph(AT91_PIN_PE14, 0);    /* LCDD7 */
+       at91_set_A_periph(AT91_PIN_PE15, 0);    /* LCDD8 */
+       at91_set_A_periph(AT91_PIN_PE16, 0);    /* LCDD9 */
+       at91_set_A_periph(AT91_PIN_PE17, 0);    /* LCDD10 */
+       at91_set_A_periph(AT91_PIN_PE18, 0);    /* LCDD11 */
+       at91_set_A_periph(AT91_PIN_PE19, 0);    /* LCDD12 */
+       at91_set_B_periph(AT91_PIN_PE20, 0);    /* LCDD13 */
+       at91_set_A_periph(AT91_PIN_PE21, 0);    /* LCDD14 */
+       at91_set_A_periph(AT91_PIN_PE22, 0);    /* LCDD15 */
+       at91_set_A_periph(AT91_PIN_PE23, 0);    /* LCDD16 */
+       at91_set_A_periph(AT91_PIN_PE24, 0);    /* LCDD17 */
+       at91_set_A_periph(AT91_PIN_PE25, 0);    /* LCDD18 */
+       at91_set_A_periph(AT91_PIN_PE26, 0);    /* LCDD19 */
+       at91_set_A_periph(AT91_PIN_PE27, 0);    /* LCDD20 */
+       at91_set_B_periph(AT91_PIN_PE28, 0);    /* LCDD21 */
+       at91_set_A_periph(AT91_PIN_PE29, 0);    /* LCDD22 */
+       at91_set_A_periph(AT91_PIN_PE30, 0);    /* LCDD23 */
+
+       at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_LCDC);
+
+       gd->fb_base = CONFIG_AT91SAM9G45_LCD_BASE;
+}
+
+#ifdef CONFIG_LCD_INFO
+#include <nand.h>
+#include <version.h>
+
+void lcd_show_board_info(void)
+{
+       ulong dram_size, nand_size;
+       int i;
+       char temp[32];
+
+       lcd_printf ("%s\n", U_BOOT_VERSION);
+       lcd_printf ("(C) 2008 ATMEL Corp\n");
+       lcd_printf ("at91support@atmel.com\n");
+       lcd_printf ("%s CPU at %s MHz\n",
+               AT91_CPU_NAME,
+               strmhz(temp, get_cpu_clk_rate()));
+
+       dram_size = 0;
+       for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++)
+               dram_size += gd->bd->bi_dram[i].size;
+       nand_size = 0;
+       for (i = 0; i < CONFIG_SYS_MAX_NAND_DEVICE; i++)
+               nand_size += nand_info[i].size;
+       lcd_printf ("  %ld MB SDRAM, %ld MB NAND\n",
+               dram_size >> 20,
+               nand_size >> 20 );
+}
+#endif /* CONFIG_LCD_INFO */
+#endif
+
+int board_init(void)
+{
+       /* Enable Ctrlc */
+       console_init_f();
+
+       /* arch number of AT91SAM9M10G45EK-Board */
+#ifdef CONFIG_AT91SAM9M10G45EK
+       gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9M10G45EK;
+#elif defined CONFIG_AT91SAM9G45EKES
+       gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9G45EKES;
+#endif
+       /* adress of boot parameters */
+       gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
+
+       at91_serial_hw_init();
+#ifdef CONFIG_CMD_NAND
+       at91sam9m10g45ek_nand_hw_init();
+#endif
+#ifdef CONFIG_HAS_DATAFLASH
+       at91_spi0_hw_init(1 << 0);
+#endif
+#ifdef CONFIG_ATMEL_SPI
+       at91_spi0_hw_init(1 << 4);
+#endif
+
+#ifdef CONFIG_MACB
+       at91sam9m10g45ek_macb_hw_init();
+#endif
+
+#ifdef CONFIG_LCD
+       at91sam9m10g45ek_lcd_hw_init();
+#endif
+       return 0;
+}
+
+int dram_init(void)
+{
+       gd->bd->bi_dram[0].start = PHYS_SDRAM;
+       gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
+       return 0;
+}
+
+#ifdef CONFIG_RESET_PHY_R
+void reset_phy(void)
+{
+#ifdef CONFIG_MACB
+       /*
+        * Initialize ethernet HW addr prior to starting Linux,
+        * needed for nfsroot
+        */
+       eth_init(gd->bd);
+#endif
+}
+#endif
+
+int board_eth_init(bd_t *bis)
+{
+       int rc = 0;
+#ifdef CONFIG_MACB
+       rc = macb_eth_initialize(0, (void *)AT91SAM9G45_BASE_EMAC, 0x00);
+#endif
+       return rc;
+}
+
+/* SPI chip select control */
+#ifdef CONFIG_ATMEL_SPI
+#include <spi.h>
+
+int spi_cs_is_valid(unsigned int bus, unsigned int cs)
+{
+       return bus == 0 && cs < 2;
+}
+
+void spi_cs_activate(struct spi_slave *slave)
+{
+       switch(slave->cs) {
+               case 1:
+                       at91_set_gpio_output(AT91_PIN_PB18, 0);
+                       break;
+               case 0:
+               default:
+                       at91_set_gpio_output(AT91_PIN_PB3, 0);
+                       break;
+       }
+}
+
+void spi_cs_deactivate(struct spi_slave *slave)
+{
+       switch(slave->cs) {
+               case 1:
+                       at91_set_gpio_output(AT91_PIN_PB18, 1);
+                       break;
+               case 0:
+               default:
+                       at91_set_gpio_output(AT91_PIN_PB3, 1);
+               break;
+       }
+}
+#endif /* CONFIG_ATMEL_SPI */
diff --git a/board/atmel/at91sam9m10g45ek/config.mk b/board/atmel/at91sam9m10g45ek/config.mk
new file mode 100644 (file)
index 0000000..7fe9d03
--- /dev/null
@@ -0,0 +1 @@
+TEXT_BASE = 0x73f00000
diff --git a/board/atmel/at91sam9m10g45ek/led.c b/board/atmel/at91sam9m10g45ek/led.c
new file mode 100644 (file)
index 0000000..ff59a2d
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * (C) Copyright 2007-2008
+ * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Lead Tech Design <www.leadtechdesign.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/at91sam9g45.h>
+#include <asm/arch/at91_pmc.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/io.h>
+
+void coloured_LED_init(void)
+{
+       /* Enable clock */
+       at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_PIODE);
+
+       at91_set_gpio_output(CONFIG_RED_LED, 1);
+       at91_set_gpio_output(CONFIG_GREEN_LED, 1);
+
+       at91_set_gpio_value(CONFIG_RED_LED, 0);
+       at91_set_gpio_value(CONFIG_GREEN_LED, 1);
+}
index 4c9e015..f728e2c 100644 (file)
@@ -32,7 +32,6 @@ LIB   = $(obj)lib$(BOARD).a
 COBJS-y        := $(BOARD).o cmd_bf537led.o
 COBJS-$(CONFIG_BFIN_IDE)   += ide-cf.o
 COBJS-$(CONFIG_CMD_EEPROM) += spi_flash.o
-COBJS-$(CONFIG_CMD_NAND)   += nand.o
 COBJS-$(CONFIG_POST)       += post.o post-memory.o
 
 SRCS   := $(SOBJS-y:.o=.S) $(COBJS-y:.o=.c)
diff --git a/board/bf537-stamp/nand.c b/board/bf537-stamp/nand.c
deleted file mode 100644 (file)
index 181e83d..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (c) 2006-2007 Analog Devices Inc.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <asm/io.h>
-
-#include <nand.h>
-
-#define CONCAT(a,b,c,d) a ## b ## c ## d
-#define PORT(a,b)  CONCAT(pPORT,a,b,)
-
-#ifndef CONFIG_NAND_GPIO_PORT
-#define CONFIG_NAND_GPIO_PORT F
-#endif
-
-/*
- * hardware specific access to control-lines
- */
-static void bfin_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)
-{
-       register struct nand_chip *this = mtd->priv;
-       u32 IO_ADDR_W = (u32) this->IO_ADDR_W;
-
-       if (ctrl & NAND_CTRL_CHANGE) {
-               if (ctrl & NAND_CLE)
-                       IO_ADDR_W = CONFIG_SYS_NAND_BASE + BFIN_NAND_CLE;
-               else
-                       IO_ADDR_W = CONFIG_SYS_NAND_BASE;
-               if (ctrl & NAND_ALE)
-                       IO_ADDR_W = CONFIG_SYS_NAND_BASE + BFIN_NAND_ALE;
-               else
-                       IO_ADDR_W = CONFIG_SYS_NAND_BASE;
-               this->IO_ADDR_W = (void __iomem *) IO_ADDR_W;
-       }
-       this->IO_ADDR_R = this->IO_ADDR_W;
-
-       /* Drain the writebuffer */
-       SSYNC();
-
-       if (cmd != NAND_CMD_NONE)
-               writeb(cmd, this->IO_ADDR_W);
-}
-
-int bfin_device_ready(struct mtd_info *mtd)
-{
-       int ret = (*PORT(CONFIG_NAND_GPIO_PORT, IO) & BFIN_NAND_READY) ? 1 : 0;
-       SSYNC();
-       return ret;
-}
-
-/*
- * Board-specific NAND initialization. The following members of the
- * argument are board-specific (per include/linux/mtd/nand.h):
- * - IO_ADDR_R?: address to read the 8 I/O lines of the flash device
- * - IO_ADDR_W?: address to write the 8 I/O lines of the flash device
- * - cmd_ctrl: hardwarespecific function for accesing control-lines
- * - dev_ready: hardwarespecific function for  accesing device ready/busy line
- * - enable_hwecc?: function to enable (reset)  hardware ecc generator. Must
- *   only be provided if a hardware ECC is available
- * - ecc.mode: mode of ecc, see defines
- * - chip_delay: chip dependent delay for transfering data from array to
- *   read regs (tR)
- * - options: various chip options. They can partly be set to inform
- *   nand_scan about special functionality. See the defines for further
- *   explanation
- * Members with a "?" were not set in the merged testing-NAND branch,
- * so they are not set here either.
- */
-int board_nand_init(struct nand_chip *nand)
-{
-       *PORT(CONFIG_NAND_GPIO_PORT, _FER) &= ~BFIN_NAND_READY;
-       *PORT(CONFIG_NAND_GPIO_PORT, IO_DIR) &= ~BFIN_NAND_READY;
-       *PORT(CONFIG_NAND_GPIO_PORT, IO_INEN) |= BFIN_NAND_READY;
-
-       nand->cmd_ctrl = bfin_hwcontrol;
-       nand->ecc.mode = NAND_ECC_SOFT;
-       nand->dev_ready = bfin_device_ready;
-       nand->chip_delay = 30;
-
-       return 0;
-}
index f44c352..2064aa2 100644 (file)
@@ -27,6 +27,7 @@
 #include <command.h>
 #include <asm/io.h>
 #include <asm/processor.h>
+#include <asm/mpc512x.h>
 #include <fdt_support.h>
 #ifdef CONFIG_MISC_INIT_R
 #include <i2c.h>
@@ -34,9 +35,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-extern int mpc5121_diu_init(void);
-extern void ide_set_reset(int idereset);
-
 /* Clocks in use */
 #define SCCR1_CLOCKS_EN        (CLOCK_SCCR1_CFG_EN |                           \
                         CLOCK_SCCR1_LPC_EN |                           \
@@ -44,6 +42,7 @@ extern void ide_set_reset(int idereset);
                         CLOCK_SCCR1_PSCFIFO_EN |                       \
                         CLOCK_SCCR1_DDR_EN |                           \
                         CLOCK_SCCR1_FEC_EN |                           \
+                        CLOCK_SCCR1_NFC_EN |                           \
                         CLOCK_SCCR1_PATA_EN |                          \
                         CLOCK_SCCR1_PCI_EN |                           \
                         CLOCK_SCCR1_TPR_EN)
@@ -53,14 +52,9 @@ extern void ide_set_reset(int idereset);
                         CLOCK_SCCR2_DIU_EN |           \
                         CLOCK_SCCR2_I2C_EN)
 
-#define CSAW_START(start)      ((start) & 0xFFFF0000)
-#define CSAW_STOP(start, size) (((start) + (size) - 1) >> 16)
-
-long int fixed_sdram(void);
-
 int board_early_init_f(void)
 {
-       volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR;
+       volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR;
        u32 spridr;
 
        /*
@@ -71,14 +65,7 @@ int board_early_init_f(void)
                CSAW_STOP(CONFIG_SYS_ARIA_FPGA_BASE, CONFIG_SYS_ARIA_FPGA_SIZE)
        );
        out_be32(&im->lpc.cs_cfg[2], CONFIG_SYS_CS2_CFG);
-
-       /*
-        * According to MPC5121e RM, configuring local access windows should
-        * be followed by a dummy read of the config register that was
-        * modified last and an isync
-        */
-       in_be32(&im->sysconf.lpcs2aw);
-       __asm__ __volatile__ ("isync");
+       sync_law(&im->sysconf.lpcs2aw);
 
        /*
         * Initialize Local Window for the On Board SRAM access
@@ -88,14 +75,7 @@ int board_early_init_f(void)
                CSAW_STOP(CONFIG_SYS_ARIA_SRAM_BASE, CONFIG_SYS_ARIA_SRAM_SIZE)
        );
        out_be32(&im->lpc.cs_cfg[6], CONFIG_SYS_CS6_CFG);
-
-       /*
-        * According to MPC5121e RM, configuring local access windows should
-        * be followed by a dummy read of the config register that was
-        * modified last and an isync
-        */
-       in_be32(&im->sysconf.lpcs6aw);
-       __asm__ __volatile__ ("isync");
+       sync_law(&im->sysconf.lpcs6aw);
 
        /*
         * Configure Flash Speed
@@ -124,100 +104,6 @@ phys_size_t initdram (int board_type)
        return fixed_sdram();
 }
 
-/*
- * fixed sdram init:
- * The board doesn't use memory modules that have serial presence
- * detect or similar mechanism for discovery of the DRAM settings
- */
-long int fixed_sdram (void)
-{
-       volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR;
-       u32 msize = CONFIG_SYS_DDR_SIZE * 1024 * 1024;
-       u32 msize_log2 = __ilog2(msize);
-       u32 i;
-
-       /* Initialize IO Control */
-       out_be32(&im->io_ctrl.io_control_mem, IOCTRL_MUX_DDR);
-
-       /* Initialize DDR Local Window */
-       out_be32(&im->sysconf.ddrlaw.bar, CONFIG_SYS_DDR_BASE & 0xFFFFF000);
-       out_be32(&im->sysconf.ddrlaw.ar, msize_log2 - 1);
-
-       /*
-        * According to MPC5121e RM, configuring local access windows should
-        * be followed by a dummy read of the config register that was
-        * modified last and an isync
-        */
-       in_be32(&im->sysconf.ddrlaw.ar);
-       __asm__ __volatile__ ("isync");
-
-       /* Enable DDR */
-       out_be32(&im->mddrc.ddr_sys_config, CONFIG_SYS_MDDRC_SYS_CFG_EN);
-
-       /* Initialize DDR Priority Manager */
-       out_be32(&im->mddrc.prioman_config1, CONFIG_SYS_MDDRCGRP_PM_CFG1);
-       out_be32(&im->mddrc.prioman_config2, CONFIG_SYS_MDDRCGRP_PM_CFG2);
-       out_be32(&im->mddrc.hiprio_config, CONFIG_SYS_MDDRCGRP_HIPRIO_CFG);
-       out_be32(&im->mddrc.lut_table0_main_upper, CONFIG_SYS_MDDRCGRP_LUT0_MU);
-       out_be32(&im->mddrc.lut_table0_main_lower, CONFIG_SYS_MDDRCGRP_LUT0_ML);
-       out_be32(&im->mddrc.lut_table1_main_upper, CONFIG_SYS_MDDRCGRP_LUT1_MU);
-       out_be32(&im->mddrc.lut_table1_main_lower, CONFIG_SYS_MDDRCGRP_LUT1_ML);
-       out_be32(&im->mddrc.lut_table2_main_upper, CONFIG_SYS_MDDRCGRP_LUT2_MU);
-       out_be32(&im->mddrc.lut_table2_main_lower, CONFIG_SYS_MDDRCGRP_LUT2_ML);
-       out_be32(&im->mddrc.lut_table3_main_upper, CONFIG_SYS_MDDRCGRP_LUT3_MU);
-       out_be32(&im->mddrc.lut_table3_main_lower, CONFIG_SYS_MDDRCGRP_LUT3_ML);
-       out_be32(&im->mddrc.lut_table4_main_upper, CONFIG_SYS_MDDRCGRP_LUT4_MU);
-       out_be32(&im->mddrc.lut_table4_main_lower, CONFIG_SYS_MDDRCGRP_LUT4_ML);
-       out_be32(&im->mddrc.lut_table0_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT0_AU);
-       out_be32(&im->mddrc.lut_table0_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT0_AL);
-       out_be32(&im->mddrc.lut_table1_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT1_AU);
-       out_be32(&im->mddrc.lut_table1_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT1_AL);
-       out_be32(&im->mddrc.lut_table2_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT2_AU);
-       out_be32(&im->mddrc.lut_table2_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT2_AL);
-       out_be32(&im->mddrc.lut_table3_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT3_AU);
-       out_be32(&im->mddrc.lut_table3_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT3_AL);
-       out_be32(&im->mddrc.lut_table4_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT4_AU);
-       out_be32(&im->mddrc.lut_table4_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT4_AL);
-
-       /* Initialize MDDRC */
-       out_be32(&im->mddrc.ddr_sys_config, CONFIG_SYS_MDDRC_SYS_CFG);
-       out_be32(&im->mddrc.ddr_time_config0, CONFIG_SYS_MDDRC_TIME_CFG0);
-       out_be32(&im->mddrc.ddr_time_config1, CONFIG_SYS_MDDRC_TIME_CFG1);
-       out_be32(&im->mddrc.ddr_time_config2, CONFIG_SYS_MDDRC_TIME_CFG2);
-
-       /* Initialize DDR */
-       for (i = 0; i < 10; i++)
-               out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM2);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM2);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM3);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EN_DLL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_OCD_DEFAULT);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-
-       /* Start MDDRC */
-       out_be32(&im->mddrc.ddr_time_config0, CONFIG_SYS_MDDRC_TIME_CFG0_RUN);
-       out_be32(&im->mddrc.ddr_sys_config, CONFIG_SYS_MDDRC_SYS_CFG_RUN);
-
-       return msize;
-}
-
 int misc_init_r(void)
 {
        u32 tmp;
@@ -295,7 +181,6 @@ static  iopin_t ioregs_init[] = {
        },
 };
 
-
 int checkboard (void)
 {
        puts("Board: ARIA\n");
index 7f9d9bb..817970a 100644 (file)
@@ -25,6 +25,8 @@
  */
 
 #include <common.h>
+#include <nand.h>
+#include <asm/arch/nand_defs.h>
 #include <asm/arch/hardware.h>
 #include "../common/misc.h"
 
@@ -72,3 +74,29 @@ int misc_init_r(void)
 
        return(0);
 }
+
+#ifdef CONFIG_NAND_DAVINCI
+
+/* Set WP on deselect, write enable on select */
+static void nand_sonata_select_chip(struct mtd_info *mtd, int chip)
+{
+#define GPIO_SET_DATA01        0x01c67018
+#define GPIO_CLR_DATA01        0x01c6701c
+#define GPIO_NAND_WP   (1 << 4)
+#ifdef SONATA_BOARD_GPIOWP
+       if (chip < 0) {
+               REG(GPIO_CLR_DATA01) |= GPIO_NAND_WP;
+       } else {
+               REG(GPIO_SET_DATA01) |= GPIO_NAND_WP;
+       }
+#endif
+}
+
+int board_nand_init(struct nand_chip *nand)
+{
+       davinci_nand_init(nand);
+       nand->select_chip = nand_sonata_select_chip;
+       return 0;
+}
+
+#endif /* CONFIG_NAND_DAVINCI */
index 909b458..f591e32 100644 (file)
@@ -28,6 +28,7 @@
 #include <command.h>
 #include <asm/io.h>
 #include <asm/processor.h>
+#include <asm/mpc512x.h>
 #include <fdt_support.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -46,9 +47,6 @@ DECLARE_GLOBAL_DATA_PTR;
 #define SCCR2_CLOCKS_EN        (CLOCK_SCCR2_MEM_EN |   \
                         CLOCK_SCCR2_I2C_EN)
 
-#define CSAW_START(start)      ((start) & 0xFFFF0000)
-#define CSAW_STOP(start, size) (((start) + (size) - 1) >> 16)
-
 int eeprom_write_enable(unsigned dev_addr, int state)
 {
        volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR;
@@ -61,24 +59,14 @@ int eeprom_write_enable(unsigned dev_addr, int state)
        else
                clrbits_be32(&im->gpio.gpdat, 0x00100000);
 
-return 0;
-}
-
-/*
- * According to MPC5121e RM, configuring local access windows should
- * be followed by a dummy read of the config register that was
- * modified last and an isync.
- */
-static inline void sync_law(volatile void *addr)
-{
-       in_be32(addr);
-       __asm__ __volatile__ ("isync");
+       return 0;
 }
 
 int board_early_init_f(void)
 {
        volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR;
        u32 spridr;
+       int i;
 
        /*
         * Initialize Local Window for NOR FLASH access
@@ -129,14 +117,10 @@ int board_early_init_f(void)
        /*
         * Configure MSCAN clocks
         */
-       out_be32(&im->clk.m1ccr, 0x00300000);
-       out_be32(&im->clk.m2ccr, 0x00300000);
-       out_be32(&im->clk.m3ccr, 0x00300000);
-       out_be32(&im->clk.m4ccr, 0x00300000);
-       out_be32(&im->clk.m1ccr, 0x00310000);
-       out_be32(&im->clk.m2ccr, 0x00310000);
-       out_be32(&im->clk.m3ccr, 0x00310000);
-       out_be32(&im->clk.m4ccr, 0x00310000);
+       for (i=0; i<4; ++i) {
+               out_be32(&im->clk.msccr[i], 0x00300000);
+               out_be32(&im->clk.msccr[i], 0x00310000);
+       }
 
        /*
         * Configure GPIO's
@@ -149,93 +133,6 @@ int board_early_init_f(void)
        return 0;
 }
 
-/*
- * fixed sdram init:
- * The board doesn't use memory modules that have serial presence
- * detect or similar mechanism for discovery of the DRAM settings
- */
-long int fixed_sdram(void)
-{
-       volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR;
-       u32 msize = CONFIG_SYS_DDR_SIZE * 1024 * 1024;
-       u32 msize_log2 = __ilog2(msize);
-       u32 i;
-
-       /* Initialize IO Control */
-       out_be32(&im->io_ctrl.io_control_mem, IOCTRL_MUX_DDR);
-
-       /* Initialize DDR Local Window */
-       out_be32(&im->sysconf.ddrlaw.bar, CONFIG_SYS_DDR_BASE & 0xFFFFF000);
-       out_be32(&im->sysconf.ddrlaw.ar, msize_log2 - 1);
-       sync_law(&im->sysconf.ddrlaw.ar);
-
-       /* Enable DDR */
-       out_be32(&im->mddrc.ddr_sys_config, CONFIG_SYS_MDDRC_SYS_CFG_EN);
-
-       /* Initialize DDR Priority Manager */
-       out_be32(&im->mddrc.prioman_config1, CONFIG_SYS_MDDRCGRP_PM_CFG1);
-       out_be32(&im->mddrc.prioman_config2, CONFIG_SYS_MDDRCGRP_PM_CFG2);
-       out_be32(&im->mddrc.hiprio_config, CONFIG_SYS_MDDRCGRP_HIPRIO_CFG);
-       out_be32(&im->mddrc.lut_table0_main_upper, CONFIG_SYS_MDDRCGRP_LUT0_MU);
-       out_be32(&im->mddrc.lut_table0_main_lower, CONFIG_SYS_MDDRCGRP_LUT0_ML);
-       out_be32(&im->mddrc.lut_table1_main_upper, CONFIG_SYS_MDDRCGRP_LUT1_MU);
-       out_be32(&im->mddrc.lut_table1_main_lower, CONFIG_SYS_MDDRCGRP_LUT1_ML);
-       out_be32(&im->mddrc.lut_table2_main_upper, CONFIG_SYS_MDDRCGRP_LUT2_MU);
-       out_be32(&im->mddrc.lut_table2_main_lower, CONFIG_SYS_MDDRCGRP_LUT2_ML);
-       out_be32(&im->mddrc.lut_table3_main_upper, CONFIG_SYS_MDDRCGRP_LUT3_MU);
-       out_be32(&im->mddrc.lut_table3_main_lower, CONFIG_SYS_MDDRCGRP_LUT3_ML);
-       out_be32(&im->mddrc.lut_table4_main_upper, CONFIG_SYS_MDDRCGRP_LUT4_MU);
-       out_be32(&im->mddrc.lut_table4_main_lower, CONFIG_SYS_MDDRCGRP_LUT4_ML);
-       out_be32(&im->mddrc.lut_table0_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT0_AU);
-       out_be32(&im->mddrc.lut_table0_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT0_AL);
-       out_be32(&im->mddrc.lut_table1_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT1_AU);
-       out_be32(&im->mddrc.lut_table1_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT1_AL);
-       out_be32(&im->mddrc.lut_table2_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT2_AU);
-       out_be32(&im->mddrc.lut_table2_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT2_AL);
-       out_be32(&im->mddrc.lut_table3_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT3_AU);
-       out_be32(&im->mddrc.lut_table3_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT3_AL);
-       out_be32(&im->mddrc.lut_table4_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT4_AU);
-       out_be32(&im->mddrc.lut_table4_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT4_AL);
-
-       /* Initialize MDDRC */
-       out_be32(&im->mddrc.ddr_sys_config, CONFIG_SYS_MDDRC_SYS_CFG);
-       out_be32(&im->mddrc.ddr_time_config0, CONFIG_SYS_MDDRC_TIME_CFG0);
-       out_be32(&im->mddrc.ddr_time_config1, CONFIG_SYS_MDDRC_TIME_CFG1);
-       out_be32(&im->mddrc.ddr_time_config2, CONFIG_SYS_MDDRC_TIME_CFG2);
-
-       /* Initialize DDR */
-       for (i = 0; i < 10; i++)
-               out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM2);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM2);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM3);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EN_DLL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_OCD_DEFAULT);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-
-       /* Start MDDRC */
-       out_be32(&im->mddrc.ddr_time_config0, CONFIG_SYS_MDDRC_TIME_CFG0_RUN);
-       out_be32(&im->mddrc.ddr_sys_config, CONFIG_SYS_MDDRC_SYS_CFG_RUN);
-
-       return msize;
-}
-
 phys_size_t initdram(int board_type)
 {
        return get_ram_size(0, fixed_sdram());
diff --git a/board/espt/Makefile b/board/espt/Makefile
new file mode 100644 (file)
index 0000000..c79cba8
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# Copyright (C) 2009 Renesas Solutions Corp.
+# Copyright (C) 2009 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
+#
+# board/espt/Makefile
+#
+# 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).a
+
+COBJS  := espt.o
+SOBJS  := lowlevel_init.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/espt/config.mk b/board/espt/config.mk
new file mode 100644 (file)
index 0000000..006b432
--- /dev/null
@@ -0,0 +1,9 @@
+#
+# board/espt/config.mk
+#
+# TEXT_BASE refers to image _after_ relocation.
+#
+# NOTE: Must match value used in u-boot.lds (in this directory).
+#
+
+TEXT_BASE = 0x8FFC0000
diff --git a/board/espt/espt.c b/board/espt/espt.c
new file mode 100644 (file)
index 0000000..2930858
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2009 Renesas Solutions Corp.
+ * Copyright (C) 2009 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
+ *
+ * board/espt/espt.c
+ *
+ * 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/processor.h>
+
+int checkboard(void)
+{
+       puts("BOARD: ESPT-GIGA\n");
+       return 0;
+}
+
+int board_init(void)
+{
+       return 0;
+}
+
+int dram_init(void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       gd->bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
+       gd->bd->bi_memsize = CONFIG_SYS_SDRAM_SIZE;
+       printf("DRAM:  %dMB\n", CONFIG_SYS_SDRAM_SIZE / (1024 * 1024));
+       return 0;
+}
+
+void led_set_state(unsigned short value)
+{
+}
diff --git a/board/espt/lowlevel_init.S b/board/espt/lowlevel_init.S
new file mode 100644 (file)
index 0000000..7d5d72e
--- /dev/null
@@ -0,0 +1,334 @@
+/*
+ * Copyright (C) 2009 Renesas Solutions Corp.
+ * Copyright (C) 2009 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.com>
+ *
+ * board/espt/lowlevel_init.S
+ *
+ * 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/processor.h>
+#include <asm/macro.h>
+
+       .global lowlevel_init
+
+       .text
+       .align  2
+
+lowlevel_init:
+
+       write32 WDTCSR_A, WDTCSR_D
+
+       write32 WDTST_A, WDTST_D
+
+       write32 WDTBST_A, WDTBST_D
+
+       write32 CCR_A, CCR_CACHE_ICI_D
+
+       write32 MMUCR_A, MMU_CONTROL_TI_D
+
+       write32 MSTPCR0_A, MSTPCR0_D
+
+       write32 MSTPCR1_A, MSTPCR1_D
+
+       write32 RAMCR_A, RAMCR_D
+
+       /*
+        * Setting infomation from
+        * original ESPT-GIGA bootloader register
+        */
+       write32 MMSEL_A, MMSEL_D
+
+       /* dummy */
+       mov.l   @r1, r2
+       mov.l   @r1, r2
+       synco
+
+    write32 BCR_A, BCR_D
+
+    write32 CS0BCR_A, CS0BCR_D
+
+    write32 CS0WCR_A, CS0WCR_D
+
+       /*
+        * DDR-SDRAM setting
+        */
+
+       /* set DDR-SDRAM dummy read */
+       write32 MMSEL_A, MMSEL_D
+
+       mov.l   MMSEL_A, r0
+       synco
+       mov.l   @r0, r1
+       synco
+
+       mov.l   CS0_A, r0
+       synco
+       mov.l   @r0, r1
+       synco
+
+       /* set DDR-SDRAM bus/endian etc */
+       write32 MIM_U_A, MIM_U_D
+
+       write32 MIM_L_A, MIM_L_D0
+
+       write32 SDR_L_A, SDR_L_A_D0
+
+       write32 STR_L_A, STR_L_A_D0
+
+       /* DDR-SDRAM access control */
+       write32 MIM_L_A, MIM_L_D1
+
+       write32 SCR_L_A, SCR_L_A_D0
+
+       write32 SCR_L_A, SCR_L_A_D1
+
+       write32 EMRS_A, EMRS_D
+
+       write32 MRS1_A, MRS1_D
+
+       write32 MIM_U_A, MIM_U_D
+
+       write32 MIM_L_A, MIM_L_A_D2
+
+       write32 SCR_L_A, SCR_L_A_D2
+
+       write32 SCR_L_A, SCR_L_A_D2
+
+       write32 MRS2_A, MRS2_D
+
+       /* wait 200us */
+       wait_timer REPEAT_R3
+
+       /* GPIO setting */
+       write16 PSEL0_A, PSEL0_D
+
+       write16 PSEL1_A, PSEL1_D
+
+       write16 PSEL2_A, PSEL2_D
+
+       write16 PSEL3_A, PSEL3_D
+
+       write16 PSEL4_A, PSEL4_D
+
+       write8 PADR_A, PADR_D
+
+       write16 PACR_A, PACR_D
+
+       write8 PBDR_A, PBDR_D
+
+       write16 PBCR_A, PBCR_D
+
+       write8 PCDR_A, PCDR_D
+
+       write16 PCCR_A, PCCR_D
+
+       write8  PDDR_A, PDDR_D
+
+       write16 PDCR_A, PDCR_D
+
+       write16 PECR_A, PECR_D
+
+       write16 PFCR_A, PFCR_D
+
+       write16 PGCR_A, PGCR_D
+
+       write16 PHCR_A, PHCR_D
+
+       write16 PICR_A, PICR_D
+
+       write8 PJDR_A, PJDR_D
+
+       write16 PJCR_A, PJCR_D
+
+       /* wait 50us */
+       wait_timer REPEAT_R3
+
+       write8 PKDR_A, PKDR_D
+
+       write16 PKCR_A, PKCR_D
+
+       write16 PLCR_A, PLCR_D
+
+       write16 PMCR_A, PMCR_D
+
+       write16 PNCR_A, PNCR_D
+
+       write16 POCR_A, POCR_D
+
+
+       /* ICR0 ,ICR1 */
+       write32 ICR0_A, ICR0_D
+
+       write32 ICR1_A, ICR1_D
+
+       /* USB Host */
+       write32 USB_USBHSC_A, USB_USBHSC_D
+
+       write32 CCR_A, CCR_CACHE_D_2
+
+       rts
+       nop
+
+       .align  2
+
+/* GPIO Crontrol Register */
+PACR_A:        .long   0xFFEF0000
+PBCR_A:        .long   0xFFEF0002
+PCCR_A:        .long   0xFFEF0004
+PDCR_A:        .long   0xFFEF0006
+PECR_A:        .long   0xFFEF0008
+PFCR_A:        .long   0xFFEF000A
+PGCR_A:        .long   0xFFEF000C
+PHCR_A:        .long   0xFFEF000E
+PICR_A:        .long   0xFFEF0010
+PJCR_A:        .long   0xFFEF0012
+PKCR_A:        .long   0xFFEF0014
+PLCR_A:        .long   0xFFEF0016
+PMCR_A:        .long   0xFFEF0018
+PNCR_A:        .long   0xFFEF001A
+POCR_A:        .long   0xFFEF001C
+
+/* GPIO Data Register */
+PADR_A:        .long   0xFFEF0020
+PBDR_A:        .long   0xFFEF0022
+PCDR_A:        .long   0xFFEF0024
+PDDR_A:        .long   0xFFEF0026
+PJDR_A:        .long   0xFFEF0032
+PKDR_A:        .long   0xFFEF0034
+
+/* GPIO Set data */
+PADR_D:        .long   0x00000000
+PACR_D:        .long   0x00001400
+PBDR_D:        .long   0x00000000
+PBCR_D:        .long   0x0000555A
+PCDR_D:        .long   0x00000000
+PCCR_D:        .long   0x00005555
+PDDR_D:        .long   0x00000000
+PDCR_D:        .long   0x00000155
+PECR_D:        .long   0x00000000
+PFCR_D:        .long   0x00000000
+PGCR_D:        .long   0x00000000
+PHCR_D:        .long   0x00000000
+PICR_D:        .long   0x00000800
+PJDR_D:        .long   0x00000006
+PJCR_D:        .long   0x00005A57
+PKDR_D:        .long   0x00000000
+PKCR_D:        .long   0x0000FFF9
+PLCR_D:        .long   0x0000C330
+PMCR_D:        .long   0x0000FFFF
+PNCR_D:        .long   0x00000242
+POCR_D:        .long   0x00000000
+
+/* Pin Select */
+PSEL0_A:       .long   0xFFEF0070
+PSEL1_A:       .long   0xFFEF0072
+PSEL2_A:       .long   0xFFEF0074
+PSEL3_A:       .long   0xFFEF0076
+PSEL4_A:       .long   0xFFEF0078
+PSEL0_D:       .long   0x0001
+PSEL1_D:       .long   0x2400
+PSEL2_D:       .long   0x0000
+PSEL3_D:       .long   0x2421
+PSEL4_D:       .long   0x0000
+
+MMSEL_A:       .long   0xFE600020
+BCR_A:         .long   0xFF801000
+CS0BCR_A:      .long   0xFF802000
+CS0WCR_A:      .long   0xFF802008
+ICR0_A:                .long   0xFFD00000
+ICR1_A:                .long   0xFFD0001C
+
+MMSEL_D:       .long   0xA5A50000
+BCR_D:         .long   0x05000000
+CS0BCR_D:      .long   0x232306F0
+CS0WCR_D:      .long   0x00011104
+ICR0_D:                .long   0x80C00000
+ICR1_D:                .long   0x00020000
+
+/* RWBT Address */
+WDTST_A:       .long   0xFFCC0000
+WDTCSR_A:      .long   0xFFCC0004
+WDTBST_A:      .long   0xFFCC0008
+/* RWBT Data */
+WDTST_D:       .long   0x5A000FFF
+WDTCSR_D:      .long   0xA5000000
+WDTBST_D:      .long   0x55000000
+
+/* Cache Address */
+CCR_A:         .long   0xFF00001C
+MMUCR_A:       .long   0xFF000010
+RAMCR_A:       .long   0xFF000074
+
+/* Cache Data */
+CCR_CACHE_ICI_D:.long  0x00000800
+CCR_CACHE_D_2: .long   0x00000103
+MMU_CONTROL_TI_D:.long 0x00000004
+RAMCR_D:       .long   0x00000200
+
+/* Low power mode control Address */
+MSTPCR0_A:     .long   0xFFC80030
+MSTPCR1_A:     .long   0xFFC80038
+/* Low power mode control Data */
+MSTPCR0_D:     .long   0x00000000
+MSTPCR1_D:     .long   0x00000000
+
+REPEAT0_R3:    .long   0x00002000
+REPEAT_R3:     .long   0x00000200
+CS0_A:         .long   0xA8000000
+
+MIM_U_A:       .long   0xFE800008
+MIM_L_A:       .long   0xFE80000C
+SCR_U_A:       .long   0xFE800010
+SCR_L_A:       .long   0xFE800014
+STR_U_A:       .long   0xFE800018
+STR_L_A:       .long   0xFE80001C
+SDR_U_A:       .long   0xFE800030
+SDR_L_A:       .long   0xFE800034
+EMRS_A:                .long   0xFE902000
+MRS1_A:                .long   0xFE900B08
+MRS2_A:                .long   0xFE900308
+
+MIM_U_D:       .long   0x00000000
+MIM_L_D0:      .long   0x04100008
+MIM_L_D1:      .long   0x02EE0009
+MIM_L_D2:      .long   0x02EE0209
+
+SDR_L_A_D0:    .long   0x00000300
+STR_L_A_D0:    .long   0x00010040
+MIM_L_A_D1:    .long   0x04100009
+SCR_L_A_D0:    .long   0x00000003
+SCR_L_A_D1:    .long   0x00000002
+MIM_L_A_D2:    .long   0x04100209
+SCR_L_A_D2:    .long   0x00000004
+
+SCR_L_NORMAL:  .long   0x00000000
+SCR_L_NOP:             .long   0x00000001
+SCR_L_PALL:            .long   0x00000002
+SCR_L_CKE_EN:  .long   0x00000003
+SCR_L_CBR:             .long   0x00000004
+
+STR_L_D:       .long   0x000F3980
+SDR_L_D:       .long   0x00000400
+EMRS_D:                .long   0x00000000
+MRS1_D:                .long   0x00000000
+MRS2_D:                .long   0x00000000
+
+/* USB */
+USB_USBHSC_A:  .long   0xFFEC80F0
+USB_USBHSC_D:  .long   0x00000000
index ec74fd3..a0d7a82 100644 (file)
@@ -26,6 +26,7 @@
 #include <command.h>
 #include <asm/io.h>
 #include <asm/processor.h>
+#include <asm/mpc512x.h>
 #include <fdt_support.h>
 #ifdef CONFIG_MISC_INIT_R
 #include <i2c.h>
@@ -36,9 +37,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-extern int mpc5121_diu_init(void);
-extern void ide_set_reset(int idereset);
-
 /* Clocks in use */
 #define SCCR1_CLOCKS_EN        (CLOCK_SCCR1_CFG_EN |                           \
                         CLOCK_SCCR1_DDR_EN |                           \
@@ -56,10 +54,6 @@ extern void ide_set_reset(int idereset);
                         CLOCK_SCCR2_MEM_EN |           \
                         CLOCK_SCCR2_SPDIF_EN)
 
-#define CSAW_START(start)      ((start) & 0xFFFF0000)
-#define CSAW_STOP(start, size) (((start) + (size) - 1) >> 16)
-
-long int fixed_sdram(void);
 void __mpc5121_nfc_select_chip(struct mtd_info *mtd, int chip);
 
 /* Active chip number set in board_nand_select_device() (mpc5121_nfc.c) */
@@ -84,10 +78,10 @@ void mpc5121_nfc_select_chip(struct mtd_info *mtd, int chip)
        out_8(csreg, v);
 }
 
-int board_early_init_f (void)
+int board_early_init_f(void)
 {
        volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR;
-       u32 lpcaw, spridr;
+       u32 spridr;
 
        /*
         * Initialize Local Window for the CPLD registers access (CS2 selects
@@ -98,14 +92,7 @@ int board_early_init_f (void)
                CSAW_STOP(CONFIG_SYS_CPLD_BASE, CONFIG_SYS_CPLD_SIZE)
        );
        out_be32(&im->lpc.cs_cfg[2], CONFIG_SYS_CS2_CFG);
-
-       /*
-        * According to MPC5121e RM, configuring local access windows should
-        * be followed by a dummy read of the config register that was
-        * modified last and an isync
-        */
-       lpcaw = in_be32(&im->sysconf.lpcs6aw);
-       __asm__ __volatile__ ("isync");
+       sync_law(&im->sysconf.lpcs2aw);
 
        /*
         * Disable Boot NOR FLASH write protect - CPLD Reg 8 NOR FLASH Control
@@ -146,104 +133,11 @@ int board_early_init_f (void)
        return 0;
 }
 
-phys_size_t initdram (int board_type)
+phys_size_t initdram(int board_type)
 {
        u32 msize = 0;
 
-       msize = fixed_sdram ();
-
-       return msize;
-}
-
-/*
- * fixed sdram init -- the board doesn't use memory modules that have serial presence
- * detect or similar mechanism for discovery of the DRAM settings
- */
-long int fixed_sdram (void)
-{
-       volatile immap_t *im = (immap_t *) CONFIG_SYS_IMMR;
-       u32 msize = CONFIG_SYS_DDR_SIZE * 1024 * 1024;
-       u32 msize_log2 = __ilog2 (msize);
-       u32 i;
-
-       /* Initialize IO Control */
-       out_be32 (&im->io_ctrl.io_control_mem, IOCTRL_MUX_DDR);
-
-       /* Initialize DDR Local Window */
-       out_be32 (&im->sysconf.ddrlaw.bar, CONFIG_SYS_DDR_BASE & 0xFFFFF000);
-       out_be32 (&im->sysconf.ddrlaw.ar, msize_log2 - 1);
-
-       /*
-        * According to MPC5121e RM, configuring local access windows should
-        * be followed by a dummy read of the config register that was
-        * modified last and an isync
-        */
-       in_be32(&im->sysconf.ddrlaw.ar);
-       __asm__ __volatile__ ("isync");
-
-       /* Enable DDR */
-       out_be32(&im->mddrc.ddr_sys_config, CONFIG_SYS_MDDRC_SYS_CFG_EN);
-
-       /* Initialize DDR Priority Manager */
-       out_be32(&im->mddrc.prioman_config1, CONFIG_SYS_MDDRCGRP_PM_CFG1);
-       out_be32(&im->mddrc.prioman_config2, CONFIG_SYS_MDDRCGRP_PM_CFG2);
-       out_be32(&im->mddrc.hiprio_config, CONFIG_SYS_MDDRCGRP_HIPRIO_CFG);
-       out_be32(&im->mddrc.lut_table0_main_upper, CONFIG_SYS_MDDRCGRP_LUT0_MU);
-       out_be32(&im->mddrc.lut_table0_main_lower, CONFIG_SYS_MDDRCGRP_LUT0_ML);
-       out_be32(&im->mddrc.lut_table1_main_upper, CONFIG_SYS_MDDRCGRP_LUT1_MU);
-       out_be32(&im->mddrc.lut_table1_main_lower, CONFIG_SYS_MDDRCGRP_LUT1_ML);
-       out_be32(&im->mddrc.lut_table2_main_upper, CONFIG_SYS_MDDRCGRP_LUT2_MU);
-       out_be32(&im->mddrc.lut_table2_main_lower, CONFIG_SYS_MDDRCGRP_LUT2_ML);
-       out_be32(&im->mddrc.lut_table3_main_upper, CONFIG_SYS_MDDRCGRP_LUT3_MU);
-       out_be32(&im->mddrc.lut_table3_main_lower, CONFIG_SYS_MDDRCGRP_LUT3_ML);
-       out_be32(&im->mddrc.lut_table4_main_upper, CONFIG_SYS_MDDRCGRP_LUT4_MU);
-       out_be32(&im->mddrc.lut_table4_main_lower, CONFIG_SYS_MDDRCGRP_LUT4_ML);
-       out_be32(&im->mddrc.lut_table0_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT0_AU);
-       out_be32(&im->mddrc.lut_table0_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT0_AL);
-       out_be32(&im->mddrc.lut_table1_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT1_AU);
-       out_be32(&im->mddrc.lut_table1_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT1_AL);
-       out_be32(&im->mddrc.lut_table2_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT2_AU);
-       out_be32(&im->mddrc.lut_table2_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT2_AL);
-       out_be32(&im->mddrc.lut_table3_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT3_AU);
-       out_be32(&im->mddrc.lut_table3_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT3_AL);
-       out_be32(&im->mddrc.lut_table4_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT4_AU);
-       out_be32(&im->mddrc.lut_table4_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT4_AL);
-
-       /* Initialize MDDRC */
-       out_be32(&im->mddrc.ddr_sys_config, CONFIG_SYS_MDDRC_SYS_CFG);
-       out_be32(&im->mddrc.ddr_time_config0, CONFIG_SYS_MDDRC_TIME_CFG0);
-       out_be32(&im->mddrc.ddr_time_config1, CONFIG_SYS_MDDRC_TIME_CFG1);
-       out_be32(&im->mddrc.ddr_time_config2, CONFIG_SYS_MDDRC_TIME_CFG2);
-
-       /* Initialize DDR */
-       for (i = 0; i < 10; i++)
-               out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM2);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM2);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM3);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EN_DLL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_OCD_DEFAULT);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
-       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
-
-       /* Start MDDRC */
-       out_be32(&im->mddrc.ddr_time_config0, CONFIG_SYS_MDDRC_TIME_CFG0_RUN);
-       out_be32(&im->mddrc.ddr_sys_config, CONFIG_SYS_MDDRC_SYS_CFG_RUN);
+       msize = fixed_sdram();
 
        return msize;
 }
diff --git a/board/ms7720se/u-boot.lds b/board/ms7720se/u-boot.lds
deleted file mode 100644 (file)
index 1f9b792..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyrigth (c) 2007
- * Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
- *
- * Copyrigth (c) 2007
- * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- *
- * 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-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
-OUTPUT_ARCH(sh)
-ENTRY(_start)
-
-SECTIONS
-{
-       /*
-          Base address of internal SDRAM is 0x0C000000.
-          Although size of SDRAM can be either 16 or 32 MBytes,
-          we assume 16 MBytes (ie ignore upper half if the full
-          32 MBytes is present).
-
-          NOTE: This address must match with the definition of
-          TEXT_BASE in config.mk (in this directory).
-
-       */
-       . = 0x8C000000 + (64*1024*1024) - (256*1024);
-
-       PROVIDE (reloc_dst = .);
-
-       PROVIDE (_ftext = .);
-       PROVIDE (_fcode = .);
-       PROVIDE (_start = .);
-
-       .text :
-       {
-               cpu/sh3/start.o         (.text)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenv)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenvr)
-               . = ALIGN(8192);
-               *(.text)
-               . = ALIGN(4);
-       } =0xFF
-       PROVIDE (_ecode = .);
-       .rodata :
-       {
-               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
-               . = ALIGN(4);
-       }
-       PROVIDE (_etext = .);
-
-
-       PROVIDE (_fdata = .);
-       .data :
-       {
-               *(.data)
-               . = ALIGN(4);
-       }
-       PROVIDE (_edata = .);
-
-       PROVIDE (_fgot = .);
-       .got :
-       {
-               *(.got)
-               . = ALIGN(4);
-       }
-       PROVIDE (_egot = .);
-
-       PROVIDE (__u_boot_cmd_start = .);
-       .u_boot_cmd :
-       {
-               *(.u_boot_cmd)
-               . = ALIGN(4);
-       }
-       PROVIDE (__u_boot_cmd_end = .);
-
-       PROVIDE (reloc_dst_end = .);
-       /* _reloc_dst_end = .; */
-
-       PROVIDE (bss_start = .);
-       PROVIDE (__bss_start = .);
-       .bss :
-       {
-               *(.bss)
-               . = ALIGN(4);
-       }
-       PROVIDE (bss_end = .);
-
-       PROVIDE (_end = .);
-}
diff --git a/board/ms7722se/u-boot.lds b/board/ms7722se/u-boot.lds
deleted file mode 100644 (file)
index 7b0fb67..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyrigth (c) 2007
- * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- *
- * 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-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
-OUTPUT_ARCH(sh)
-ENTRY(_start)
-
-SECTIONS
-{
-       /*
-          Base address of internal SDRAM is 0x0C000000.
-          Although size of SDRAM can be either 16 or 32 MBytes,
-          we assume 16 MBytes (ie ignore upper half if the full
-          32 MBytes is present).
-
-          NOTE: This address must match with the definition of
-          TEXT_BASE in config.mk (in this directory).
-
-       */
-       . = 0x8C000000 + (64*1024*1024) - (256*1024);
-
-       PROVIDE (reloc_dst = .);
-
-       PROVIDE (_ftext = .);
-       PROVIDE (_fcode = .);
-       PROVIDE (_start = .);
-
-       .text :
-       {
-               cpu/sh4/start.o         (.text)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenv)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenvr)
-               . = ALIGN(8192);
-               *(.text)
-               . = ALIGN(4);
-       } =0xFF
-       PROVIDE (_ecode = .);
-       .rodata :
-       {
-               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
-               . = ALIGN(4);
-       }
-       PROVIDE (_etext = .);
-
-
-       PROVIDE (_fdata = .);
-       .data :
-       {
-               *(.data)
-               . = ALIGN(4);
-       }
-       PROVIDE (_edata = .);
-
-       PROVIDE (_fgot = .);
-       .got :
-       {
-               *(.got)
-               . = ALIGN(4);
-       }
-       PROVIDE (_egot = .);
-
-       PROVIDE (__u_boot_cmd_start = .);
-       .u_boot_cmd :
-       {
-               *(.u_boot_cmd)
-               . = ALIGN(4);
-       }
-       PROVIDE (__u_boot_cmd_end = .);
-
-       PROVIDE (reloc_dst_end = .);
-       /* _reloc_dst_end = .; */
-
-       PROVIDE (bss_start = .);
-       PROVIDE (__bss_start = .);
-       .bss (NOLOAD) :
-       {
-               *(.bss)
-               . = ALIGN(4);
-       }
-       PROVIDE (bss_end = .);
-
-       PROVIDE (_end = .);
-}
diff --git a/board/ms7750se/u-boot.lds b/board/ms7750se/u-boot.lds
deleted file mode 100644 (file)
index 7b0fb67..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyrigth (c) 2007
- * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- *
- * 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-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
-OUTPUT_ARCH(sh)
-ENTRY(_start)
-
-SECTIONS
-{
-       /*
-          Base address of internal SDRAM is 0x0C000000.
-          Although size of SDRAM can be either 16 or 32 MBytes,
-          we assume 16 MBytes (ie ignore upper half if the full
-          32 MBytes is present).
-
-          NOTE: This address must match with the definition of
-          TEXT_BASE in config.mk (in this directory).
-
-       */
-       . = 0x8C000000 + (64*1024*1024) - (256*1024);
-
-       PROVIDE (reloc_dst = .);
-
-       PROVIDE (_ftext = .);
-       PROVIDE (_fcode = .);
-       PROVIDE (_start = .);
-
-       .text :
-       {
-               cpu/sh4/start.o         (.text)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenv)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenvr)
-               . = ALIGN(8192);
-               *(.text)
-               . = ALIGN(4);
-       } =0xFF
-       PROVIDE (_ecode = .);
-       .rodata :
-       {
-               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
-               . = ALIGN(4);
-       }
-       PROVIDE (_etext = .);
-
-
-       PROVIDE (_fdata = .);
-       .data :
-       {
-               *(.data)
-               . = ALIGN(4);
-       }
-       PROVIDE (_edata = .);
-
-       PROVIDE (_fgot = .);
-       .got :
-       {
-               *(.got)
-               . = ALIGN(4);
-       }
-       PROVIDE (_egot = .);
-
-       PROVIDE (__u_boot_cmd_start = .);
-       .u_boot_cmd :
-       {
-               *(.u_boot_cmd)
-               . = ALIGN(4);
-       }
-       PROVIDE (__u_boot_cmd_end = .);
-
-       PROVIDE (reloc_dst_end = .);
-       /* _reloc_dst_end = .; */
-
-       PROVIDE (bss_start = .);
-       PROVIDE (__bss_start = .);
-       .bss (NOLOAD) :
-       {
-               *(.bss)
-               . = ALIGN(4);
-       }
-       PROVIDE (bss_end = .);
-
-       PROVIDE (_end = .);
-}
index 8f0838c..f06ee5b 100644 (file)
@@ -107,15 +107,6 @@ const omap3_sysinfo sysinfo = {
  MUX_VAL(CP(GPMC_D15),         (IEN  | PTD | DIS | M0)) /*GPMC_D15*/\
  MUX_VAL(CP(GPMC_NCS0),                (IDIS | PTU | EN  | M0)) /*GPMC_nCS0*/\
  MUX_VAL(CP(GPMC_NCS1),                (IDIS | PTU | EN  | M0)) /*GPMC_nCS1*/\
- MUX_VAL(CP(GPMC_NCS2),                (IDIS | PTU | EN  | M0)) /*GPMC_nCS2*/\
- MUX_VAL(CP(GPMC_NCS3),                (IDIS | PTU | EN  | M0)) /*GPMC_nCS3*/\
- MUX_VAL(CP(GPMC_NCS4),                (IDIS | PTU | EN  | M0))\
- MUX_VAL(CP(GPMC_NCS5),                (IDIS | PTD | DIS | M0))\
- MUX_VAL(CP(GPMC_NCS6),                (IEN  | PTD | DIS | M1))\
- MUX_VAL(CP(GPMC_NCS7),                (IEN  | PTU | EN  | M1))\
- MUX_VAL(CP(GPMC_NBE1),                (IEN  | PTD | DIS | M0))\
- MUX_VAL(CP(GPMC_WAIT2),       (IEN  | PTU | EN  | M0))\
- MUX_VAL(CP(GPMC_WAIT3),       (IEN  | PTU | EN  | M0))\
  MUX_VAL(CP(GPMC_CLK),         (IDIS | PTD | DIS | M0)) /*GPMC_CLK*/\
  MUX_VAL(CP(GPMC_NADV_ALE),    (IDIS | PTD | DIS | M0)) /*GPMC_nADV_ALE*/\
  MUX_VAL(CP(GPMC_NOE),         (IDIS | PTD | DIS | M0)) /*GPMC_nOE*/\
@@ -154,26 +145,26 @@ const omap3_sysinfo sysinfo = {
  MUX_VAL(CP(DSS_DATA22),       (IDIS | PTD | DIS | M0)) /*DSS_DATA22*/\
  MUX_VAL(CP(DSS_DATA23),       (IDIS | PTD | DIS | M0)) /*DSS_DATA23*/\
  /*GPIO based game buttons*/\
- MUX_VAL(CP(CAM_XCLKA),                (IEN  | PTU | DIS | M4)) /*GPIO_96 - LEFT*/\
- MUX_VAL(CP(CAM_PCLK),         (IEN  | PTU | DIS | M4)) /*GPIO_97 - L2*/\
- MUX_VAL(CP(CAM_FLD),          (IEN  | PTU | DIS | M4)) /*GPIO_98 - RIGHT*/\
- MUX_VAL(CP(CAM_D0),           (IEN  | PTU | DIS | M4)) /*GPIO_99 - MENU*/\
- MUX_VAL(CP(CAM_D1),           (IEN  | PTU | DIS | M4)) /*GPIO_100 - START*/\
- MUX_VAL(CP(CAM_D2),           (IEN  | PTU | DIS | M4)) /*GPIO_101 - Y*/\
- MUX_VAL(CP(CAM_D3),           (IEN  | PTU | DIS | M4)) /*GPIO_102 - L1*/\
- MUX_VAL(CP(CAM_D4),           (IEN  | PTU | DIS | M4)) /*GPIO_103 - DOWN*/\
- MUX_VAL(CP(CAM_D5),           (IEN  | PTU | DIS | M4)) /*GPIO_104 - SELECT*/\
- MUX_VAL(CP(CAM_D6),           (IEN  | PTU | DIS | M4)) /*GPIO_105 - R1*/\
- MUX_VAL(CP(CAM_D7),           (IEN  | PTU | DIS | M4)) /*GPIO_106 - B*/\
- MUX_VAL(CP(CAM_D8),           (IEN  | PTU | DIS | M4)) /*GPIO_107 - R2*/\
- MUX_VAL(CP(CAM_D10),          (IEN  | PTU | DIS | M4)) /*GPIO_109 - X*/\
- MUX_VAL(CP(CAM_D11),          (IEN  | PTU | DIS | M4)) /*GPIO_110 - UP*/\
- MUX_VAL(CP(CAM_XCLKB),                (IEN  | PTU | DIS | M4)) /*GPIO_111 - A*/\
+ MUX_VAL(CP(CAM_XCLKA),                (IEN  | PTD | DIS | M4)) /*GPIO_96 - LEFT*/\
+ MUX_VAL(CP(CAM_PCLK),         (IEN  | PTD | DIS | M4)) /*GPIO_97 - L2*/\
+ MUX_VAL(CP(CAM_FLD),          (IEN  | PTD | DIS | M4)) /*GPIO_98 - RIGHT*/\
+ MUX_VAL(CP(CAM_D0),           (IEN  | PTD | DIS | M4)) /*GPIO_99 - MENU*/\
+ MUX_VAL(CP(CAM_D1),           (IEN  | PTD | DIS | M4)) /*GPIO_100 - START*/\
+ MUX_VAL(CP(CAM_D2),           (IEN  | PTD | DIS | M4)) /*GPIO_101 - Y*/\
+ MUX_VAL(CP(CAM_D3),           (IEN  | PTD | DIS | M4)) /*GPIO_102 - L1*/\
+ MUX_VAL(CP(CAM_D4),           (IEN  | PTD | DIS | M4)) /*GPIO_103 - DOWN*/\
+ MUX_VAL(CP(CAM_D5),           (IEN  | PTD | DIS | M4)) /*GPIO_104 - SELECT*/\
+ MUX_VAL(CP(CAM_D6),           (IEN  | PTD | DIS | M4)) /*GPIO_105 - R1*/\
+ MUX_VAL(CP(CAM_D7),           (IEN  | PTD | DIS | M4)) /*GPIO_106 - B*/\
+ MUX_VAL(CP(CAM_D8),           (IEN  | PTD | DIS | M4)) /*GPIO_107 - R2*/\
+ MUX_VAL(CP(CAM_D10),          (IEN  | PTD | DIS | M4)) /*GPIO_109 - X*/\
+ MUX_VAL(CP(CAM_D11),          (IEN  | PTD | DIS | M4)) /*GPIO_110 - UP*/\
+ MUX_VAL(CP(CAM_XCLKB),                (IEN  | PTD | DIS | M4)) /*GPIO_111 - A*/\
  /*Audio Interface To External DAC (Headphone, Speakers)*/\
  MUX_VAL(CP(MCBSP2_FSX),       (IDIS | PTD | DIS | M0)) /*McBSP2_FSX*/\
  MUX_VAL(CP(MCBSP2_CLKX),      (IDIS | PTD | DIS | M0)) /*McBSP2_CLKX*/\
  MUX_VAL(CP(MCBSP2_DX),                (IDIS | PTD | DIS | M0)) /*McBSP2_DX*/\
- MUX_VAL(CP(MCBSP_CLKS),       (IEN  | PTU | DIS | M0)) /*McBSP_CLKS*/\
+ MUX_VAL(CP(MCBSP_CLKS),       (IEN  | PTD | DIS | M0)) /*McBSP_CLKS*/\
  MUX_VAL(CP(MCBSP2_DR),                (IDIS | PTD | DIS | M4)) /*GPIO_118*/\
                                                         /* - nPOWERDOWN_DAC*/\
  /*Expansion card 1*/\
@@ -219,13 +210,13 @@ const omap3_sysinfo sysinfo = {
  MUX_VAL(CP(MCBSP4_DX),                (IDIS | PTD | DIS | M0)) /*McBSP4_DX*/\
  MUX_VAL(CP(MCBSP4_FSX),       (IEN  | PTD | DIS | M0)) /*McBSP4_FSX*/\
  /*GPIO definitions for muxed pins on AV connector*/\
- MUX_VAL(CP(UART2_CTS),                (IEN  | PTU | EN  | M4)) /*GPIO_144,*/\
+ MUX_VAL(CP(UART2_CTS),                (IEN  | PTD | EN  | M4)) /*GPIO_144,*/\
                                                         /*UART2_CTS*/\
- MUX_VAL(CP(UART2_RTS),                (IEN  | PTU | DIS | M4)) /*GPIO_145,*/\
+ MUX_VAL(CP(UART2_RTS),                (IEN  | PTD | EN  | M4)) /*GPIO_145,*/\
                                                         /*UART2_RTS*/\
- MUX_VAL(CP(UART2_TX),         (IEN  | PTU | EN  | M4)) /*GPIO_146,*/\
+ MUX_VAL(CP(UART2_TX),         (IEN  | PTD | EN  | M4)) /*GPIO_146,*/\
                                                         /*UART2_TX*/\
- MUX_VAL(CP(UART2_RX),         (IEN  | PTD | DIS | M4)) /*GPIO_147,*/\
+ MUX_VAL(CP(UART2_RX),         (IEN  | PTD | EN  | M4)) /*GPIO_147,*/\
                                                         /*UART2_RX*/\
  /*Serial Interface (Peripheral boot, Linux console, on AV connector)*/\
  MUX_VAL(CP(UART3_RX_IRRX),    (IEN  | PTD | DIS | M0)) /*UART3_RX*/\
@@ -240,30 +231,26 @@ const omap3_sysinfo sysinfo = {
  MUX_VAL(CP(MCBSP1_DR),                (IDIS | PTD | DIS | M4)) /*GPIO_159*/\
                                                         /* - LED_WIFI*/\
  /*Switches*/\
- MUX_VAL(CP(MCSPI1_CS2),       (IEN  | PTU | DIS | M4)) /*GPIO_176*/\
+ MUX_VAL(CP(MCSPI1_CS2),       (IEN  | PTD | DIS | M4)) /*GPIO_176*/\
                                                         /* - nHOLD_SWITCH*/\
- MUX_VAL(CP(CAM_D9),           (IEN  | PTU | DIS | M4)) /*GPIO_108*/\
+ MUX_VAL(CP(CAM_D9),           (IEN  | PTD | DIS | M4)) /*GPIO_108*/\
                                                         /* - nLID_SWITCH*/\
  /*External IRQs*/\
- MUX_VAL(CP(CAM_HS),           (IEN  | PTU | DIS | M4)) /*GPIO_94*/\
+ MUX_VAL(CP(CAM_HS),           (IEN  | PTD | DIS | M4)) /*GPIO_94*/\
                                                         /* - nTOUCH_IRQ*/\
  MUX_VAL(CP(ETK_D7_ES2),       (IEN  | PTD | DIS | M4)) /*GPIO_21*/\
                                                         /* - WIFI_IRQ*/\
  MUX_VAL(CP(MCBSP1_FSX),       (IEN  | PTD | DIS | M4)) /*GPIO_161*/\
                                                         /* - nIRQ_NUB1*/\
- MUX_VAL(CP(CAM_WEN),          (IEN  | PTU | DIS | M4)) /*GPIO_167*/\
+ MUX_VAL(CP(MCBSP1_CLKX),      (IEN  | PTD | DIS | M4)) /*GPIO_162*/\
                                                         /* - nIRQ_NUB2*/\
  /*Various other stuff*/\
- MUX_VAL(CP(CAM_VS),           (IEN  | PTU | DIS | M4)) /*GPIO_95*/\
-                                                        /* - nTOUCH_BUSY*/\
  MUX_VAL(CP(UART3_CTS_RCTX),   (IEN  | PTD | DIS | M4)) /*GPIO_163*/\
                                                         /* - nOC_USB5*/\
- MUX_VAL(CP(MCBSP1_CLKX),      (IDIS | PTD | DIS | M4)) /*GPIO_162*/\
-                                                        /* - START_ADC*/\
  MUX_VAL(CP(ETK_D8_ES2),       (IEN  | PTD | DIS | M4)) /*GPIO_22*/\
                                                         /* - MSECURE*/\
- MUX_VAL(CP(CAM_STROBE),       (IEN  | PTU | DIS | M4)) /*GPIO_126*/\
-                                                        /* - HP_DETECT*/\
+ MUX_VAL(CP(CSI2_DY1),         (IEN  | PTD | DIS | M4)) /*GPIO_115*/\
+                                                        /* - POP_OVERHEAT*/\
  /*External Resets and Enables*/\
  MUX_VAL(CP(ETK_D0_ES2),       (IDIS | PTD | DIS | M4)) /*GPIO_14*/\
                                                         /* - nHDPHN_SHUTDOWN*/\
@@ -275,16 +262,15 @@ const omap3_sysinfo sysinfo = {
                                                         /* - nLCD_RESET*/\
  MUX_VAL(CP(MCBSP1_CLKR),      (IDIS | PTD | DIS | M4)) /*GPIO_156*/\
                                                         /* - RESET_NUBS*/\
- MUX_VAL(CP(UART3_RTS_SD),     (IDIS | PTU | EN  | M4)) /*GPIO_164*/\
+ MUX_VAL(CP(UART3_RTS_SD),     (IDIS | PTD | DIS | M4)) /*GPIO_164*/\
                                                         /* - EN_USB_5V*/\
- /*Unused*/\
- MUX_VAL(CP(HDQ_SIO),          (IEN  | PTU | EN  | M0)) /*HDQ_SIO - NC*/\
- MUX_VAL(CP(CSI2_DX0),         (IEN  | PTD | DIS | M0)) /*CSI2_DX0 - NC*/\
- MUX_VAL(CP(CSI2_DY0),         (IEN  | PTD | DIS | M0)) /*CSI2_DY0 - NC*/\
- MUX_VAL(CP(CSI2_DX1),         (IEN  | PTD | DIS | M0)) /*CSI2_DX1 - NC*/\
- MUX_VAL(CP(CSI2_DY1),         (IEN  | PTD | DIS | M0)) /*CSI2_DY1 - NC*/\
- MUX_VAL(CP(I2C2_SCL),         (IEN  | PTU | EN  | M0)) /*I2C2_SCL - NC*/\
- MUX_VAL(CP(I2C2_SDA),         (IEN  | PTU | EN  | M0)) /*I2C2_SDA - NC*/\
+ /*Spare GPIOs*/\
+ MUX_VAL(CP(GPMC_NCS7),                (IEN  | PTD | EN  | M4)) /*GPIO_58*/\
+ MUX_VAL(CP(GPMC_WAIT2),       (IEN  | PTD | EN  | M4)) /*GPIO_64*/\
+ MUX_VAL(CP(GPMC_WAIT3),       (IEN  | PTD | EN  | M4)) /*GPIO_65*/\
+ MUX_VAL(CP(CAM_VS),           (IEN  | PTU | EN  | M4)) /*GPIO_95*/\
+ MUX_VAL(CP(CAM_WEN),          (IEN  | PTD | EN  | M4)) /*GPIO_167*/\
+ MUX_VAL(CP(HDQ_SIO),          (IEN  | PTD | EN  | M4)) /*GPIO_170*/\
  /*HS USB OTG Port (connects to HSUSB0)*/\
  MUX_VAL(CP(HSUSB0_CLK),       (IEN  | PTD | DIS | M0)) /*HSUSB0_CLK*/\
  MUX_VAL(CP(HSUSB0_STP),       (IDIS | PTU | EN  | M0)) /*HSUSB0_STP*/\
@@ -338,8 +324,6 @@ const omap3_sysinfo sysinfo = {
  MUX_VAL(CP(SYS_BOOT5),                (IEN  | PTD | DIS | M4)) /*GPIO_7*/\
  MUX_VAL(CP(SYS_BOOT6),                (IEN  | PTD | DIS | M4)) /*GPIO_8*/\
  MUX_VAL(CP(SYS_OFF_MODE),     (IEN  | PTD | DIS | M0)) /*SYS_OFF_MODE*/\
- MUX_VAL(CP(SYS_CLKOUT1),      (IEN  | PTD | DIS | M4)) /*SYS_CLKOUT1 - NC*/\
- MUX_VAL(CP(SYS_CLKOUT2),      (IEN  | PTD | DIS | M4)) /*SYS_CLKOUT2 - NC*/\
  /*JTAG*/\
  MUX_VAL(CP(JTAG_nTRST),       (IEN  | PTD | DIS | M0)) /*JTAG_nTRST*/\
  MUX_VAL(CP(JTAG_TCK),         (IEN  | PTD | DIS | M0)) /*JTAG_TCK*/\
@@ -412,6 +396,6 @@ const omap3_sysinfo sysinfo = {
  MUX_VAL(CP(D2D_MBUSFLAG),     (IEN  | PTD | DIS | M0)) /*d2d_mbusflag*/\
  MUX_VAL(CP(D2D_SBUSFLAG),     (IEN  | PTD | DIS | M0)) /*d2d_sbusflag*/\
  MUX_VAL(CP(SDRC_CKE0),                (IDIS | PTU | EN  | M0)) /*sdrc_cke0*/\
- MUX_VAL(CP(SDRC_CKE1),                (IDIS | PTD | DIS | M7)) /*sdrc_cke1*/
+ MUX_VAL(CP(SDRC_CKE1),                (IDIS | PTU | EN  | M0)) /*sdrc_cke1*/
 
 #endif
diff --git a/board/phytec/pcm030/Makefile b/board/phytec/pcm030/Makefile
new file mode 100644 (file)
index 0000000..22ce8e6
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# (C) Copyright 2003-2007
+# 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).a
+
+COBJS  := $(BOARD).o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak $(obj).depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/phytec/pcm030/config.mk b/board/phytec/pcm030/config.mk
new file mode 100644 (file)
index 0000000..92fecc6
--- /dev/null
@@ -0,0 +1,41 @@
+#
+# (C) Copyright 2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+#
+# phyCORE-MPC5200B tiny board:
+#
+#      Valid values for TEXT_BASE are:
+#
+#      0xFFF00000   boot high (standard configuration)
+#      0xFF000000   boot low
+#      0x00100000   boot from RAM (for testing only)
+#
+
+sinclude $(TOPDIR)/board/$(BOARDDIR)/config.tmp
+
+ifndef TEXT_BASE
+## Standard: boot high
+TEXT_BASE = 0xFFF00000
+endif
+
+PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE) -I$(TOPDIR)/board
diff --git a/board/phytec/pcm030/mt46v32m16-75.h b/board/phytec/pcm030/mt46v32m16-75.h
new file mode 100644 (file)
index 0000000..d69c09c
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * (C) Copyright 2004
+ * Mark Jonas, Freescale Semiconductor, mark.jonas@motorola.com.
+ *
+ * Eric Schumann, Phytec Messtechnik
+ * adapted for mt46v32m16-75 DDR-RAM
+ *
+ * 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
+ */
+
+#define SDRAM_DDR      1               /* is DDR */
+
+/* Settings for XLB = 132 MHz */
+
+#define SDRAM_MODE     0x018D0000
+#define SDRAM_EMODE    0x40090000
+#define SDRAM_CONTROL  0x71500F00
+#define SDRAM_CONFIG1  0x73711930
+#define SDRAM_CONFIG2  0x47770000
+
+#define SDRAM_TAPDELAY 0x10000000 /* reserved Bit in MPC5200 B3-Step */
diff --git a/board/phytec/pcm030/pcm030.c b/board/phytec/pcm030/pcm030.c
new file mode 100644 (file)
index 0000000..6a93874
--- /dev/null
@@ -0,0 +1,220 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * (C) Copyright 2004
+ * Mark Jonas, Freescale Semiconductor, mark.jonas@motorola.com.
+ *
+ * (C) Copyright 2006
+ * Eric Schumann, Phytec Messtechnik GmbH
+ *
+ * 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 <mpc5xxx.h>
+#include <pci.h>
+#include <asm-ppc/io.h>
+
+#include "mt46v32m16-75.h"
+
+#ifndef CONFIG_SYS_RAMBOOT
+static void sdram_start(int hi_addr)
+{
+       volatile struct mpc5xxx_cdm *cdm =
+               (struct mpc5xxx_cdm *)MPC5XXX_CDM;
+       volatile struct mpc5xxx_sdram *sdram =
+               (struct mpc5xxx_sdram *)MPC5XXX_SDRAM;
+
+       long hi_addr_bit = hi_addr ? 0x01000000 : 0;
+
+       /* unlock mode register */
+       out_be32 (&sdram->ctrl,
+               (SDRAM_CONTROL | 0x80000000 | hi_addr_bit));
+
+       /* precharge all banks */
+       out_be32 (&sdram->ctrl,
+               (SDRAM_CONTROL | 0x80000002 | hi_addr_bit));
+
+#ifdef SDRAM_DDR
+       /* set mode register: extended mode */
+       out_be32 (&sdram->mode, (SDRAM_EMODE));
+
+       /* set mode register: reset DLL */
+       out_be32 (&sdram->mode,
+               (SDRAM_MODE | 0x04000000));
+#endif
+
+       /* precharge all banks */
+       out_be32 (&sdram->ctrl,
+               (SDRAM_CONTROL | 0x80000002 | hi_addr_bit));
+
+       /* auto refresh */
+       out_be32 (&sdram->ctrl,
+               (SDRAM_CONTROL | 0x80000004 | hi_addr_bit));
+
+       /* set mode register */
+       out_be32 (&sdram->mode, (SDRAM_MODE));
+
+       /* normal operation */
+       out_be32 (&sdram->ctrl,
+               (SDRAM_CONTROL | hi_addr_bit));
+
+       /* set CDM clock enable register, set MPC5200B SDRAM bus */
+       /* to reduced driver strength */
+       out_be32 (&cdm->clock_enable, (0x00CFFFFF));
+}
+#endif
+
+/*
+ * ATTENTION: Although partially referenced initdram does NOT make
+ *     real use of CONFIG_SYS_SDRAM_BASE. The code does not
+ *     work if CONFIG_SYS_SDRAM_BASE
+ *     is something else than 0x00000000.
+ */
+
+phys_size_t initdram(int board_type)
+{
+       volatile struct mpc5xxx_mmap_ctl *mm =
+               (struct mpc5xxx_mmap_ctl *)CONFIG_SYS_MBAR;
+       volatile struct mpc5xxx_cdm *cdm =
+               (struct mpc5xxx_cdm *)MPC5XXX_CDM;
+       volatile struct mpc5xxx_sdram *sdram =
+               (struct mpc5xxx_sdram *)MPC5XXX_SDRAM;
+       ulong dramsize = 0;
+       ulong dramsize2 = 0;
+#ifndef CONFIG_SYS_RAMBOOT
+       ulong test1, test2;
+
+       /* setup SDRAM chip selects */
+                                                        /* 256MB at 0x0 */
+       out_be32 (&mm->sdram0, 0x0000001b);
+                                                        /* disabled */
+       out_be32 (&mm->sdram1, 0x10000000);
+
+       /* setup config registers */
+       out_be32 (&sdram->config1, SDRAM_CONFIG1);
+       out_be32 (&sdram->config2, SDRAM_CONFIG2);
+
+#if defined(SDRAM_DDR) && defined(SDRAM_TAPDELAY)
+       /* set tap delay */
+       out_be32 (&cdm->porcfg, SDRAM_TAPDELAY);
+#endif
+
+       /* find RAM size using SDRAM CS0 only */
+       sdram_start(0);
+       test1 = get_ram_size((long *) CONFIG_SYS_SDRAM_BASE, 0x10000000);
+       sdram_start(1);
+       test2 = get_ram_size((long *) CONFIG_SYS_SDRAM_BASE, 0x10000000);
+       if (test1 > test2) {
+               sdram_start(0);
+               dramsize = test1;
+       } else
+               dramsize = test2;
+
+       /* memory smaller than 1MB is impossible */
+       if (dramsize < (1 << 20))
+               dramsize = 0;
+
+       /* set SDRAM CS0 size according to the amount of RAM found */
+       if (dramsize > 0) {
+               out_be32 (&mm->sdram0,
+                       (0x13 + __builtin_ffs(dramsize >> 20) - 1));
+       } else {
+                                                       /* disabled */
+               out_be32 (&mm->sdram0, 0);
+       }
+
+#else /* CONFIG_SYS_RAMBOOT */
+
+       /* retrieve size of memory connected to SDRAM CS0 */
+       dramsize = in_be32(&mm->sdram0) & 0xFF;
+       if (dramsize >= 0x13)
+               dramsize = (1 << (dramsize - 0x13)) << 20;
+       else
+               dramsize = 0;
+
+       /* retrieve size of memory connected to SDRAM CS1 */
+       dramsize2 = in_be32(&mm->sdram1) & 0xFF;
+       if (dramsize2 >= 0x13)
+               dramsize2 = (1 << (dramsize2 - 0x13)) << 20;
+       else
+               dramsize2 = 0;
+
+#endif /* CONFIG_SYS_RAMBOOT */
+
+       return dramsize + dramsize2;
+}
+
+int checkboard(void)
+{
+       puts("Board: phyCORE-MPC5200B-tiny\n");
+       return 0;
+}
+
+#ifdef CONFIG_PCI
+static struct pci_controller hose;
+
+extern void pci_mpc5xxx_init(struct pci_controller *);
+
+void pci_init_board(void)
+{
+       pci_mpc5xxx_init(&hose);
+}
+#endif
+
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t * bd)
+{
+       ft_cpu_setup(blob, bd);
+}
+#endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */
+
+#if defined(CONFIG_CMD_IDE) && defined(CONFIG_IDE_RESET)
+
+#define GPIO_PSC2_4    0x02000000UL
+
+void init_ide_reset(void)
+{
+       volatile struct mpc5xxx_wu_gpio *wu_gpio =
+               (struct mpc5xxx_wu_gpio *)MPC5XXX_WU_GPIO;
+       debug("init_ide_reset\n");
+
+       /* Configure PSC2_4 as GPIO output for ATA reset */
+       setbits_be32(&wu_gpio->enable, GPIO_PSC2_4);
+       setbits_be32(&wu_gpio->ddr, GPIO_PSC2_4);
+       /* Deassert reset */
+       setbits_be32(&wu_gpio->dvo, GPIO_PSC2_4);
+}
+
+void ide_set_reset(int idereset)
+{
+       volatile struct mpc5xxx_wu_gpio *wu_gpio =
+               (struct mpc5xxx_wu_gpio *)MPC5XXX_WU_GPIO;
+       debug("ide_reset(%d)\n", idereset);
+
+       if (idereset) {
+               clrbits_be32(&wu_gpio->dvo, GPIO_PSC2_4);
+               /* Make a delay. MPC5200 spec says 25 usec min */
+               udelay(500000);
+       } else
+               setbits_be32(&wu_gpio->dvo, GPIO_PSC2_4);
+}
+#endif /* defined(CONFIG_CMD_IDE) && defined(CONFIG_IDE_RESET) */
+
diff --git a/board/renesas/MigoR/u-boot.lds b/board/renesas/MigoR/u-boot.lds
deleted file mode 100644 (file)
index c004b83..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyrigth (c) 2007
- * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- *
- * 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-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
-OUTPUT_ARCH(sh)
-ENTRY(_start)
-
-SECTIONS
-{
-       /*
-          Base address of internal SDRAM is 0x0C000000.
-          Although size of SDRAM can be either 16 or 32 MBytes,
-          we assume 16 MBytes (ie ignore upper half if the full
-          32 MBytes is present).
-
-          NOTE: This address must match with the definition of
-          TEXT_BASE in config.mk (in this directory).
-
-       */
-       . = 0x8C000000 + (64*1024*1024) - (256*1024);
-
-       PROVIDE (reloc_dst = .);
-
-       PROVIDE (_ftext = .);
-       PROVIDE (_fcode = .);
-       PROVIDE (_start = .);
-
-       .text :
-       {
-               cpu/sh4/start.o         (.text)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenv)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenvr)
-               . = ALIGN(8192);
-               *(.text)
-               . = ALIGN(4);
-       } =0xFF
-       PROVIDE (_ecode = .);
-       .rodata :
-       {
-               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
-               . = ALIGN(4);
-       }
-       PROVIDE (_etext = .);
-
-
-       PROVIDE (_fdata = .);
-       .data :
-       {
-               *(.data)
-               . = ALIGN(4);
-       }
-       PROVIDE (_edata = .);
-
-       PROVIDE (_fgot = .);
-       .got :
-       {
-               *(.got)
-               . = ALIGN(4);
-       }
-       PROVIDE (_egot = .);
-
-       PROVIDE (__u_boot_cmd_start = .);
-       .u_boot_cmd :
-       {
-               *(.u_boot_cmd)
-               . = ALIGN(4);
-       }
-       PROVIDE (__u_boot_cmd_end = .);
-
-       PROVIDE (reloc_dst_end = .);
-       /* _reloc_dst_end = .; */
-
-       PROVIDE (bss_start = .);
-       PROVIDE (__bss_start = .);
-       .bss :
-       {
-               *(.bss)
-               . = ALIGN(4);
-       }
-       PROVIDE (bss_end = .);
-
-       PROVIDE (_end = .);
-}
diff --git a/board/renesas/ap325rxa/u-boot.lds b/board/renesas/ap325rxa/u-boot.lds
deleted file mode 100644 (file)
index 94bacca..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyrigth (c) 2007
- * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- *
- * 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-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
-OUTPUT_ARCH(sh)
-ENTRY(_start)
-
-SECTIONS
-{
-       /*
-          Base address of internal SDRAM is 0x88000000.
-          Although size of SDRAM can be either 16 or 32 MBytes,
-          we assume 16 MBytes (ie ignore upper half if the full
-          32 MBytes is present).
-
-          NOTE: This address must match with the definition of
-          TEXT_BASE in config.mk (in this directory).
-
-       */
-       . = 0x88000000 + (128*1024*1024) - (256*1024);
-
-       PROVIDE (reloc_dst = .);
-
-       PROVIDE (_ftext = .);
-       PROVIDE (_fcode = .);
-       PROVIDE (_start = .);
-
-       .text :
-       {
-               cpu/sh4/start.o         (.text)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenv)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenvr)
-               . = ALIGN(8192);
-               *(.text)
-               . = ALIGN(4);
-       } =0xFF
-       PROVIDE (_ecode = .);
-       .rodata :
-       {
-               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
-               . = ALIGN(4);
-       }
-       PROVIDE (_etext = .);
-
-
-       PROVIDE (_fdata = .);
-       .data :
-       {
-               *(.data)
-               . = ALIGN(4);
-       }
-       PROVIDE (_edata = .);
-
-       PROVIDE (_fgot = .);
-       .got :
-       {
-               *(.got)
-               . = ALIGN(4);
-       }
-       PROVIDE (_egot = .);
-
-       PROVIDE (__u_boot_cmd_start = .);
-       .u_boot_cmd :
-       {
-               *(.u_boot_cmd)
-               . = ALIGN(4);
-       }
-       PROVIDE (__u_boot_cmd_end = .);
-
-       PROVIDE (reloc_dst_end = .);
-       /* _reloc_dst_end = .; */
-
-       PROVIDE (bss_start = .);
-       PROVIDE (__bss_start = .);
-       .bss :
-       {
-               *(.bss)
-               . = ALIGN(4);
-       }
-       PROVIDE (bss_end = .);
-
-       PROVIDE (_end = .);
-}
diff --git a/board/renesas/r2dplus/u-boot.lds b/board/renesas/r2dplus/u-boot.lds
deleted file mode 100644 (file)
index e1c15b0..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyrigth (c) 2007,2008
- * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- *
- * 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-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
-OUTPUT_ARCH(sh)
-ENTRY(_start)
-
-SECTIONS
-{
-       /*
-          Base address of internal SDRAM is 0x0C000000.
-          Although size of SDRAM can be either 16 or 32 MBytes,
-          we assume 16 MBytes (ie ignore upper half if the full
-          32 MBytes is present).
-
-          NOTE: This address must match with the definition of
-          TEXT_BASE in config.mk (in this directory).
-
-       */
-       . = 0x0C000000 + (64*1024*1024) - (256*1024);
-
-       PROVIDE (reloc_dst = .);
-
-       PROVIDE (_ftext = .);
-       PROVIDE (_fcode = .);
-       PROVIDE (_start = .);
-
-       .text :
-       {
-               cpu/sh4/start.o         (.text)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenv)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenvr)
-               . = ALIGN(8192);
-               *(.text)
-               . = ALIGN(4);
-       } =0xFF
-       PROVIDE (_ecode = .);
-       .rodata :
-       {
-               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
-               . = ALIGN(4);
-       }
-       PROVIDE (_etext = .);
-
-
-       PROVIDE (_fdata = .);
-       .data :
-       {
-               *(.data)
-               . = ALIGN(4);
-       }
-       PROVIDE (_edata = .);
-
-       PROVIDE (_fgot = .);
-       .got :
-       {
-               *(.got)
-               . = ALIGN(4);
-       }
-       PROVIDE (_egot = .);
-
-       PROVIDE (__u_boot_cmd_start = .);
-       .u_boot_cmd :
-       {
-               *(.u_boot_cmd)
-               . = ALIGN(4);
-       }
-       PROVIDE (__u_boot_cmd_end = .);
-
-       PROVIDE (reloc_dst_end = .);
-       /* _reloc_dst_end = .; */
-
-       PROVIDE (bss_start = .);
-       PROVIDE (__bss_start = .);
-       .bss :
-       {
-               *(.bss)
-               . = ALIGN(4);
-       }
-       PROVIDE (bss_end = .);
-
-       PROVIDE (_end = .);
-}
diff --git a/board/renesas/r7780mp/u-boot.lds b/board/renesas/r7780mp/u-boot.lds
deleted file mode 100644 (file)
index f32d0b8..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyrigth (c) 2007,2008
- * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- *
- * 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-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
-OUTPUT_ARCH(sh)
-ENTRY(_start)
-
-SECTIONS
-{
-       /*
-          Base address of internal SDRAM is 0x0C000000.
-          Although size of SDRAM can be either 16 or 32 MBytes,
-          we assume 16 MBytes (ie ignore upper half if the full
-          32 MBytes is present).
-
-          NOTE: This address must match with the definition of
-          TEXT_BASE in config.mk (in this directory).
-
-       */
-       . = 0x08000000 + (128*1024*1024) - (256*1024);
-
-       PROVIDE (reloc_dst = .);
-
-       PROVIDE (_ftext = .);
-       PROVIDE (_fcode = .);
-       PROVIDE (_start = .);
-
-       .text :
-       {
-               cpu/sh4/start.o         (.text)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenv)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenvr)
-               . = ALIGN(8192);
-               *(.text)
-               . = ALIGN(4);
-       } =0xFF
-       PROVIDE (_ecode = .);
-       .rodata :
-       {
-               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
-               . = ALIGN(4);
-       }
-       PROVIDE (_etext = .);
-
-
-       PROVIDE (_fdata = .);
-       .data :
-       {
-               *(.data)
-               . = ALIGN(4);
-       }
-       PROVIDE (_edata = .);
-
-       PROVIDE (_fgot = .);
-       .got :
-       {
-               *(.got)
-               . = ALIGN(4);
-       }
-       PROVIDE (_egot = .);
-
-       PROVIDE (__u_boot_cmd_start = .);
-       .u_boot_cmd :
-       {
-               *(.u_boot_cmd)
-               . = ALIGN(4);
-       }
-       PROVIDE (__u_boot_cmd_end = .);
-
-       PROVIDE (reloc_dst_end = .);
-       /* _reloc_dst_end = .; */
-
-       PROVIDE (bss_start = .);
-       PROVIDE (__bss_start = .);
-       .bss :
-       {
-               *(.bss)
-               . = ALIGN(4);
-       }
-       PROVIDE (bss_end = .);
-
-       PROVIDE (_end = .);
-}
diff --git a/board/renesas/sh7763rdp/u-boot.lds b/board/renesas/sh7763rdp/u-boot.lds
deleted file mode 100644 (file)
index b1a967d..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyrigth (c) 2007,2008
- * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- *
- * 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-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
-OUTPUT_ARCH(sh)
-ENTRY(_start)
-
-SECTIONS
-{
-       /*
-          Base address of internal SDRAM is 0x0C000000.
-          Although size of SDRAM can be either 16 or 32 MBytes,
-          we assume 16 MBytes (ie ignore upper half if the full
-          32 MBytes is present).
-
-          NOTE: This address must match with the definition of
-          TEXT_BASE in config.mk (in this directory).
-
-       */
-       . = 0x8C000000 + (64*1024*1024) - (256*1024);
-
-       PROVIDE (reloc_dst = .);
-
-       PROVIDE (_ftext = .);
-       PROVIDE (_fcode = .);
-       PROVIDE (_start = .);
-
-       .text :
-       {
-               cpu/sh4/start.o         (.text)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenv)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenvr)
-               . = ALIGN(8192);
-               *(.text)
-               . = ALIGN(4);
-       } =0xFF
-       PROVIDE (_ecode = .);
-       .rodata :
-       {
-               *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
-               . = ALIGN(4);
-       }
-       PROVIDE (_etext = .);
-
-
-       PROVIDE (_fdata = .);
-       .data :
-       {
-               *(.data)
-               . = ALIGN(4);
-       }
-       PROVIDE (_edata = .);
-
-       PROVIDE (_fgot = .);
-       .got :
-       {
-               *(.got)
-               . = ALIGN(4);
-       }
-       PROVIDE (_egot = .);
-
-       PROVIDE (__u_boot_cmd_start = .);
-       .u_boot_cmd :
-       {
-               *(.u_boot_cmd)
-               . = ALIGN(4);
-       }
-       PROVIDE (__u_boot_cmd_end = .);
-
-       PROVIDE (reloc_dst_end = .);
-       /* _reloc_dst_end = .; */
-
-       PROVIDE (bss_start = .);
-       PROVIDE (__bss_start = .);
-       .bss :
-       {
-               *(.bss)
-               . = ALIGN(4);
-       }
-       PROVIDE (bss_end = .);
-
-       PROVIDE (_end = .);
-}
index b1b538c..b8e43f7 100644 (file)
@@ -18,7 +18,7 @@
 
 include $(TOPDIR)/config.mk
 
-LIB    = lib$(BOARD).a
+LIB    = $(obj)lib$(BOARD).a
 
 COBJS  := sh7785lcr.o selfcheck.o rtl8169_mac.o
 SOBJS  := lowlevel_init.o
index 97920df..7faad95 100644 (file)
@@ -233,35 +233,6 @@ DBSC2_DBRFCNT0_D:  .long   0x00010000
 WAIT_200US:    .long   33333
 
 /*------- GPIO -------*/
-#define GPIO_BASE      0xffe70000
-PACR_A:                .long   GPIO_BASE + 0x00
-PBCR_A:                .long   GPIO_BASE + 0x02
-PCCR_A:                .long   GPIO_BASE + 0x04
-PDCR_A:                .long   GPIO_BASE + 0x06
-PECR_A:                .long   GPIO_BASE + 0x08
-PFCR_A:                .long   GPIO_BASE + 0x0a
-PGCR_A:                .long   GPIO_BASE + 0x0c
-PHCR_A:                .long   GPIO_BASE + 0x0e
-PJCR_A:                .long   GPIO_BASE + 0x10
-PKCR_A:                .long   GPIO_BASE + 0x12
-PLCR_A:                .long   GPIO_BASE + 0x14
-PMCR_A:                .long   GPIO_BASE + 0x16
-PNCR_A:                .long   GPIO_BASE + 0x18
-PPCR_A:                .long   GPIO_BASE + 0x1a
-PQCR_A:                .long   GPIO_BASE + 0x1c
-PRCR_A:                .long   GPIO_BASE + 0x1e
-PEPUPR_A:      .long   GPIO_BASE + 0x48
-PHPUPR_A:      .long   GPIO_BASE + 0x4e
-PJPUPR_A:      .long   GPIO_BASE + 0x50
-PKPUPR_A:      .long   GPIO_BASE + 0x52
-PLPUPR_A:      .long   GPIO_BASE + 0x54
-PMPUPR_A:      .long   GPIO_BASE + 0x56
-PNPUPR_A:      .long   GPIO_BASE + 0x58
-PPUPR1_A:      .long   GPIO_BASE + 0x60
-PPUPR2_A:      .long   GPIO_BASE + 0x62
-P1MSELR_A:     .long   GPIO_BASE + 0x80
-P2MSELR_A:     .long   GPIO_BASE + 0x82
-
 PACR_D:                .long   0x0000
 PBCR_D:                .long   0x0000
 PCCR_D:                .long   0x0000
@@ -291,6 +262,35 @@ PPUPR2_D:  .long   0xff00
 P1MSELR_D:     .long   0x3780
 P2MSELR_D:     .long   0x0000
 
+#define GPIO_BASE      0xffe70000
+PACR_A:                .long   GPIO_BASE + 0x00
+PBCR_A:                .long   GPIO_BASE + 0x02
+PCCR_A:                .long   GPIO_BASE + 0x04
+PDCR_A:                .long   GPIO_BASE + 0x06
+PECR_A:                .long   GPIO_BASE + 0x08
+PFCR_A:                .long   GPIO_BASE + 0x0a
+PGCR_A:                .long   GPIO_BASE + 0x0c
+PHCR_A:                .long   GPIO_BASE + 0x0e
+PJCR_A:                .long   GPIO_BASE + 0x10
+PKCR_A:                .long   GPIO_BASE + 0x12
+PLCR_A:                .long   GPIO_BASE + 0x14
+PMCR_A:                .long   GPIO_BASE + 0x16
+PNCR_A:                .long   GPIO_BASE + 0x18
+PPCR_A:                .long   GPIO_BASE + 0x1a
+PQCR_A:                .long   GPIO_BASE + 0x1c
+PRCR_A:                .long   GPIO_BASE + 0x1e
+PEPUPR_A:      .long   GPIO_BASE + 0x48
+PHPUPR_A:      .long   GPIO_BASE + 0x4e
+PJPUPR_A:      .long   GPIO_BASE + 0x50
+PKPUPR_A:      .long   GPIO_BASE + 0x52
+PLPUPR_A:      .long   GPIO_BASE + 0x54
+PMPUPR_A:      .long   GPIO_BASE + 0x56
+PNPUPR_A:      .long   GPIO_BASE + 0x58
+PPUPR1_A:      .long   GPIO_BASE + 0x60
+PPUPR2_A:      .long   GPIO_BASE + 0x62
+P1MSELR_A:     .long   GPIO_BASE + 0x80
+P2MSELR_A:     .long   GPIO_BASE + 0x82
+
 /*------- LBSC -------*/
 PASCR_A:               .long   0xff000070
 PASCR_32BIT_MODE:      .long   0x80000000      /* check booting mode */
diff --git a/board/renesas/sh7785lcr/u-boot_29bit b/board/renesas/sh7785lcr/u-boot_29bit
deleted file mode 100644 (file)
index 231769f..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyrigth (c) 2007
- * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- * Copyrigth (c) 2008 Yoshihiro Shimoda <shimoda.yoshihiro@renesas.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
- */
-
-OUTPUT_FORMAT("elf32-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
-OUTPUT_ARCH(sh)
-ENTRY(_start)
-
-SECTIONS
-{
-       . = 0x08000000 + (128 * 1024 * 1024) - (512 * 1024);
-
-       PROVIDE (reloc_dst = .);
-
-       PROVIDE (_ftext = .);
-       PROVIDE (_fcode = .);
-       PROVIDE (_start = .);
-
-       .text :
-       {
-               cpu/sh4/start.o         (.text)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenv)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenvr)
-               . = ALIGN(8192);
-               *(.text)
-               . = ALIGN(4);
-       } =0xFF
-       PROVIDE (_ecode = .);
-       .rodata :
-       {
-               *(.rodata)
-               . = ALIGN(4);
-       }
-       PROVIDE (_etext = .);
-
-
-       PROVIDE (_fdata = .);
-       .data :
-       {
-               *(.data)
-               . = ALIGN(4);
-       }
-       PROVIDE (_edata = .);
-
-       PROVIDE (_fgot = .);
-       .got :
-       {
-               *(.got)
-               . = ALIGN(4);
-       }
-       PROVIDE (_egot = .);
-
-       PROVIDE (__u_boot_cmd_start = .);
-       .u_boot_cmd :
-       {
-               *(.u_boot_cmd)
-               . = ALIGN(4);
-       }
-       PROVIDE (__u_boot_cmd_end = .);
-
-       PROVIDE (reloc_dst_end = .);
-       /* _reloc_dst_end = .; */
-
-       PROVIDE (bss_start = .);
-       PROVIDE (__bss_start = .);
-       .bss :
-       {
-               *(.bss)
-               . = ALIGN(4);
-       }
-       PROVIDE (bss_end = .);
-
-       PROVIDE (_end = .);
-}
diff --git a/board/renesas/sh7785lcr/u-boot_32bit b/board/renesas/sh7785lcr/u-boot_32bit
deleted file mode 100644 (file)
index 446fb93..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyrigth (c) 2007
- * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- * Copyrigth (c) 2008-2009 Yoshihiro Shimoda <shimoda.yoshihiro@renesas.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
- */
-
-OUTPUT_FORMAT("elf32-sh-linux", "elf32-sh-linux", "elf32-sh-linux")
-OUTPUT_ARCH(sh)
-ENTRY(_start)
-
-SECTIONS
-{
-       . = 0x88000000 + (128 * 1024 * 1024) - (512 * 1024);
-
-       PROVIDE (reloc_dst = .);
-
-       PROVIDE (_ftext = .);
-       PROVIDE (_fcode = .);
-       PROVIDE (_start = .);
-
-       .text :
-       {
-               cpu/sh4/start.o         (.text)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenv)
-               . = ALIGN(8192);
-               common/env_embedded.o   (.ppcenvr)
-               . = ALIGN(8192);
-               *(.text)
-               . = ALIGN(4);
-       } =0xFF
-       PROVIDE (_ecode = .);
-       .rodata :
-       {
-               *(.rodata)
-               . = ALIGN(4);
-       }
-       PROVIDE (_etext = .);
-
-
-       PROVIDE (_fdata = .);
-       .data :
-       {
-               *(.data)
-               . = ALIGN(4);
-       }
-       PROVIDE (_edata = .);
-
-       PROVIDE (_fgot = .);
-       .got :
-       {
-               *(.got)
-               . = ALIGN(4);
-       }
-       PROVIDE (_egot = .);
-
-       PROVIDE (__u_boot_cmd_start = .);
-       .u_boot_cmd :
-       {
-               *(.u_boot_cmd)
-               . = ALIGN(4);
-       }
-       PROVIDE (__u_boot_cmd_end = .);
-
-       PROVIDE (reloc_dst_end = .);
-       /* _reloc_dst_end = .; */
-
-       PROVIDE (bss_start = .);
-       PROVIDE (__bss_start = .);
-       .bss :
-       {
-               *(.bss)
-               . = ALIGN(4);
-       }
-       PROVIDE (bss_end = .);
-
-       PROVIDE (_end = .);
-}
index 9451416..2f70521 100644 (file)
@@ -414,18 +414,29 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
        }
 
        if (strcmp(cmd, "markbad") == 0) {
-               addr = (ulong)simple_strtoul(argv[2], NULL, 16);
+               argc -= 2;
+               argv += 2;
 
-               int ret = nand->block_markbad(nand, addr);
-               if (ret == 0) {
-                       printf("block 0x%08lx successfully marked as bad\n",
-                              (ulong) addr);
-                       return 0;
-               } else {
-                       printf("block 0x%08lx NOT marked as bad! ERROR %d\n",
-                              (ulong) addr, ret);
+               if (argc <= 0)
+                       goto usage;
+
+               while (argc > 0) {
+                       addr = simple_strtoul(*argv, NULL, 16);
+
+                       if (nand->block_markbad(nand, addr)) {
+                               printf("block 0x%08lx NOT marked "
+                                       "as bad! ERROR %d\n",
+                                       addr, ret);
+                               ret = 1;
+                       } else {
+                               printf("block 0x%08lx successfully "
+                                       "marked as bad\n",
+                                       addr);
+                       }
+                       --argc;
+                       ++argv;
                }
-               return 1;
+               return ret;
        }
 
        if (strcmp(cmd, "biterr") == 0) {
index 85bd2cb..9090940 100644 (file)
@@ -340,7 +340,7 @@ int do_onenand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
        int blocksize;
        ulong addr, ofs;
        size_t len, retlen = 0;
-       int ret;
+       int ret = 0;
        char *cmd, *s;
 
        mtd = &onenand_mtd;
@@ -434,18 +434,29 @@ int do_onenand(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                }
 
                if (strcmp(cmd, "markbad") == 0) {
-                       addr = (ulong)simple_strtoul(argv[2], NULL, 16);
+                       argc -= 2;
+                       argv += 2;
 
-                       int ret = mtd->block_markbad(mtd, addr);
-                       if (ret == 0) {
-                               printf("block 0x%08lx successfully marked as bad\n",
-                                               (ulong) addr);
-                               return 0;
-                       } else {
-                               printf("block 0x%08lx NOT marked as bad! ERROR %d\n",
-                                               (ulong) addr, ret);
+                       if (argc <= 0)
+                               goto usage;
+
+                       while (argc > 0) {
+                               addr = simple_strtoul(*argv, NULL, 16);
+
+                               if (mtd->block_markbad(mtd, addr)) {
+                                       printf("block 0x%08lx NOT marked "
+                                               "as bad! ERROR %d\n",
+                                               addr, ret);
+                                       ret = 1;
+                               } else {
+                                       printf("block 0x%08lx successfully "
+                                               "marked as bad\n",
+                                               addr);
+                               }
+                               --argc;
+                               ++argv;
                        }
-                       return 1;
+                       return ret;
                }
 
                if (strncmp(cmd, "dump", 4) == 0) {
@@ -474,7 +485,7 @@ usage:
 }
 
 U_BOOT_CMD(
-       onenand,        6,      1,      do_onenand,
+       onenand,        CONFIG_SYS_MAXARGS,     1,      do_onenand,
        "OneNAND sub-system",
        "info - show available OneNAND devices\n"
        "onenand bad - show bad blocks\n"
index bbca389..05893f5 100644 (file)
@@ -395,11 +395,13 @@ static int ubi_volume_read(char *volume, char *buf, size_t size)
        return err ? err : count_save - size;
 }
 
-static int ubi_dev_scan(struct mtd_info *info, char *ubidev)
+static int ubi_dev_scan(struct mtd_info *info, char *ubidev,
+               const char *vid_header_offset)
 {
        struct mtd_device *dev;
        struct part_info *part;
        struct mtd_partition mtd_part;
+       char ubi_mtd_param_buffer[80];
        u8 pnum;
        int err;
 
@@ -413,7 +415,11 @@ static int ubi_dev_scan(struct mtd_info *info, char *ubidev)
        mtd_part.offset = part->offset;
        add_mtd_partitions(info, &mtd_part, 1);
 
-       err = ubi_mtd_param_parse(buffer, NULL);
+       strcpy(ubi_mtd_param_buffer, buffer);
+       if (vid_header_offset)
+               sprintf(ubi_mtd_param_buffer, "mtd=%d,%s", pnum,
+                               vid_header_offset);
+       err = ubi_mtd_param_parse(ubi_mtd_param_buffer, NULL);
        if (err) {
                del_mtd_partitions(info);
                return err;
@@ -450,6 +456,7 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                char mtd_dev[16];
                struct mtd_device *dev;
                struct part_info *part;
+               const char *vid_header_offset = NULL;
                u8 pnum;
 
                /* Print current partition */
@@ -497,8 +504,11 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 
                ubi_dev.selected = 1;
 
+               if (argc > 3)
+                       vid_header_offset = argv[3];
                strcpy(ubi_dev.part_name, argv[2]);
-               err = ubi_dev_scan(ubi_dev.mtd_info, ubi_dev.part_name);
+               err = ubi_dev_scan(ubi_dev.mtd_info, ubi_dev.part_name,
+                               vid_header_offset);
                if (err) {
                        printf("UBI init error %d\n", err);
                        ubi_dev.selected = 0;
@@ -594,8 +604,9 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 
 U_BOOT_CMD(ubi, 6, 1, do_ubi,
        "ubi commands",
-       "part [part]"
-               " - Show or set current partition\n"
+       "part [part] [offset]\n"
+               " - Show or set current partition (with optional VID"
+               " header offset)\n"
        "ubi info [l[ayout]]"
                " - Display volume and ubi layout information\n"
        "ubi create[vol] volume [size] [type]"
index d9f60d5..ed0e9db 100644 (file)
@@ -47,6 +47,10 @@ int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        char *vol_name;
        int ret;
 
+       if (argc != 2) {
+               cmd_usage(cmdtp);
+               return 1;
+       }
        vol_name = argv[1];
        debug("Using volume %s\n", vol_name);
 
@@ -88,6 +92,7 @@ int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 {
        char *filename;
+       char *endp;
        int ret;
        u32 addr;
        u32 size = 0;
@@ -98,15 +103,25 @@ int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
        }
 
        if (argc < 3) {
-               printf("Usage:\n%s\n", cmdtp->usage);
+               cmd_usage(cmdtp);
                return -1;
        }
 
-       addr = simple_strtoul(argv[1], NULL, 16);
+       addr = simple_strtoul(argv[1], &endp, 16);
+       if (endp == argv[1]) {
+               cmd_usage(cmdtp);
+               return 1;
+       }
+
        filename = argv[2];
 
-       if (argc == 4)
-               size = simple_strtoul(argv[3], NULL, 16);
+       if (argc == 4) {
+               size = simple_strtoul(argv[3], &endp, 16);
+               if (endp == argv[3]) {
+                       cmd_usage(cmdtp);
+                       return 1;
+               }
+       }
        debug("Loading file '%s' to address 0x%08x (size %d)\n", filename, addr, size);
 
        ret = ubifs_load(filename, addr, size);
@@ -119,7 +134,8 @@ int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 U_BOOT_CMD(
        ubifsmount, 2, 0, do_ubifs_mount,
        "mount UBIFS volume",
-       ""
+       "<volume-name>\n"
+       "    - mount 'volume-name' volume"
 );
 
 U_BOOT_CMD(ubifsls, 2, 0, do_ubifs_ls,
index 76569da..90a1c45 100644 (file)
@@ -68,9 +68,11 @@ extern int default_environment_size;
 char * env_name_spec = "NAND";
 
 
-#ifdef ENV_IS_EMBEDDED
+#if defined(ENV_IS_EMBEDDED)
 extern uchar environment[];
 env_t *env_ptr = (env_t *)(&environment[0]);
+#elif defined(CONFIG_NAND_ENV_DST)
+env_t *env_ptr = (env_t *)CONFIG_NAND_ENV_DST;
 #else /* ! ENV_IS_EMBEDDED */
 env_t *env_ptr = 0;
 #endif /* ENV_IS_EMBEDDED */
@@ -102,26 +104,33 @@ uchar env_get_char_spec (int index)
  */
 int env_init(void)
 {
-#if defined(ENV_IS_EMBEDDED)
-       size_t total;
+#if defined(ENV_IS_EMBEDDED) || defined(CONFIG_NAND_ENV_DST)
        int crc1_ok = 0, crc2_ok = 0;
-       env_t *tmp_env1, *tmp_env2;
+       env_t *tmp_env1;
 
-       total = CONFIG_ENV_SIZE;
+#ifdef CONFIG_ENV_OFFSET_REDUND
+       env_t *tmp_env2;
 
-       tmp_env1 = env_ptr;
        tmp_env2 = (env_t *)((ulong)env_ptr + CONFIG_ENV_SIZE);
+       crc2_ok = (crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc);
+#endif
+
+       tmp_env1 = env_ptr;
 
        crc1_ok = (crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc);
-       crc2_ok = (crc32(0, tmp_env2->data, ENV_SIZE) == tmp_env2->crc);
 
-       if (!crc1_ok && !crc2_ok)
+       if (!crc1_ok && !crc2_ok) {
+               gd->env_addr  = 0;
                gd->env_valid = 0;
-       else if(crc1_ok && !crc2_ok)
+
+               return 0;
+       } else if (crc1_ok && !crc2_ok) {
                gd->env_valid = 1;
-       else if(!crc1_ok && crc2_ok)
+       }
+#ifdef CONFIG_ENV_OFFSET_REDUND
+       else if (!crc1_ok && crc2_ok) {
                gd->env_valid = 2;
-       else {
+       else {
                /* both ok - check serial */
                if(tmp_env1->flags == 255 && tmp_env2->flags == 0)
                        gd->env_valid = 2;
@@ -135,14 +144,19 @@ int env_init(void)
                        gd->env_valid = 1;
        }
 
+       if (gd->env_valid == 2)
+               env_ptr = tmp_env2;
+       else
+#endif
        if (gd->env_valid == 1)
                env_ptr = tmp_env1;
-       else if (gd->env_valid == 2)
-               env_ptr = tmp_env2;
-#else /* ENV_IS_EMBEDDED */
+
+       gd->env_addr = (ulong)env_ptr->data;
+
+#else /* ENV_IS_EMBEDDED || CONFIG_NAND_ENV_DST */
        gd->env_addr  = (ulong)&default_environment[0];
        gd->env_valid = 1;
-#endif /* ENV_IS_EMBEDDED */
+#endif /* ENV_IS_EMBEDDED || CONFIG_NAND_ENV_DST */
 
        return (0);
 }
@@ -183,12 +197,10 @@ int writeenv(size_t offset, u_char *buf)
 #ifdef CONFIG_ENV_OFFSET_REDUND
 int saveenv(void)
 {
-       size_t total;
        int ret = 0;
        nand_erase_options_t nand_erase_options;
 
        env_ptr->flags++;
-       total = CONFIG_ENV_SIZE;
 
        nand_erase_options.length = CONFIG_ENV_RANGE;
        nand_erase_options.quiet = 0;
@@ -226,7 +238,6 @@ int saveenv(void)
 #else /* ! CONFIG_ENV_OFFSET_REDUND */
 int saveenv(void)
 {
-       size_t total;
        int ret = 0;
        nand_erase_options_t nand_erase_options;
 
@@ -243,7 +254,6 @@ int saveenv(void)
                return 1;
 
        puts ("Writing to Nand... ");
-       total = CONFIG_ENV_SIZE;
        if (writeenv(CONFIG_ENV_OFFSET, (u_char *) env_ptr)) {
                puts("FAILED!\n");
                return 1;
@@ -287,12 +297,9 @@ int readenv (size_t offset, u_char * buf)
 void env_relocate_spec (void)
 {
 #if !defined(ENV_IS_EMBEDDED)
-       size_t total;
        int crc1_ok = 0, crc2_ok = 0;
        env_t *tmp_env1, *tmp_env2;
 
-       total = CONFIG_ENV_SIZE;
-
        tmp_env1 = (env_t *) malloc(CONFIG_ENV_SIZE);
        tmp_env2 = (env_t *) malloc(CONFIG_ENV_SIZE);
 
index ed77051..48089a9 100644 (file)
@@ -58,7 +58,7 @@ uchar env_get_char_spec(int index)
 
 void env_relocate_spec(void)
 {
-       unsigned long env_addr;
+       loff_t env_addr;
        int use_default = 0;
        size_t retlen;
 
index 3da89f4..4f467be 100644 (file)
@@ -29,8 +29,11 @@ COBJS-$(CONFIG_AT91CAP9)     += at91cap9_devices.o
 COBJS-$(CONFIG_AT91SAM9260)    += at91sam9260_devices.o
 COBJS-$(CONFIG_AT91SAM9G20)    += at91sam9260_devices.o
 COBJS-$(CONFIG_AT91SAM9261)    += at91sam9261_devices.o
+COBJS-$(CONFIG_AT91SAM9G10)    += at91sam9261_devices.o
 COBJS-$(CONFIG_AT91SAM9263)    += at91sam9263_devices.o
 COBJS-$(CONFIG_AT91SAM9RL)     += at91sam9rl_devices.o
+COBJS-$(CONFIG_AT91SAM9M10G45) += at91sam9m10g45_devices.o
+COBJS-$(CONFIG_AT91SAM9G45)    += at91sam9m10g45_devices.o
 COBJS-$(CONFIG_AT91_LED)       += led.o
 COBJS-y += clock.o
 COBJS-y += cpu.o
diff --git a/cpu/arm926ejs/at91/at91sam9m10g45_devices.c b/cpu/arm926ejs/at91/at91sam9m10g45_devices.c
new file mode 100644 (file)
index 0000000..98d90f2
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ * (C) Copyright 2007-2008
+ * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Lead Tech Design <www.leadtechdesign.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/at91_common.h>
+#include <asm/arch/at91_pmc.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/io.h>
+
+void at91_serial0_hw_init(void)
+{
+       at91_set_A_periph(AT91_PIN_PB19, 1);    /* TXD0 */
+       at91_set_A_periph(AT91_PIN_PB18, 0);    /* RXD0 */
+       at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_US0);
+}
+
+void at91_serial1_hw_init(void)
+{
+       at91_set_A_periph(AT91_PIN_PB4, 1);             /* TXD1 */
+       at91_set_A_periph(AT91_PIN_PB5, 0);             /* RXD1 */
+       at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_US1);
+}
+
+void at91_serial2_hw_init(void)
+{
+       at91_set_A_periph(AT91_PIN_PD6, 1);             /* TXD2 */
+       at91_set_A_periph(AT91_PIN_PD7, 0);             /* RXD2 */
+       at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_US2);
+}
+
+void at91_serial3_hw_init(void)
+{
+       at91_set_A_periph(AT91_PIN_PB12, 0);    /* DRXD */
+       at91_set_A_periph(AT91_PIN_PB13, 1);    /* DTXD */
+       at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_SYS);;
+}
+
+void at91_serial_hw_init(void)
+{
+#ifdef CONFIG_USART0
+       at91_serial0_hw_init();
+#endif
+
+#ifdef CONFIG_USART1
+       at91_serial1_hw_init();
+#endif
+
+#ifdef CONFIG_USART2
+       at91_serial2_hw_init();
+#endif
+
+#ifdef CONFIG_USART3   /* DBGU */
+       at91_serial3_hw_init();
+#endif
+}
+
+#ifdef CONFIG_ATMEL_SPI
+void at91_spi0_hw_init(unsigned long cs_mask)
+{
+       at91_set_A_periph(AT91_PIN_PB0, 0);     /* SPI0_MISO */
+       at91_set_A_periph(AT91_PIN_PB1, 0);     /* SPI0_MOSI */
+       at91_set_A_periph(AT91_PIN_PB2, 0);     /* SPI0_SPCK */
+
+       /* Enable clock */
+       at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_SPI0);
+
+       if (cs_mask & (1 << 0)) {
+               at91_set_A_periph(AT91_PIN_PB3, 0);
+       }
+       if (cs_mask & (1 << 1)) {
+               at91_set_B_periph(AT91_PIN_PB18, 0);
+       }
+       if (cs_mask & (1 << 2)) {
+               at91_set_B_periph(AT91_PIN_PB19, 0);
+       }
+       if (cs_mask & (1 << 3)) {
+               at91_set_B_periph(AT91_PIN_PD27, 0);
+       }
+       if (cs_mask & (1 << 4)) {
+               at91_set_gpio_output(AT91_PIN_PB3, 0);
+       }
+       if (cs_mask & (1 << 5)) {
+               at91_set_gpio_output(AT91_PIN_PB18, 0);
+       }
+       if (cs_mask & (1 << 6)) {
+               at91_set_gpio_output(AT91_PIN_PB19, 0);
+       }
+       if (cs_mask & (1 << 7)) {
+               at91_set_gpio_output(AT91_PIN_PD27, 0);
+       }
+}
+
+void at91_spi1_hw_init(unsigned long cs_mask)
+{
+       at91_set_A_periph(AT91_PIN_PB14, 0);    /* SPI1_MISO */
+       at91_set_A_periph(AT91_PIN_PB15, 0);    /* SPI1_MOSI */
+       at91_set_A_periph(AT91_PIN_PB16, 0);    /* SPI1_SPCK */
+
+       /* Enable clock */
+       at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_SPI1);
+
+       if (cs_mask & (1 << 0)) {
+               at91_set_A_periph(AT91_PIN_PB17, 0);
+       }
+       if (cs_mask & (1 << 1)) {
+               at91_set_B_periph(AT91_PIN_PD28, 0);
+       }
+       if (cs_mask & (1 << 2)) {
+               at91_set_A_periph(AT91_PIN_PD18, 0);
+       }
+       if (cs_mask & (1 << 3)) {
+               at91_set_A_periph(AT91_PIN_PD19, 0);
+       }
+       if (cs_mask & (1 << 4)) {
+               at91_set_gpio_output(AT91_PIN_PB17, 0);
+       }
+       if (cs_mask & (1 << 5)) {
+               at91_set_gpio_output(AT91_PIN_PD28, 0);
+       }
+       if (cs_mask & (1 << 6)) {
+               at91_set_gpio_output(AT91_PIN_PD18, 0);
+       }
+       if (cs_mask & (1 << 7)) {
+               at91_set_gpio_output(AT91_PIN_PD19, 0);
+       }
+
+}
+#endif
+
+#ifdef CONFIG_MACB
+void at91_macb_hw_init(void)
+{
+       at91_set_A_periph(AT91_PIN_PA17, 0);    /* ETXCK_EREFCK */
+       at91_set_A_periph(AT91_PIN_PA15, 0);    /* ERXDV */
+       at91_set_A_periph(AT91_PIN_PA12, 0);    /* ERX0 */
+       at91_set_A_periph(AT91_PIN_PA13, 0);    /* ERX1 */
+       at91_set_A_periph(AT91_PIN_PA16, 0);    /* ERXER */
+       at91_set_A_periph(AT91_PIN_PA14, 0);    /* ETXEN */
+       at91_set_A_periph(AT91_PIN_PA10, 0);    /* ETX0 */
+       at91_set_A_periph(AT91_PIN_PA11, 0);    /* ETX1 */
+       at91_set_A_periph(AT91_PIN_PA19, 0);    /* EMDIO */
+       at91_set_A_periph(AT91_PIN_PA18, 0);    /* EMDC */
+#ifndef CONFIG_RMII
+       at91_set_B_periph(AT91_PIN_PA29, 0);    /* ECRS */
+       at91_set_B_periph(AT91_PIN_PA30, 0);    /* ECOL */
+       at91_set_B_periph(AT91_PIN_PA8,  0);    /* ERX2 */
+       at91_set_B_periph(AT91_PIN_PA9,  0);    /* ERX3 */
+       at91_set_B_periph(AT91_PIN_PA28, 0);    /* ERXCK */
+       at91_set_B_periph(AT91_PIN_PA6,  0);    /* ETX2 */
+       at91_set_B_periph(AT91_PIN_PA7,  0);    /* ETX3 */
+       at91_set_B_periph(AT91_PIN_PA27, 0);    /* ETXER */
+#endif
+}
+#endif
index 9f03468..574f488 100644 (file)
@@ -183,15 +183,23 @@ int at91_clock_init(unsigned long main_clock)
         * For now, assume this parentage won't change.
         */
        mckr = at91_sys_read(AT91_PMC_MCKR);
+#if defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
+       /* plla divisor by 2 */
+       plla_rate_hz /= (1 << ((mckr & 1 << 12) >> 12));
+#endif
        freq = mck_rate_hz = at91_css_to_rate(mckr & AT91_PMC_CSS);
+
        freq /= (1 << ((mckr & AT91_PMC_PRES) >> 2));                   /* prescale */
 #if defined(CONFIG_AT91RM9200)
        mck_rate_hz = freq / (1 + ((mckr & AT91_PMC_MDIV) >> 8));       /* mdiv */
 #elif defined(CONFIG_AT91SAM9G20)
        mck_rate_hz = (mckr & AT91_PMC_MDIV) ?
-               freq / ((mckr & AT91_PMC_MDIV) >> 7) : freq;    /* mdiv ; (x >> 7) = ((x >> 8) * 2) */
+               freq / ((mckr & AT91_PMC_MDIV) >> 7) : freq;            /* mdiv ; (x >> 7) = ((x >> 8) * 2) */
        if (mckr & AT91_PMC_PDIV)
-               freq /= 2;              /* processor clock division */
+               freq /= 2;                                              /* processor clock division */
+#elif defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
+       mck_rate_hz = (mckr & AT91_PMC_MDIV) == AT91SAM9_PMC_MDIV_3 ?
+               freq / 3 : freq / (1 << ((mckr & AT91_PMC_MDIV) >> 8)); /* mdiv */
 #else
        mck_rate_hz = freq / (1 << ((mckr & AT91_PMC_MDIV) >> 8));      /* mdiv */
 #endif
index 022c676..427db7a 100644 (file)
@@ -27,7 +27,15 @@ $(shell mkdir -p $(OBJTREE)/board/freescale/common)
 LIB    = $(obj)lib$(CPU).a
 
 START  = start.o
-COBJS-y        := traps.o cpu.o cpu_init.o speed.o interrupts.o serial.o i2c.o iopin.o
+COBJS-y        := cpu.o
+COBJS-y        += traps.o
+COBJS-y += cpu_init.o
+COBJS-y += fixed_sdram.o
+COBJS-y += i2c.o
+COBJS-y += interrupts.o
+COBJS-y += iopin.o
+COBJS-y += serial.o
+COBJS-y += speed.o
 COBJS-${CONFIG_FSL_DIU_FB} += diu.o
 COBJS-${CONFIG_FSL_DIU_FB} += ../../board/freescale/common/fsl_diu_fb.o
 COBJS-${CONFIG_FSL_DIU_FB} += ../../board/freescale/common/fsl_logo_bmp.o
diff --git a/cpu/mpc512x/fixed_sdram.c b/cpu/mpc512x/fixed_sdram.c
new file mode 100644 (file)
index 0000000..d906903
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * (C) Copyright 2007-2009 DENX Software Engineering
+ *
+ * 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/mpc512x.h>
+
+/*
+ * fixed sdram init:
+ * The board doesn't use memory modules that have serial presence
+ * detect or similar mechanism for discovery of the DRAM settings
+ */
+long int fixed_sdram(void)
+{
+       volatile immap_t *im = (immap_t *)CONFIG_SYS_IMMR;
+       u32 msize = CONFIG_SYS_DDR_SIZE * 1024 * 1024;
+       u32 msize_log2 = __ilog2(msize);
+       u32 i;
+
+       /* Initialize IO Control */
+       out_be32(&im->io_ctrl.io_control_mem, IOCTRL_MUX_DDR);
+
+       /* Initialize DDR Local Window */
+       out_be32(&im->sysconf.ddrlaw.bar, CONFIG_SYS_DDR_BASE & 0xFFFFF000);
+       out_be32(&im->sysconf.ddrlaw.ar, msize_log2 - 1);
+       sync_law(&im->sysconf.ddrlaw.ar);
+
+       /* Enable DDR */
+       out_be32(&im->mddrc.ddr_sys_config, CONFIG_SYS_MDDRC_SYS_CFG_EN);
+
+       /* Initialize DDR Priority Manager */
+       out_be32(&im->mddrc.prioman_config1, CONFIG_SYS_MDDRCGRP_PM_CFG1);
+       out_be32(&im->mddrc.prioman_config2, CONFIG_SYS_MDDRCGRP_PM_CFG2);
+       out_be32(&im->mddrc.hiprio_config, CONFIG_SYS_MDDRCGRP_HIPRIO_CFG);
+       out_be32(&im->mddrc.lut_table0_main_upper, CONFIG_SYS_MDDRCGRP_LUT0_MU);
+       out_be32(&im->mddrc.lut_table0_main_lower, CONFIG_SYS_MDDRCGRP_LUT0_ML);
+       out_be32(&im->mddrc.lut_table1_main_upper, CONFIG_SYS_MDDRCGRP_LUT1_MU);
+       out_be32(&im->mddrc.lut_table1_main_lower, CONFIG_SYS_MDDRCGRP_LUT1_ML);
+       out_be32(&im->mddrc.lut_table2_main_upper, CONFIG_SYS_MDDRCGRP_LUT2_MU);
+       out_be32(&im->mddrc.lut_table2_main_lower, CONFIG_SYS_MDDRCGRP_LUT2_ML);
+       out_be32(&im->mddrc.lut_table3_main_upper, CONFIG_SYS_MDDRCGRP_LUT3_MU);
+       out_be32(&im->mddrc.lut_table3_main_lower, CONFIG_SYS_MDDRCGRP_LUT3_ML);
+       out_be32(&im->mddrc.lut_table4_main_upper, CONFIG_SYS_MDDRCGRP_LUT4_MU);
+       out_be32(&im->mddrc.lut_table4_main_lower, CONFIG_SYS_MDDRCGRP_LUT4_ML);
+       out_be32(&im->mddrc.lut_table0_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT0_AU);
+       out_be32(&im->mddrc.lut_table0_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT0_AL);
+       out_be32(&im->mddrc.lut_table1_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT1_AU);
+       out_be32(&im->mddrc.lut_table1_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT1_AL);
+       out_be32(&im->mddrc.lut_table2_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT2_AU);
+       out_be32(&im->mddrc.lut_table2_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT2_AL);
+       out_be32(&im->mddrc.lut_table3_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT3_AU);
+       out_be32(&im->mddrc.lut_table3_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT3_AL);
+       out_be32(&im->mddrc.lut_table4_alternate_upper, CONFIG_SYS_MDDRCGRP_LUT4_AU);
+       out_be32(&im->mddrc.lut_table4_alternate_lower, CONFIG_SYS_MDDRCGRP_LUT4_AL);
+
+       /* Initialize MDDRC */
+       out_be32(&im->mddrc.ddr_sys_config, CONFIG_SYS_MDDRC_SYS_CFG);
+       out_be32(&im->mddrc.ddr_time_config0, CONFIG_SYS_MDDRC_TIME_CFG0);
+       out_be32(&im->mddrc.ddr_time_config1, CONFIG_SYS_MDDRC_TIME_CFG1);
+       out_be32(&im->mddrc.ddr_time_config2, CONFIG_SYS_MDDRC_TIME_CFG2);
+
+       /* Initialize DDR */
+       for (i = 0; i < 10; i++)
+               out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
+
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM2);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM2);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EM3);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_EN_DLL);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_RFSH);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_INIT_DEV_OP);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_OCD_DEFAULT);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_PCHG_ALL);
+       out_be32(&im->mddrc.ddr_command, CONFIG_SYS_MICRON_NOP);
+
+       /* Start MDDRC */
+       out_be32(&im->mddrc.ddr_time_config0, CONFIG_SYS_MDDRC_TIME_CFG0_RUN);
+       out_be32(&im->mddrc.ddr_sys_config, CONFIG_SYS_MDDRC_SYS_CFG_RUN);
+
+       return msize;
+}
index 9e8f29b..d337abb 100644 (file)
@@ -45,6 +45,9 @@ int ide_preinit (void)
 #if defined(CONFIG_SYS_ATA_CS_ON_I2C2)
        /* ATA cs0/1 on i2c2 clk/io */
        reg = (reg & ~0x03000000ul) | 0x02000000ul;
+#elif defined(CONFIG_SYS_ATA_CS_ON_TIMER01)
+       /* ATA cs0/1 on Timer 0/1 */
+       reg = (reg & ~0x03000000ul) | 0x03000000ul;
 #else
        /* ATA cs0/1 on Local Plus cs4/5 */
        reg = (reg & ~0x03000000ul) | 0x01000000ul;
index 414565c..03b6c86 100644 (file)
@@ -303,11 +303,11 @@ void cpu_init_f (volatile immap_t * im)
        struct usb_ehci *ehci = (struct usb_ehci *)CONFIG_SYS_MPC8xxx_USB_ADDR;
 
        /* Configure interface. */
-       setbits_be32((void *)ehci->control, REFSEL_16MHZ | UTMI_PHY_EN);
+       setbits_be32(&ehci->control, REFSEL_16MHZ | UTMI_PHY_EN);
 
        /* Wait for clock to stabilize */
        do {
-               temp = in_be32((void *)ehci->control);
+               temp = in_be32(&ehci->control);
                udelay(1000);
        } while (!(temp & PHY_CLK_VALID));
 #endif
index 33788cc..2ab2336 100644 (file)
                       "SDRAM_" #mnemonic, SDRAM_##mnemonic, data);     \
        } while (0)
 
+#define PPC4xx_IBM_DDR2_DUMP_MQ_REGISTER(mnemonic)                     \
+       do {                                                            \
+               u32 data;                                               \
+               data = mfdcr(SDRAM_##mnemonic);                         \
+               printf("%20s[%02x] = 0x%08X\n",                         \
+                      "SDRAM_" #mnemonic, SDRAM_##mnemonic, data);     \
+       } while (0)
+
 #if defined(CONFIG_440)
 /*
  * This DDR2 setup code can dynamically setup the TLB entries for the DDR2
@@ -714,11 +722,11 @@ static void check_mem_type(unsigned long *dimm_populated,
                                spd_ddr_init_hang ();
                                break;
                        case 7:
-                               debug("DIMM slot %d: DDR1 SDRAM detected\n", dimm_num);
+                               debug("DIMM slot %lu: DDR1 SDRAM detected\n", dimm_num);
                                dimm_populated[dimm_num] = SDRAM_DDR1;
                                break;
                        case 8:
-                               debug("DIMM slot %d: DDR2 SDRAM detected\n", dimm_num);
+                               debug("DIMM slot %lu: DDR2 SDRAM detected\n", dimm_num);
                                dimm_populated[dimm_num] = SDRAM_DDR2;
                                break;
                        default:
@@ -796,7 +804,7 @@ static void check_frequency(unsigned long *dimm_populated,
                        else
                                cycle_time = (((tcyc_reg & 0xF0) >> 4) * 100) +
                                        ((tcyc_reg & 0x0F)*10);
-                       debug("cycle_time=%d [10 picoseconds]\n", cycle_time);
+                       debug("cycle_time=%lu [10 picoseconds]\n", cycle_time);
 
                        if  (cycle_time > (calc_cycle_time + 10)) {
                                /*
@@ -1407,7 +1415,7 @@ static void program_mode(unsigned long *dimm_populated,
 
        mfsdr(SDR0_DDR0, sdr_ddrpll);
        sdram_freq = MULDIV64((board_cfg.freqPLB), SDR0_DDR0_DDRM_DECODE(sdr_ddrpll), 1);
-       debug("sdram_freq=%d\n", sdram_freq);
+       debug("sdram_freq=%lu\n", sdram_freq);
 
        /*------------------------------------------------------------------
         * Handle the timing.  We need to find the worst case timing of all
@@ -1437,7 +1445,7 @@ static void program_mode(unsigned long *dimm_populated,
 
                        /* t_wr_ns = max(t_wr_ns, (unsigned long)dimm_spd[dimm_num][36] >> 2); */ /*  not used in this loop. */
                        cas_bit = spd_read(iic0_dimm_addr[dimm_num], 18);
-                       debug("cas_bit[SPD byte 18]=%02x\n", cas_bit);
+                       debug("cas_bit[SPD byte 18]=%02lx\n", cas_bit);
 
                        /* For a particular DIMM, grab the three CAS values it supports */
                        for (cas_index = 0; cas_index < 3; cas_index++) {
@@ -1469,7 +1477,7 @@ static void program_mode(unsigned long *dimm_populated,
                                                (((tcyc_reg & 0xF0) >> 4) * 100) +
                                                ((tcyc_reg & 0x0F)*10);
                                }
-                               debug("cas_index=%d: cycle_time_ns_x_100=%d\n", cas_index,
+                               debug("cas_index=%lu: cycle_time_ns_x_100=%lu\n", cas_index,
                                      cycle_time_ns_x_100[cas_index]);
                        }
 
@@ -1580,9 +1588,9 @@ static void program_mode(unsigned long *dimm_populated,
        cycle_3_0_clk = MULDIV64(ONE_BILLION, 100, max_3_0_tcyc_ns_x_100) + 10;
        cycle_4_0_clk = MULDIV64(ONE_BILLION, 100, max_4_0_tcyc_ns_x_100) + 10;
        cycle_5_0_clk = MULDIV64(ONE_BILLION, 100, max_5_0_tcyc_ns_x_100) + 10;
-       debug("cycle_3_0_clk=%d\n", cycle_3_0_clk);
-       debug("cycle_4_0_clk=%d\n", cycle_4_0_clk);
-       debug("cycle_5_0_clk=%d\n", cycle_5_0_clk);
+       debug("cycle_3_0_clk=%lu\n", cycle_3_0_clk);
+       debug("cycle_4_0_clk=%lu\n", cycle_4_0_clk);
+       debug("cycle_5_0_clk=%lu\n", cycle_5_0_clk);
 
        if (sdram_ddr1 == TRUE) { /* DDR1 */
                if ((cas_2_0_available == TRUE) && (sdram_freq <= cycle_2_0_clk)) {
@@ -2797,13 +2805,13 @@ calibration_loop:
        }
 
        mfsdram(SDRAM_DLCR, val);
-       debug("%s[%d] DLCR: 0x%08X\n", __FUNCTION__, __LINE__, val);
+       debug("%s[%d] DLCR: 0x%08lX\n", __FUNCTION__, __LINE__, val);
        mfsdram(SDRAM_RQDC, val);
-       debug("%s[%d] RQDC: 0x%08X\n", __FUNCTION__, __LINE__, val);
+       debug("%s[%d] RQDC: 0x%08lX\n", __FUNCTION__, __LINE__, val);
        mfsdram(SDRAM_RFDC, val);
-       debug("%s[%d] RFDC: 0x%08X\n", __FUNCTION__, __LINE__, val);
+       debug("%s[%d] RFDC: 0x%08lX\n", __FUNCTION__, __LINE__, val);
        mfsdram(SDRAM_RDCC, val);
-       debug("%s[%d] RDCC: 0x%08X\n", __FUNCTION__, __LINE__, val);
+       debug("%s[%d] RDCC: 0x%08lX\n", __FUNCTION__, __LINE__, val);
 }
 #else /* calibration test with hardvalues */
 /*-----------------------------------------------------------------------------+
@@ -3196,10 +3204,10 @@ inline void ppc4xx_ibm_ddr2_register_dump(void)
 
 #if (defined(CONFIG_440SP) || defined(CONFIG_440SPE) || \
      defined(CONFIG_460EX) || defined(CONFIG_460GT))
-       PPC4xx_IBM_DDR2_DUMP_REGISTER(R0BAS);
-       PPC4xx_IBM_DDR2_DUMP_REGISTER(R1BAS);
-       PPC4xx_IBM_DDR2_DUMP_REGISTER(R2BAS);
-       PPC4xx_IBM_DDR2_DUMP_REGISTER(R3BAS);
+       PPC4xx_IBM_DDR2_DUMP_MQ_REGISTER(R0BAS);
+       PPC4xx_IBM_DDR2_DUMP_MQ_REGISTER(R1BAS);
+       PPC4xx_IBM_DDR2_DUMP_MQ_REGISTER(R2BAS);
+       PPC4xx_IBM_DDR2_DUMP_MQ_REGISTER(R3BAS);
 #endif /* (defined(CONFIG_440SP) || ... */
 #if defined(CONFIG_405EX)
        PPC4xx_IBM_DDR2_DUMP_REGISTER(BESR);
index 99b8e2f..4b5d636 100644 (file)
@@ -87,6 +87,20 @@ DECLARE_GLOBAL_DATA_PTR;
  */
 int __pci_pre_init(struct pci_controller *hose)
 {
+#if defined (CONFIG_405EP)
+       /*
+        * Enable the internal PCI arbiter by default.
+        *
+        * On 405EP CPUs the internal arbiter can be controlled
+        * by the I2C strapping EEPROM. If you want to do so
+        * or if you want to disable the arbiter pci_pre_init()
+        * must be reimplemented without enabling the arbiter.
+        * The arbiter is enabled in this place because of
+        * compatibility reasons.
+        */
+       mtdcr(cpc0_pci, mfdcr(cpc0_pci) | CPC0_PCI_ARBIT_EN);
+#endif /* CONFIG_405EP */
+
        return 1;
 }
 int pci_pre_init(struct pci_controller *hose) __attribute__((weak, alias("__pci_pre_init")));
@@ -99,6 +113,19 @@ ushort pmc405_pci_subsys_deviceid(void);
 
 /*#define DEBUG*/
 
+int __is_pci_host(struct pci_controller *hose)
+{
+#if defined(CONFIG_405GP)
+       if (mfdcr(strap) & PSR_PCI_ARBIT_EN)
+               return 1;
+#elif defined (CONFIG_405EP)
+       if (mfdcr(cpc0_pci) & CPC0_PCI_ARBIT_EN)
+               return 1;
+#endif
+       return 0;
+}
+int is_pci_host(struct pci_controller *hose) __attribute__((weak, alias("__is_pci_host")));
+
 /*-----------------------------------------------------------------------------+
  * pci_init.  Initializes the 405GP PCI Configuration regs.
  *-----------------------------------------------------------------------------*/
@@ -270,7 +297,7 @@ void pci_405gp_init(struct pci_controller *hose)
         */
        pci_write_config_word(PCIDEVID_405GP, PCI_SUBSYSTEM_VENDOR_ID, CONFIG_SYS_PCI_SUBSYS_VENDORID);
 #ifdef CONFIG_CPCI405
-       if (mfdcr(strap) & PSR_PCI_ARBIT_EN)
+       if (is_pci_host(hose))
                pci_write_config_word(PCIDEVID_405GP, PCI_SUBSYSTEM_ID, CONFIG_SYS_PCI_SUBSYS_DEVICEID);
        else
                pci_write_config_word(PCIDEVID_405GP, PCI_SUBSYSTEM_ID, CONFIG_SYS_PCI_SUBSYS_DEVICEID2);
@@ -295,7 +322,7 @@ void pci_405gp_init(struct pci_controller *hose)
 
 #if (CONFIG_PCI_HOST != PCI_HOST_ADAPTER)
 #if (CONFIG_PCI_HOST == PCI_HOST_AUTO)
-       if ((mfdcr(strap) & PSR_PCI_ARBIT_EN) ||
+       if (is_pci_host(hose) ||
            (((s = getenv("pciscan")) != NULL) && (strcmp(s, "yes") == 0)))
 #endif
        {
@@ -310,8 +337,15 @@ void pci_405gp_init(struct pci_controller *hose)
        }
 #endif
 
-#if defined(CONFIG_405EP) /* on ppc405ep vendor id is not set */
-       pci_write_config_word(PCIDEVID_405GP, PCI_VENDOR_ID, 0x1014); /* IBM */
+#if defined(CONFIG_405EP)
+       /*
+        * on ppc405ep vendor/device id is not set
+        * The user manual says 0x1014 (IBM) / 0x0156 (405GP!)
+        * are the correct values.
+        */
+       pci_write_config_word(PCIDEVID_405GP, PCI_VENDOR_ID, PCI_VENDOR_ID_IBM);
+       pci_write_config_word(PCIDEVID_405GP,
+                             PCI_DEVICE_ID, PCI_DEVICE_ID_IBM_405GP);
 #endif
 
        /*
@@ -325,7 +359,7 @@ void pci_405gp_init(struct pci_controller *hose)
         * Scan the PCI bus and configure devices found.
         *--------------------------------------------------------------------------*/
 #if (CONFIG_PCI_HOST == PCI_HOST_AUTO)
-       if ((mfdcr(strap) & PSR_PCI_ARBIT_EN) ||
+       if (is_pci_host(hose) ||
            (((s = getenv("pciscan")) != NULL) && (strcmp(s, "yes") == 0)))
 #endif
        {
index 06f44ad..fb3837c 100644 (file)
@@ -54,6 +54,7 @@ int __get_cpu_num(void)
 }
 int get_cpu_num(void) __attribute__((weak, alias("__get_cpu_num")));
 
+#if defined(CONFIG_PCI)
 #if defined(CONFIG_405GP) || \
     defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
     defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
@@ -76,6 +77,7 @@ static int pci_async_enabled(void)
 #endif
 }
 #endif
+#endif /* CONFIG_PCI */
 
 #if defined(CONFIG_PCI) && !defined(CONFIG_IOP480) && \
     !defined(CONFIG_405) && !defined(CONFIG_405EX)
index 577d33f..bbd795d 100644 (file)
@@ -174,11 +174,6 @@ cpu_init_f (void)
         * Set EMAC noise filter bits
         */
        mtdcr(cpc0_epctl, CPC0_EPRCSR_E0NFE | CPC0_EPRCSR_E1NFE);
-
-       /*
-        * Enable the internal PCI arbiter
-        */
-       mtdcr(cpc0_pci, mfdcr(cpc0_pci) | CPC0_PCI_HOST_CFG_EN | CPC0_PCI_ARBIT_EN);
 #endif /* CONFIG_405EP */
 
 #if defined(CONFIG_SYS_4xx_GPIO_TABLE)
index ac96fc2..582c781 100644 (file)
@@ -2021,6 +2021,7 @@ pci_wait:
 ! Output r3 = none
 !-----------------------------------------------------------------------------
 */
+       .globl  pll_write
 pll_write:
        mfdcr  r5, CPC0_UCR
        andis. r5,r5,0xFFFF
index a95d1cb..d298b31 100644 (file)
@@ -164,7 +164,7 @@ void pic_irq_enable(unsigned int vec)
        else if (vec >= 96)
                mtdcr(uic3er, mfdcr(uic3er) | UIC_MASK(vec));
 
-       debug("Install interrupt for vector %d ==> %p\n", vec, handler);
+       debug("Install interrupt vector %d\n", vec);
 }
 
 void pic_irq_disable(unsigned int vec)
similarity index 89%
rename from board/renesas/rsk7203/u-boot.lds
rename to cpu/sh2/u-boot.lds
index bd4a550..6db5a00 100644 (file)
@@ -28,15 +28,9 @@ ENTRY(_start)
 SECTIONS
 {
        /*
-        * Base address of internal SDRAM is 0x0C000000.
-        *
-        * NOTE: This address must match with the definition of
-        *TEXT_BASE in config.mk (in this directory).
+        * entry and reloct_dst will be provided via ldflags
         */
-
-       . = 0x0C000000 + (8*1024*1024) - (256*1024);
-
-       PROVIDE (reloc_dst = .);
+       . = .;
 
        PROVIDE (_ftext = .);
        PROVIDE (_fcode = .);
similarity index 87%
rename from board/mpr2/u-boot.lds
rename to cpu/sh3/u-boot.lds
index deae344..1e55b83 100644 (file)
@@ -34,16 +34,9 @@ ENTRY(_start)
 SECTIONS
 {
        /*
-          Base address of internal SDRAM is 0x8C000000.
-          U-Boot resides in the last 256 kB of the 64 MB.
-
-          NOTE: This address must match with the definition of
-          TEXT_BASE in config.mk (in this directory).
-
-       */
-       . = 0x8C000000 + (64*1024*1024) - (256*1024);
-
-       PROVIDE (reloc_dst = .);
+        * entry and reloct_dst will be provided via ldflags
+        */
+       . = .;
 
        PROVIDE (_ftext = .);
        PROVIDE (_fcode = .);
similarity index 90%
rename from board/renesas/sh7785lcr/u-boot.lds
rename to cpu/sh4/u-boot.lds
index 255ab37..bff9f43 100644 (file)
@@ -1,7 +1,9 @@
 /*
- * Copyrigth (c) 2007
+ * Copyright (C) 2007
  * Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
- * Copyrigth (c) 2008-2009 Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
+ *
+ * Copyright (C) 2008-2009
+ * Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com>
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -28,9 +30,10 @@ ENTRY(_start)
 
 SECTIONS
 {
-       . = 0x88000000 + (128 * 1024 * 1024) - (512 * 1024);
-
-       PROVIDE (reloc_dst = .);
+       /*
+        * entry and reloct_dst will be provided via ldflags
+        */
+       . = .;
 
        PROVIDE (_ftext = .);
        PROVIDE (_fcode = .);
@@ -85,7 +88,7 @@ SECTIONS
 
        PROVIDE (bss_start = .);
        PROVIDE (__bss_start = .);
-       .bss :
+       .bss (NOLOAD) :
        {
                *(.bss)
                . = ALIGN(4);
index 4a2c56b..84b5595 100644 (file)
@@ -27,7 +27,7 @@ Environment variables
 
 
 ------------------------------------------------------------------------------
-AT91SAM9261EK
+AT91SAM9261EK, AT91SAM9G10EK
 ------------------------------------------------------------------------------
 
 Memory map
@@ -75,6 +75,26 @@ Environment variables
 
 
 ------------------------------------------------------------------------------
+AT91SAM9M10G45EK
+------------------------------------------------------------------------------
+
+Memory map
+       0x20000000 - 23FFFFFF   SDRAM (64 MB)
+       0xC0000000 - Cxxxxxxx   Atmel Dataflash card (J12)
+
+Environment variables
+
+       U-Boot environment variables can be stored at different places:
+               - Dataflash on SPI chip select 0 (dataflash card)
+               - Nand flash.
+
+       You can choose your storage location at config step (here for at91sam9m10g45ek) :
+               make at91sam9m10g45ek_config                    - use data flash (spi cs0) (default)
+               make at91sam9m10g45ek_nandflash_config          - use nand flash
+               make at91sam9m10g45ek_dataflash_cs0_config      - use data flash (spi cs0)
+
+
+------------------------------------------------------------------------------
 AT91SAM9RLEK
 ------------------------------------------------------------------------------
 
index bb72289..b077d9a 100644 (file)
@@ -101,15 +101,6 @@ Configuration Options:
    CONFIG_SYS_NAND_MAX_CHIPS
       The maximum number of NAND chips per device to be supported.
 
-   CONFIG_SYS_DAVINCI_BROKEN_ECC
-      Versions of U-Boot <= 1.3.3 and Montavista Linux kernels
-      generated bogus ECCs on large-page NAND. Both large and small page
-      NAND ECCs were incompatible with the Linux davinci git tree (since
-      NAND was integrated in 2.6.24).
-      Turn this ON if you want backwards compatibility.
-      Turn this OFF if you want U-Boot and the Linux davinci git kernel
-      to use the same ECC format.
-
 NOTE:
 =====
 
diff --git a/doc/README.phytec.pcm030 b/doc/README.phytec.pcm030
new file mode 100644 (file)
index 0000000..35a411a
--- /dev/null
@@ -0,0 +1,46 @@
+To build RAMBOOT, replace this section the main Makefile
+
+pcm030_config \
+pcm030_RAMBOOT_config \
+pcm030_LOWBOOT_config: unconfig
+       @ >include/config.h
+       @[ -z "$(findstring LOWBOOT_,$@)" ] || \
+               { echo "TEXT_BASE = 0xFF000000" >board/phytec/pcm030/config.tmp ; \
+                 echo "... with LOWBOOT configuration" ; \
+               }
+       @[ -z "$(findstring RAMBOOT_,$@)" ] || \
+              { echo "TEXT_BASE = 0x00100000" >board/phycore_mpc5200b_tiny/\
+                       config.tmp ; \
+                echo "... with RAMBOOT configuration" ; \
+                echo "... remember to make sure that MBAR is already \
+                               switched to 0xF0000000 !!!" ; \
+              }
+       @$(MKCONFIG) -a pcm030 ppc mpc5xxx pcm030 phytec
+       @ echo "remember to set pcm030_REV to 0 for rev 1245.0 rev or to 1 for rev 1245.1"
+
+
+Alternative SDRAM settings:
+
+#define SDRAM_MODE     0x018D0000
+#define SDRAM_EMODE    0x40090000
+#define SDRAM_CONTROL  0x715f0f00
+#define SDRAM_CONFIG1  0x73722930
+#define SDRAM_CONFIG2  0x47770000
+
+/* Settings for XLB = 99 MHz */
+#define SDRAM_MODE     0x008D0000
+#define SDRAM_EMODE    0x40090000
+#define SDRAM_CONTROL  0x714b0f00
+#define SDRAM_CONFIG1  0x63611730
+#define SDRAM_CONFIG2  0x47670000
+
+The board ships default with the environment in EEPROM
+Moving the environment to flash can be more reliable
+
+#define CONFIG_ENV_IS_IN_FLASH 1
+#define CONFIG_ENV_ADDR                (CONFIG_SYS_FLASH_BASE + 0xfe0000)
+#define CONFIG_ENV_SIZE                0x20000
+#define CONFIG_ENV_SECT_SIZE   0x20000
+
+
+
index d0732f5..81ac5d3 100644 (file)
@@ -835,14 +835,19 @@ static int flash_write_cfiword (flash_info_t * info, ulong dest,
                break;
        case CFI_CMDSET_AMD_EXTENDED:
        case CFI_CMDSET_AMD_STANDARD:
-#ifdef CONFIG_FLASH_CFI_LEGACY
-       case CFI_CMDSET_AMD_LEGACY:
-#endif
                sect = find_sector(info, dest);
                flash_unlock_seq (info, sect);
                flash_write_cmd (info, sect, info->addr_unlock1, AMD_CMD_WRITE);
                sect_found = 1;
                break;
+#ifdef CONFIG_FLASH_CFI_LEGACY
+       case CFI_CMDSET_AMD_LEGACY:
+               sect = find_sector(info, dest);
+               flash_unlock_seq (info, 0);
+               flash_write_cmd (info, 0, info->addr_unlock1, AMD_CMD_WRITE);
+               sect_found = 1;
+               break;
+#endif
        }
 
        switch (info->portwidth) {
index 71dd5b9..a5680e8 100644 (file)
@@ -40,11 +40,13 @@ COBJS-$(CONFIG_DRIVER_NAND_BFIN) += bfin_nand.o
 COBJS-$(CONFIG_NAND_DAVINCI) += davinci_nand.o
 COBJS-$(CONFIG_NAND_FSL_ELBC) += fsl_elbc_nand.o
 COBJS-$(CONFIG_NAND_FSL_UPM) += fsl_upm.o
+COBJS-$(CONFIG_NAND_KIRKWOOD) += kirkwood_nand.o
 COBJS-$(CONFIG_NAND_MPC5121_NFC) += mpc5121_nfc.o
 COBJS-$(CONFIG_NAND_NOMADIK) += nomadik.o
-COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.c
+COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o
 COBJS-$(CONFIG_NAND_S3C64XX) += s3c64xx.o
 COBJS-$(CONFIG_NAND_OMAP_GPMC) += omap_gpmc.o
+COBJS-$(CONFIG_NAND_PLAT) += nand_plat.o
 endif
 
 COBJS  := $(COBJS-y)
index 8ef18b8..ca40c6a 100644 (file)
@@ -47,7 +47,7 @@
 #include <asm/arch/nand_defs.h>
 #include <asm/arch/emif_defs.h>
 
-extern struct nand_chip nand_dev_desc[CONFIG_SYS_MAX_NAND_DEVICE];
+static emif_registers *const emif_regs = (void *) DAVINCI_ASYNC_EMIF_CNTRL_BASE;
 
 static void nand_davinci_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)
 {
@@ -68,81 +68,30 @@ static void nand_davinci_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int c
                writeb(cmd, this->IO_ADDR_W);
 }
 
-/* Set WP on deselect, write enable on select */
-static void nand_davinci_select_chip(struct mtd_info *mtd, int chip)
-{
-#define GPIO_SET_DATA01        0x01c67018
-#define GPIO_CLR_DATA01        0x01c6701c
-#define GPIO_NAND_WP   (1 << 4)
-#ifdef SONATA_BOARD_GPIOWP
-       if (chip < 0) {
-               REG(GPIO_CLR_DATA01) |= GPIO_NAND_WP;
-       } else {
-               REG(GPIO_SET_DATA01) |= GPIO_NAND_WP;
-       }
-#endif
-}
-
 #ifdef CONFIG_SYS_NAND_HW_ECC
-#ifdef CONFIG_SYS_DAVINCI_BROKEN_ECC
-/* Linux-compatible ECC uses MTD defaults. */
-/* These layouts are not compatible with Linux or RBL/UBL. */
-#ifdef CONFIG_SYS_NAND_LARGEPAGE
-static struct nand_ecclayout davinci_nand_ecclayout = {
-       .eccbytes = 12,
-       .eccpos = {8, 9, 10, 24, 25, 26, 40, 41, 42, 56, 57, 58},
-       .oobfree = {
-               {.offset = 2, .length = 6},
-               {.offset = 12, .length = 12},
-               {.offset = 28, .length = 12},
-               {.offset = 44, .length = 12},
-               {.offset = 60, .length = 4}
-       }
-};
-#elif defined(CONFIG_SYS_NAND_SMALLPAGE)
-static struct nand_ecclayout davinci_nand_ecclayout = {
-       .eccbytes = 3,
-       .eccpos = {0, 1, 2},
-       .oobfree = {
-               {.offset = 6, .length = 2},
-               {.offset = 8, .length = 8}
-       }
-};
-#else
-#error "Either CONFIG_SYS_NAND_LARGEPAGE or CONFIG_SYS_NAND_SMALLPAGE must be defined!"
-#endif
-#endif /* CONFIG_SYS_DAVINCI_BROKEN_ECC */
 
 static void nand_davinci_enable_hwecc(struct mtd_info *mtd, int mode)
 {
-       emifregs        emif_addr;
        int             dummy;
 
-       emif_addr = (emifregs)DAVINCI_ASYNC_EMIF_CNTRL_BASE;
+       dummy = emif_regs->NANDF1ECC;
 
-       dummy = emif_addr->NANDF1ECC;
-       dummy = emif_addr->NANDF2ECC;
-       dummy = emif_addr->NANDF3ECC;
-       dummy = emif_addr->NANDF4ECC;
-
-       emif_addr->NANDFCR |= (1 << 8);
+       /* FIXME:  only chipselect 0 is supported for now */
+       emif_regs->NANDFCR |= 1 << 8;
 }
 
 static u_int32_t nand_davinci_readecc(struct mtd_info *mtd, u_int32_t region)
 {
        u_int32_t       ecc = 0;
-       emifregs        emif_base_addr;
-
-       emif_base_addr = (emifregs)DAVINCI_ASYNC_EMIF_CNTRL_BASE;
 
        if (region == 1)
-               ecc = emif_base_addr->NANDF1ECC;
+               ecc = emif_regs->NANDF1ECC;
        else if (region == 2)
-               ecc = emif_base_addr->NANDF2ECC;
+               ecc = emif_regs->NANDF2ECC;
        else if (region == 3)
-               ecc = emif_base_addr->NANDF3ECC;
+               ecc = emif_regs->NANDF3ECC;
        else if (region == 4)
-               ecc = emif_base_addr->NANDF4ECC;
+               ecc = emif_regs->NANDF4ECC;
 
        return(ecc);
 }
@@ -150,29 +99,6 @@ static u_int32_t nand_davinci_readecc(struct mtd_info *mtd, u_int32_t region)
 static int nand_davinci_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code)
 {
        u_int32_t               tmp;
-#ifdef CONFIG_SYS_DAVINCI_BROKEN_ECC
-       /*
-        * This is not how you should read ECCs on large page Davinci devices.
-        * The region parameter gets you ECCs for flash chips on different chip
-        * selects, not the 4x512 byte pages in a 2048 byte page.
-        *
-        * Preserved for backwards compatibility though.
-        */
-
-       int                     region, n;
-       struct nand_chip        *this = mtd->priv;
-
-       n = (this->ecc.size/512);
-
-       region = 1;
-       while (n--) {
-               tmp = nand_davinci_readecc(mtd, region);
-               *ecc_code++ = tmp;
-               *ecc_code++ = tmp >> 16;
-               *ecc_code++ = ((tmp >> 8) & 0x0f) | ((tmp >> 20) & 0xf0);
-               region++;
-       }
-#else
        const int region = 1;
 
        tmp = nand_davinci_readecc(mtd, region);
@@ -187,148 +113,26 @@ static int nand_davinci_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u
        *ecc_code++ = tmp;
        *ecc_code++ = tmp >>  8;
        *ecc_code++ = tmp >> 16;
-#endif /* CONFIG_SYS_DAVINCI_BROKEN_ECC */
-       return(0);
-}
-
-#ifdef CONFIG_SYS_DAVINCI_BROKEN_ECC
-static void nand_davinci_gen_true_ecc(u_int8_t *ecc_buf)
-{
-       u_int32_t       tmp = ecc_buf[0] | (ecc_buf[1] << 16) | ((ecc_buf[2] & 0xf0) << 20) | ((ecc_buf[2] & 0x0f) << 8);
-
-       ecc_buf[0] = ~(P64o(tmp) | P64e(tmp) | P32o(tmp) | P32e(tmp) | P16o(tmp) | P16e(tmp) | P8o(tmp) | P8e(tmp));
-       ecc_buf[1] = ~(P1024o(tmp) | P1024e(tmp) | P512o(tmp) | P512e(tmp) | P256o(tmp) | P256e(tmp) | P128o(tmp) | P128e(tmp));
-       ecc_buf[2] = ~( P4o(tmp) | P4e(tmp) | P2o(tmp) | P2e(tmp) | P1o(tmp) | P1e(tmp) | P2048o(tmp) | P2048e(tmp));
-}
-
-static int nand_davinci_compare_ecc(u_int8_t *ecc_nand, u_int8_t *ecc_calc, u_int8_t *page_data)
-{
-       u_int32_t       i;
-       u_int8_t        tmp0_bit[8], tmp1_bit[8], tmp2_bit[8];
-       u_int8_t        comp0_bit[8], comp1_bit[8], comp2_bit[8];
-       u_int8_t        ecc_bit[24];
-       u_int8_t        ecc_sum = 0;
-       u_int8_t        find_bit = 0;
-       u_int32_t       find_byte = 0;
-       int             is_ecc_ff;
-
-       is_ecc_ff = ((*ecc_nand == 0xff) && (*(ecc_nand + 1) == 0xff) && (*(ecc_nand + 2) == 0xff));
-
-       nand_davinci_gen_true_ecc(ecc_nand);
-       nand_davinci_gen_true_ecc(ecc_calc);
-
-       for (i = 0; i <= 2; i++) {
-               *(ecc_nand + i) = ~(*(ecc_nand + i));
-               *(ecc_calc + i) = ~(*(ecc_calc + i));
-       }
 
-       for (i = 0; i < 8; i++) {
-               tmp0_bit[i] = *ecc_nand % 2;
-               *ecc_nand = *ecc_nand / 2;
-       }
-
-       for (i = 0; i < 8; i++) {
-               tmp1_bit[i] = *(ecc_nand + 1) % 2;
-               *(ecc_nand + 1) = *(ecc_nand + 1) / 2;
-       }
-
-       for (i = 0; i < 8; i++) {
-               tmp2_bit[i] = *(ecc_nand + 2) % 2;
-               *(ecc_nand + 2) = *(ecc_nand + 2) / 2;
-       }
-
-       for (i = 0; i < 8; i++) {
-               comp0_bit[i] = *ecc_calc % 2;
-               *ecc_calc = *ecc_calc / 2;
-       }
-
-       for (i = 0; i < 8; i++) {
-               comp1_bit[i] = *(ecc_calc + 1) % 2;
-               *(ecc_calc + 1) = *(ecc_calc + 1) / 2;
-       }
-
-       for (i = 0; i < 8; i++) {
-               comp2_bit[i] = *(ecc_calc + 2) % 2;
-               *(ecc_calc + 2) = *(ecc_calc + 2) / 2;
-       }
-
-       for (i = 0; i< 6; i++)
-               ecc_bit[i] = tmp2_bit[i + 2] ^ comp2_bit[i + 2];
-
-       for (i = 0; i < 8; i++)
-               ecc_bit[i + 6] = tmp0_bit[i] ^ comp0_bit[i];
-
-       for (i = 0; i < 8; i++)
-               ecc_bit[i + 14] = tmp1_bit[i] ^ comp1_bit[i];
-
-       ecc_bit[22] = tmp2_bit[0] ^ comp2_bit[0];
-       ecc_bit[23] = tmp2_bit[1] ^ comp2_bit[1];
-
-       for (i = 0; i < 24; i++)
-               ecc_sum += ecc_bit[i];
+       /* NOTE:  the above code matches mainline Linux:
+        *      .PQR.stu ==> ~PQRstu
+        *
+        * MontaVista/TI kernels encode those bytes differently, use
+        * complicated (and allegedly sometimes-wrong) correction code,
+        * and usually shipped with U-Boot that uses software ECC:
+        *      .PQR.stu ==> PsQRtu
+        *
+        * If you need MV/TI compatible NAND I/O in U-Boot, it should
+        * be possible to (a) change the mangling above, (b) reverse
+        * that mangling in nand_davinci_correct_data() below.
+        */
 
-       switch (ecc_sum) {
-               case 0:
-                       /* Not reached because this function is not called if
-                          ECC values are equal */
-                       return 0;
-               case 1:
-                       /* Uncorrectable error */
-                       MTDDEBUG (MTD_DEBUG_LEVEL0,
-                                 "ECC UNCORRECTED_ERROR 1\n");
-                       return(-1);
-               case 12:
-                       /* Correctable error */
-                       find_byte = (ecc_bit[23] << 8) +
-                               (ecc_bit[21] << 7) +
-                               (ecc_bit[19] << 6) +
-                               (ecc_bit[17] << 5) +
-                               (ecc_bit[15] << 4) +
-                               (ecc_bit[13] << 3) +
-                               (ecc_bit[11] << 2) +
-                               (ecc_bit[9]  << 1) +
-                               ecc_bit[7];
-
-                       find_bit = (ecc_bit[5] << 2) + (ecc_bit[3] << 1) + ecc_bit[1];
-
-                       MTDDEBUG (MTD_DEBUG_LEVEL0, "Correcting single bit ECC "
-                                 "error at offset: %d, bit: %d\n",
-                                 find_byte, find_bit);
-
-                       page_data[find_byte] ^= (1 << find_bit);
-
-                       return(0);
-               default:
-                       if (is_ecc_ff) {
-                               if (ecc_calc[0] == 0 && ecc_calc[1] == 0 && ecc_calc[2] == 0)
-                                       return(0);
-                       }
-                       MTDDEBUG (MTD_DEBUG_LEVEL0,
-                                 "UNCORRECTED_ERROR default\n");
-                       return(-1);
-       }
+       return 0;
 }
-#endif /* CONFIG_SYS_DAVINCI_BROKEN_ECC */
 
 static int nand_davinci_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc)
 {
        struct nand_chip *this = mtd->priv;
-#ifdef CONFIG_SYS_DAVINCI_BROKEN_ECC
-       int                     block_count = 0, i, rc;
-
-       block_count = (this->ecc.size/512);
-       for (i = 0; i < block_count; i++) {
-               if (memcmp(read_ecc, calc_ecc, 3) != 0) {
-                       rc = nand_davinci_compare_ecc(read_ecc, calc_ecc, dat);
-                       if (rc < 0) {
-                               return(rc);
-                       }
-               }
-               read_ecc += 3;
-               calc_ecc += 3;
-               dat += 512;
-       }
-#else
        u_int32_t ecc_nand = read_ecc[0] | (read_ecc[1] << 8) |
                                          (read_ecc[2] << 16);
        u_int32_t ecc_calc = calc_ecc[0] | (calc_ecc[1] << 8) |
@@ -362,31 +166,24 @@ static int nand_davinci_correct_data(struct mtd_info *mtd, u_char *dat, u_char *
                        return -1;
                }
        }
-#endif /* CONFIG_SYS_DAVINCI_BROKEN_ECC */
        return(0);
 }
 #endif /* CONFIG_SYS_NAND_HW_ECC */
 
 static int nand_davinci_dev_ready(struct mtd_info *mtd)
 {
-       emifregs        emif_addr;
-
-       emif_addr = (emifregs)DAVINCI_ASYNC_EMIF_CNTRL_BASE;
-
-       return(emif_addr->NANDFSR & 0x1);
-}
-
-static int nand_davinci_waitfunc(struct mtd_info *mtd, struct nand_chip *this)
-{
-       while(!nand_davinci_dev_ready(mtd)) {;}
-       *NAND_CE0CLE = NAND_STATUS;
-       return(*NAND_CE0DATA);
+       return emif_regs->NANDFSR & 0x1;
 }
 
 static void nand_flash_init(void)
 {
+       /* This is for DM6446 EVM and *very* similar.  DO NOT GROW THIS!
+        * Instead, have your board_init() set EMIF timings, based on its
+        * knowledge of the clocks and what devices are hooked up ... and
+        * don't even do that unless no UBL handled it.
+        */
+#ifdef CONFIG_SOC_DM6446
        u_int32_t       acfg1 = 0x3ffffffc;
-       emifregs        emif_regs;
 
        /*------------------------------------------------------------------*
         *  NAND FLASH CHIP TIMEOUT @ 459 MHz                               *
@@ -408,39 +205,22 @@ static void nand_flash_init(void)
                | (0 << 0 )     /* asyncSize    8-bit bus */
                ;
 
-       emif_regs = (emifregs)DAVINCI_ASYNC_EMIF_CNTRL_BASE;
-
        emif_regs->AB1CR = acfg1; /* CS2 */
 
        emif_regs->NANDFCR = 0x00000101; /* NAND flash on CS2 */
+#endif
 }
 
-int board_nand_init(struct nand_chip *nand)
+void davinci_nand_init(struct nand_chip *nand)
 {
-       nand->IO_ADDR_R   = (void  __iomem *)NAND_CE0DATA;
-       nand->IO_ADDR_W   = (void  __iomem *)NAND_CE0DATA;
        nand->chip_delay  = 0;
-       nand->select_chip = nand_davinci_select_chip;
 #ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
        nand->options     = NAND_USE_FLASH_BBT;
 #endif
 #ifdef CONFIG_SYS_NAND_HW_ECC
        nand->ecc.mode = NAND_ECC_HW;
-#ifdef CONFIG_SYS_DAVINCI_BROKEN_ECC
-       nand->ecc.layout  = &davinci_nand_ecclayout;
-#ifdef CONFIG_SYS_NAND_LARGEPAGE
-       nand->ecc.size = 2048;
-       nand->ecc.bytes = 12;
-#elif defined(CONFIG_SYS_NAND_SMALLPAGE)
        nand->ecc.size = 512;
        nand->ecc.bytes = 3;
-#else
-#error "Either CONFIG_SYS_NAND_LARGEPAGE or CONFIG_SYS_NAND_SMALLPAGE must be defined!"
-#endif
-#else
-       nand->ecc.size = 512;
-       nand->ecc.bytes = 3;
-#endif /* CONFIG_SYS_DAVINCI_BROKEN_ECC */
        nand->ecc.calculate = nand_davinci_calculate_ecc;
        nand->ecc.correct  = nand_davinci_correct_data;
        nand->ecc.hwctl  = nand_davinci_enable_hwecc;
@@ -452,9 +232,14 @@ int board_nand_init(struct nand_chip *nand)
        nand->cmd_ctrl = nand_davinci_hwcontrol;
 
        nand->dev_ready = nand_davinci_dev_ready;
-       nand->waitfunc = nand_davinci_waitfunc;
 
        nand_flash_init();
+}
 
-       return(0);
+int board_nand_init(struct nand_chip *chip) __attribute__((weak));
+
+int board_nand_init(struct nand_chip *chip)
+{
+       davinci_nand_init(chip);
+       return 0;
 }
index 3f318e0..77a33c0 100644 (file)
@@ -766,6 +766,9 @@ int board_nand_init(struct nand_chip *nand)
        nand->waitfunc = fsl_elbc_wait;
 
        /* set up nand options */
+       /* redirect the pointer of bbt pattern to RAM */
+       bbt_main_descr.pattern = bbt_pattern;
+       bbt_mirror_descr.pattern = mirror_pattern;
        nand->bbt_td = &bbt_main_descr;
        nand->bbt_md = &bbt_mirror_descr;
 
@@ -812,6 +815,7 @@ int board_nand_init(struct nand_chip *nand)
        /* Large-page-specific setup */
        if (or & OR_FCM_PGS) {
                priv->page_size = 1;
+               largepage_memorybased.pattern = scan_ff_pattern;
                nand->badblock_pattern = &largepage_memorybased;
 
                /* adjust ecc setup if needed */
diff --git a/drivers/mtd/nand/kirkwood_nand.c b/drivers/mtd/nand/kirkwood_nand.c
new file mode 100644 (file)
index 0000000..376378e
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Written-by: Prafulla Wadaskar <prafulla@marvell.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/arch/kirkwood.h>
+#include <nand.h>
+
+/* NAND Flash Soc registers */
+struct kwnandf_registers {
+       u32 rd_params;  /* 0x10418 */
+       u32 wr_param;   /* 0x1041c */
+       u8  pad[0x10470 - 0x1041c - 4];
+       u32 ctrl;       /* 0x10470 */
+};
+
+static struct kwnandf_registers *nf_reg =
+       (struct kwnandf_registers *)KW_NANDF_BASE;
+
+/*
+ * hardware specific access to control-lines/bits
+ */
+#define NAND_ACTCEBOOT_BIT             0x02
+
+static void kw_nand_hwcontrol(struct mtd_info *mtd, int cmd,
+                             unsigned int ctrl)
+{
+       struct nand_chip *nc = mtd->priv;
+       u32 offs;
+
+       if (cmd == NAND_CMD_NONE)
+               return;
+
+       if (ctrl & NAND_CLE)
+               offs = (1 << 0);        /* Commands with A[1:0] == 01 */
+       else if (ctrl & NAND_ALE)
+               offs = (1 << 1);        /* Addresses with A[1:0] == 10 */
+       else
+               return;
+
+       writeb(cmd, nc->IO_ADDR_W + offs);
+}
+
+void kw_nand_select_chip(struct mtd_info *mtd, int chip)
+{
+       u32 data;
+
+       data = readl(&nf_reg->ctrl);
+       data |= NAND_ACTCEBOOT_BIT;
+       writel(data, &nf_reg->ctrl);
+}
+
+int board_nand_init(struct nand_chip *nand)
+{
+       nand->options = NAND_COPYBACK | NAND_CACHEPRG | NAND_NO_PADDING;
+       nand->ecc.mode = NAND_ECC_SOFT;
+       nand->cmd_ctrl = kw_nand_hwcontrol;
+       nand->chip_delay = 30;
+       nand->select_chip = kw_nand_select_chip;
+       return 0;
+}
diff --git a/drivers/mtd/nand/nand_plat.c b/drivers/mtd/nand/nand_plat.c
new file mode 100644 (file)
index 0000000..b35492b
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Genericish driver for memory mapped NAND devices
+ *
+ * Copyright (c) 2006-2009 Analog Devices Inc.
+ * Licensed under the GPL-2 or later.
+ */
+
+/* Your board must implement the following macros:
+ *  NAND_PLAT_WRITE_CMD(chip, cmd)
+ *  NAND_PLAT_WRITE_ADR(chip, cmd)
+ *  NAND_PLAT_INIT()
+ *
+ * It may also implement the following:
+ *  NAND_PLAT_DEV_READY(chip)
+ */
+
+#include <common.h>
+#include <asm/io.h>
+
+#include <nand.h>
+
+static void plat_cmd_ctrl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
+{
+       struct nand_chip *this = mtd->priv;
+
+       if (cmd == NAND_CMD_NONE)
+               return;
+
+       if (ctrl & NAND_CLE)
+               NAND_PLAT_WRITE_CMD(this, cmd);
+       else
+               NAND_PLAT_WRITE_ADR(this, cmd);
+}
+
+#ifdef NAND_PLAT_DEV_READY
+static int plat_dev_ready(struct mtd_info *mtd)
+{
+       return NAND_PLAT_DEV_READY((struct nand_chip *)mtd->priv);
+}
+#else
+# define plat_dev_ready NULL
+#endif
+
+int board_nand_init(struct nand_chip *nand)
+{
+       NAND_PLAT_INIT();
+
+       nand->cmd_ctrl = plat_cmd_ctrl;
+       nand->dev_ready = plat_dev_ready;
+       nand->ecc.mode = NAND_ECC_SOFT;
+
+       return 0;
+}
index 88206d0..fc16282 100644 (file)
@@ -315,7 +315,7 @@ int nand_lock(struct mtd_info *mtd, int tight)
  *                       NAND_LOCK_STATUS_UNLOCK: page unlocked
  *
  */
-int nand_get_lock_status(struct mtd_info *mtd, ulong offset)
+int nand_get_lock_status(struct mtd_info *mtd, loff_t offset)
 {
        int ret = 0;
        int chipnr;
@@ -436,7 +436,7 @@ int nand_unlock(struct mtd_info *mtd, ulong start, ulong length)
  * @param length image length
  * @return image length including bad blocks
  */
-static size_t get_len_incl_bad (nand_info_t *nand, size_t offset,
+static size_t get_len_incl_bad (nand_info_t *nand, loff_t offset,
                                const size_t length)
 {
        size_t len_incl_bad = 0;
@@ -473,7 +473,7 @@ static size_t get_len_incl_bad (nand_info_t *nand, size_t offset,
  * @param buf           buffer to read from
  * @return             0 in case of success
  */
-int nand_write_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
+int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
                        u_char *buffer)
 {
        int rval;
@@ -498,7 +498,7 @@ int nand_write_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
        if (len_incl_bad == *length) {
                rval = nand_write (nand, offset, length, buffer);
                if (rval != 0)
-                       printf ("NAND write to offset %zx failed %d\n",
+                       printf ("NAND write to offset %llx failed %d\n",
                                offset, rval);
 
                return rval;
@@ -509,7 +509,7 @@ int nand_write_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
                size_t write_size;
 
                if (nand_block_isbad (nand, offset & ~(nand->erasesize - 1))) {
-                       printf ("Skip bad block 0x%08zx\n",
+                       printf ("Skip bad block 0x%08llx\n",
                                offset & ~(nand->erasesize - 1));
                        offset += nand->erasesize - block_offset;
                        continue;
@@ -522,7 +522,7 @@ int nand_write_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
 
                rval = nand_write (nand, offset, &write_size, p_buffer);
                if (rval != 0) {
-                       printf ("NAND write to offset %zx failed %d\n",
+                       printf ("NAND write to offset %llx failed %d\n",
                                offset, rval);
                        *length -= left_to_write;
                        return rval;
@@ -550,7 +550,7 @@ int nand_write_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
  * @param buffer buffer to write to
  * @return 0 in case of success
  */
-int nand_read_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
+int nand_read_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
                       u_char *buffer)
 {
        int rval;
@@ -568,7 +568,7 @@ int nand_read_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
        if (len_incl_bad == *length) {
                rval = nand_read (nand, offset, length, buffer);
                if (rval != 0)
-                       printf ("NAND read from offset %zx failed %d\n",
+                       printf ("NAND read from offset %llx failed %d\n",
                                offset, rval);
 
                return rval;
@@ -579,7 +579,7 @@ int nand_read_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
                size_t read_length;
 
                if (nand_block_isbad (nand, offset & ~(nand->erasesize - 1))) {
-                       printf ("Skipping bad block 0x%08zx\n",
+                       printf ("Skipping bad block 0x%08llx\n",
                                offset & ~(nand->erasesize - 1));
                        offset += nand->erasesize - block_offset;
                        continue;
@@ -592,7 +592,7 @@ int nand_read_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
 
                rval = nand_read (nand, offset, &read_length, p_buffer);
                if (rval != 0) {
-                       printf ("NAND read from offset %zx failed %d\n",
+                       printf ("NAND read from offset %llx failed %d\n",
                                offset, rval);
                        *length -= left_to_read;
                        return rval;
index 6de0a04..c184353 100644 (file)
@@ -447,14 +447,16 @@ static int macb_init(struct eth_device *netdev, bd_t *bd)
        /* choose RMII or MII mode. This depends on the board */
 #ifdef CONFIG_RMII
 #if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \
-    defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20)
+    defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) || \
+       defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
        macb_writel(macb, USRIO, MACB_BIT(RMII) | MACB_BIT(CLKEN));
 #else
        macb_writel(macb, USRIO, 0);
 #endif
 #else
 #if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \
-    defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20)
+    defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20) || \
+       defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
        macb_writel(macb, USRIO, MACB_BIT(CLKEN));
 #else
        macb_writel(macb, USRIO, MACB_BIT(MII));
index ec1d689..940d4a8 100644 (file)
@@ -37,6 +37,7 @@ COBJS-$(CONFIG_USB_SL811HS) += sl811-hcd.o
 COBJS-$(CONFIG_USB_EHCI) += ehci-hcd.o
 COBJS-$(CONFIG_USB_EHCI_FSL) += ehci-fsl.o
 COBJS-$(CONFIG_USB_EHCI_IXP4XX) += ehci-ixp.o
+COBJS-$(CONFIG_USB_EHCI_KIRKWOOD) += ehci-kirkwood.o
 COBJS-$(CONFIG_USB_EHCI_PCI) += ehci-pci.o
 COBJS-$(CONFIG_USB_EHCI_VCT) += ehci-vct.o
 
index bf148c4..c674929 100644 (file)
@@ -41,15 +41,15 @@ int ehci_hcd_init(void)
        struct usb_ehci *ehci;
 
        ehci = (struct usb_ehci *)CONFIG_SYS_MPC8xxx_USB_ADDR;
-       hccr = (struct ehci_hccr *)((uint32_t)ehci->caplength);
+       hccr = (struct ehci_hccr *)((uint32_t)&ehci->caplength);
        hcor = (struct ehci_hcor *)((uint32_t) hccr +
                        HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
 
        /* Set to Host mode */
-       setbits_le32((void *)ehci->usbmode, CM_HOST);
+       setbits_le32(&ehci->usbmode, CM_HOST);
 
-       out_be32((void *)ehci->snoop1, SNOOP_SIZE_2GB);
-       out_be32((void *)ehci->snoop2, 0x80000000 | SNOOP_SIZE_2GB);
+       out_be32(&ehci->snoop1, SNOOP_SIZE_2GB);
+       out_be32(&ehci->snoop2, 0x80000000 | SNOOP_SIZE_2GB);
 
        /* Init phy */
        if (!strcmp(getenv("usb_phy_type"), "utmi"))
@@ -58,13 +58,13 @@ int ehci_hcd_init(void)
                out_le32(&(hcor->or_portsc[0]), PORT_PTS_ULPI);
 
        /* Enable interface. */
-       setbits_be32((void *)ehci->control, USB_EN);
+       setbits_be32(&ehci->control, USB_EN);
 
-       out_be32((void *)ehci->prictrl, 0x0000000c);
-       out_be32((void *)ehci->age_cnt_limit, 0x00000040);
-       out_be32((void *)ehci->sictrl, 0x00000001);
+       out_be32(&ehci->prictrl, 0x0000000c);
+       out_be32(&ehci->age_cnt_limit, 0x00000040);
+       out_be32(&ehci->sictrl, 0x00000001);
 
-       in_le32((void *)ehci->usbmode);
+       in_le32(&ehci->usbmode);
 
        return 0;
 }
index bbd547b..423ea5d 100644 (file)
@@ -716,7 +716,7 @@ ehci_submit_root(struct usb_device *dev, unsigned long pipe, void *buffer,
                        goto unknown;
                }
                /* unblock posted writes */
-               ehci_readl(&hcor->or_usbcmd);
+               (void) ehci_readl(&hcor->or_usbcmd);
                break;
        case USB_REQ_CLEAR_FEATURE | ((USB_DIR_OUT | USB_RT_PORT) << 8):
                reg = ehci_readl(status_reg);
@@ -745,7 +745,7 @@ ehci_submit_root(struct usb_device *dev, unsigned long pipe, void *buffer,
                }
                ehci_writel(status_reg, reg);
                /* unblock posted write */
-               ehci_readl(&hcor->or_usbcmd);
+               (void) ehci_readl(&hcor->or_usbcmd);
                break;
        default:
                debug("Unknown request\n");
diff --git a/drivers/usb/host/ehci-kirkwood.c b/drivers/usb/host/ehci-kirkwood.c
new file mode 100644 (file)
index 0000000..64997b8
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Written-by: Prafulla Wadaskar <prafulla@marvell.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., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <usb.h>
+#include "ehci.h"
+#include "ehci-core.h"
+#include <asm/arch/kirkwood.h>
+
+#define rdl(off)       readl(KW_USB20_BASE + (off))
+#define wrl(off, val)  writel((val), KW_USB20_BASE + (off))
+
+#define USB_WINDOW_CTRL(i)     (0x320 + ((i) << 4))
+#define USB_WINDOW_BASE(i)     (0x324 + ((i) << 4))
+#define USB_TARGET_DRAM                0x0
+
+/*
+ * USB 2.0 Bridge Address Decoding registers setup
+ */
+static void usb_brg_adrdec_setup(void)
+{
+       int i;
+       u32 size, attrib;
+
+       for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
+
+               /* Enable DRAM bank */
+               switch (i) {
+               case 0:
+                       attrib = KWCPU_ATTR_DRAM_CS0;
+                       break;
+               case 1:
+                       attrib = KWCPU_ATTR_DRAM_CS1;
+                       break;
+               case 2:
+                       attrib = KWCPU_ATTR_DRAM_CS2;
+                       break;
+               case 3:
+                       attrib = KWCPU_ATTR_DRAM_CS3;
+                       break;
+               default:
+                       /* invalide bank, disable access */
+                       attrib = 0;
+                       break;
+               }
+
+               size = kw_sdram_bs(i);
+               if ((size) && (attrib))
+                       wrl(USB_WINDOW_CTRL(i),
+                               KWCPU_WIN_CTRL_DATA(size, USB_TARGET_DRAM,
+                                       attrib, KWCPU_WIN_ENABLE));
+               else
+                       wrl(USB_WINDOW_CTRL(i), KWCPU_WIN_DISABLE);
+
+               wrl(USB_WINDOW_BASE(i), kw_sdram_bar(i));
+       }
+}
+
+/*
+ * Create the appropriate control structures to manage
+ * a new EHCI host controller.
+ */
+int ehci_hcd_init(void)
+{
+       usb_brg_adrdec_setup();
+
+       hccr = (struct ehci_hccr *)(KW_USB20_BASE + 0x100);
+       hcor = (struct ehci_hcor *)((uint32_t) hccr
+                       + HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
+
+       debug("Kirkwood-ehci: init hccr %x and hcor %x hc_length %d\n",
+               (uint32_t)hccr, (uint32_t)hcor,
+               (uint32_t)HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
+
+       return 0;
+}
+
+/*
+ * Destroy the appropriate control structures corresponding
+ * the the EHCI host controller.
+ */
+int ehci_hcd_stop(void)
+{
+       return 0;
+}
+
index b81c536..f9da3f0 100644 (file)
@@ -307,10 +307,4 @@ extern void musb_configure_ep(struct musb_epinfo *epinfo, u8 cnt);
 extern void write_fifo(u8 ep, u32 length, void *fifo_data);
 extern void read_fifo(u8 ep, u32 length, void *fifo_data);
 
-/* extern functions */
-extern inline void musb_writew(u32 offset, u16 value);
-extern inline void musb_writeb(u32 offset, u8 value);
-extern inline u16 musb_readw(u32 offset);
-extern inline u8 musb_readb(u32 offset);
-
 #endif /* __MUSB_HDRC_DEFS_H__ */
index 352a0d4..19d978b 100644 (file)
@@ -111,6 +111,7 @@ static int wait_until_ep0_ready(struct usb_device *dev, u32 bit_mask)
 {
        u16 csr;
        int result = 1;
+       int timeout = CONFIG_MUSB_TIMEOUT;
 
        while (result > 0) {
                csr = readw(&musbr->txcsr);
@@ -152,7 +153,17 @@ static int wait_until_ep0_ready(struct usb_device *dev, u32 bit_mask)
                        }
                        break;
                }
+
+               /* Check the timeout */
+               if (--timeout)
+                       udelay(1);
+               else {
+                       dev->status = USB_ST_CRC_ERR;
+                       result = -1;
+                       break;
+               }
        }
+
        return result;
 }
 
@@ -162,6 +173,7 @@ static int wait_until_ep0_ready(struct usb_device *dev, u32 bit_mask)
 static u8 wait_until_txep_ready(struct usb_device *dev, u8 ep)
 {
        u16 csr;
+       int timeout = CONFIG_MUSB_TIMEOUT;
 
        do {
                if (check_stall(ep, 1)) {
@@ -174,6 +186,15 @@ static u8 wait_until_txep_ready(struct usb_device *dev, u8 ep)
                        dev->status = USB_ST_CRC_ERR;
                        return 0;
                }
+
+               /* Check the timeout */
+               if (--timeout)
+                       udelay(1);
+               else {
+                       dev->status = USB_ST_CRC_ERR;
+                       return -1;
+               }
+
        } while (csr & MUSB_TXCSR_TXPKTRDY);
        return 1;
 }
@@ -184,6 +205,7 @@ static u8 wait_until_txep_ready(struct usb_device *dev, u8 ep)
 static u8 wait_until_rxep_ready(struct usb_device *dev, u8 ep)
 {
        u16 csr;
+       int timeout = CONFIG_MUSB_TIMEOUT;
 
        do {
                if (check_stall(ep, 0)) {
@@ -196,6 +218,15 @@ static u8 wait_until_rxep_ready(struct usb_device *dev, u8 ep)
                        dev->status = USB_ST_CRC_ERR;
                        return 0;
                }
+
+               /* Check the timeout */
+               if (--timeout)
+                       udelay(1);
+               else {
+                       dev->status = USB_ST_CRC_ERR;
+                       return -1;
+               }
+
        } while (!(csr & MUSB_RXCSR_RXPKTRDY));
        return 1;
 }
index bb83311..b7f571d 100644 (file)
 extern unsigned char new[];
 #endif
 
+#ifndef CONFIG_MUSB_TIMEOUT
+# define CONFIG_MUSB_TIMEOUT 100000
+#endif
+
 /* This defines the endpoint number used for control transfers */
 #define MUSB_CONTROL_EP 0
 
index a82955c..9fe94c7 100644 (file)
@@ -89,6 +89,7 @@
 #define                        AT91SAM9_PMC_MDIV_1             (0 << 8)        /* [SAM9,CAP9 only] */
 #define                        AT91SAM9_PMC_MDIV_2             (1 << 8)
 #define                        AT91SAM9_PMC_MDIV_4             (2 << 8)
+#define                        AT91SAM9_PMC_MDIV_3             (3 << 8)        /* [some SAM9 only] */
 #define                        AT91SAM9_PMC_MDIV_6             (3 << 8)
 #define                AT91_PMC_PDIV           (1 << 12)               /* Processor Clock Division [some SAM9 only] */
 #define                        AT91_PMC_PDIV_1                 (0 << 12)
index 913f374..6d97189 100644 (file)
@@ -21,6 +21,8 @@
 #include <asm/arch/at91sam9rl_matrix.h>
 #elif defined(CONFIG_AT91CAP9)
 #include <asm/arch/at91cap9_matrix.h>
+#elif defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
+#include <asm/arch/at91sam9g45_matrix.h>
 #else
 #error "Unsupported AT91SAM9/CAP9 processor"
 #endif
diff --git a/include/asm-arm/arch-at91/at91sam9g45.h b/include/asm-arm/arch-at91/at91sam9g45.h
new file mode 100644 (file)
index 0000000..0feed9c
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ * Chip-specific header file for the AT91SAM9M1x family
+ *
+ *  Copyright (C) 2008 Atmel Corporation.
+ *
+ * Common definitions.
+ * Based on AT91SAM9G45 preliminary datasheet.
+ *
+ * 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.
+ */
+
+#ifndef AT91SAM9G45_H
+#define AT91SAM9G45_H
+
+/*
+ * Peripheral identifiers/interrupts.
+ */
+#define AT91_ID_FIQ            0       /* Advanced Interrupt Controller (FIQ) */
+#define AT91_ID_SYS            1       /* System Controller Interrupt */
+#define AT91SAM9G45_ID_PIOA    2       /* Parallel I/O Controller A */
+#define AT91SAM9G45_ID_PIOB    3       /* Parallel I/O Controller B */
+#define AT91SAM9G45_ID_PIOC    4       /* Parallel I/O Controller C */
+#define AT91SAM9G45_ID_PIODE   5       /* Parallel I/O Controller D and E */
+#define AT91SAM9G45_ID_TRNG    6       /* True Random Number Generator */
+#define AT91SAM9G45_ID_US0     7       /* USART 0 */
+#define AT91SAM9G45_ID_US1     8       /* USART 1 */
+#define AT91SAM9G45_ID_US2     9       /* USART 2 */
+#define AT91SAM9G45_ID_US3     10      /* USART 3 */
+#define AT91SAM9G45_ID_MCI0    11      /* High Speed Multimedia Card Interface 0 */
+#define AT91SAM9G45_ID_TWI0    12      /* Two-Wire Interface 0 */
+#define AT91SAM9G45_ID_TWI1    13      /* Two-Wire Interface 1 */
+#define AT91SAM9G45_ID_SPI0    14      /* Serial Peripheral Interface 0 */
+#define AT91SAM9G45_ID_SPI1    15      /* Serial Peripheral Interface 1 */
+#define AT91SAM9G45_ID_SSC0    16      /* Synchronous Serial Controller 0 */
+#define AT91SAM9G45_ID_SSC1    17      /* Synchronous Serial Controller 1 */
+#define AT91SAM9G45_ID_TCB     18      /* Timer Counter 0, 1, 2, 3, 4 and 5 */
+#define AT91SAM9G45_ID_PWMC    19      /* Pulse Width Modulation Controller */
+#define AT91SAM9G45_ID_TSC     20      /* Touch Screen ADC Controller */
+#define AT91SAM9G45_ID_DMA     21      /* DMA Controller */
+#define AT91SAM9G45_ID_UHPHS   22      /* USB Host High Speed */
+#define AT91SAM9G45_ID_LCDC    23      /* LCD Controller */
+#define AT91SAM9G45_ID_AC97C   24      /* AC97 Controller */
+#define AT91SAM9G45_ID_EMAC    25      /* Ethernet MAC */
+#define AT91SAM9G45_ID_ISI     26      /* Image Sensor Interface */
+#define AT91SAM9G45_ID_UDPHS   27      /* USB Device High Speed */
+#define AT91SAM9G45_ID_AESTDESSHA 28   /* AES + T-DES + SHA */
+#define AT91SAM9G45_ID_MCI1    29      /* High Speed Multimedia Card Interface 1 */
+#define AT91SAM9G45_ID_VDEC    30      /* Video Decoder */
+#define AT91SAM9G45_ID_IRQ0    31      /* Advanced Interrupt Controller */
+
+/*
+ * User Peripheral physical base addresses.
+ */
+#define AT91SAM9G45_BASE_UDPHS         0xfff78000
+#define AT91SAM9G45_BASE_TC0           0xfff7c000
+#define AT91SAM9G45_BASE_TC1           0xfff7c040
+#define AT91SAM9G45_BASE_TC2           0xfff7c080
+#define AT91SAM9G45_BASE_MCI0          0xfff80000
+#define AT91SAM9G45_BASE_TWI0          0xfff84000
+#define AT91SAM9G45_BASE_TWI1          0xfff88000
+#define AT91SAM9G45_BASE_US0           0xfff8c000
+#define AT91SAM9G45_BASE_US1           0xfff90000
+#define AT91SAM9G45_BASE_US2           0xfff94000
+#define AT91SAM9G45_BASE_US3           0xfff98000
+#define AT91SAM9G45_BASE_SSC0          0xfff9c000
+#define AT91SAM9G45_BASE_SSC1          0xfffa0000
+#define AT91SAM9G45_BASE_SPI0          0xfffa4000
+#define AT91SAM9G45_BASE_SPI1          0xfffa8000
+#define AT91SAM9G45_BASE_AC97C         0xfffac000
+#define AT91SAM9G45_BASE_TSC           0xfffb0000
+#define AT91SAM9G45_BASE_ISI           0xfffb4000
+#define AT91SAM9G45_BASE_PWMC          0xfffb8000
+#define AT91SAM9G45_BASE_EMAC          0xfffbc000
+#define AT91SAM9G45_BASE_AES           0xfffc0000
+#define AT91SAM9G45_BASE_TDES          0xfffc4000
+#define AT91SAM9G45_BASE_SHA           0xfffc8000
+#define AT91SAM9G45_BASE_TRNG          0xfffcc000
+#define AT91SAM9G45_BASE_MCI1          0xfffd0000
+#define AT91SAM9G45_BASE_TC3           0xfffd4000
+#define AT91SAM9G45_BASE_TC4           0xfffd4040
+#define AT91SAM9G45_BASE_TC5           0xfffd4080
+#define AT91_BASE_SYS                  0xffffe200
+
+/*
+ * System Peripherals (offset from AT91_BASE_SYS)
+ */
+#define AT91_ECC       (0xffffe200 - AT91_BASE_SYS)
+#define AT91_DDRSDRC1  (0xffffe400 - AT91_BASE_SYS)
+#define AT91_DDRSDRC0  (0xffffe600 - AT91_BASE_SYS)
+#define AT91_SMC       (0xffffe800 - AT91_BASE_SYS)
+#define AT91_MATRIX    (0xffffea00 - AT91_BASE_SYS)
+#define AT91_DMA       (0xffffec00 - AT91_BASE_SYS)
+#define AT91_DBGU      (0xffffee00 - AT91_BASE_SYS)
+#define AT91_AIC       (0xfffff000 - AT91_BASE_SYS)
+#define AT91_PIOA      (0xfffff200 - AT91_BASE_SYS)
+#define AT91_PIOB      (0xfffff400 - AT91_BASE_SYS)
+#define AT91_PIOC      (0xfffff600 - AT91_BASE_SYS)
+#define AT91_PIOD      (0xfffff800 - AT91_BASE_SYS)
+#define AT91_PIOE      (0xfffffa00 - AT91_BASE_SYS)
+#define AT91_PMC       (0xfffffc00 - AT91_BASE_SYS)
+#define AT91_RSTC      (0xfffffd00 - AT91_BASE_SYS)
+#define AT91_SHDWC     (0xfffffd10 - AT91_BASE_SYS)
+#define AT91_RTT       (0xfffffd20 - AT91_BASE_SYS)
+#define AT91_PIT       (0xfffffd30 - AT91_BASE_SYS)
+#define AT91_WDT       (0xfffffd40 - AT91_BASE_SYS)
+#define AT91_GPBR      (0xfffffd60 - AT91_BASE_SYS)
+#define AT91_RTC       (0xfffffdb0 - AT91_BASE_SYS)
+
+#define AT91_USART0    AT91SAM9G45_BASE_US0
+#define AT91_USART1    AT91SAM9G45_BASE_US1
+#define AT91_USART2    AT91SAM9G45_BASE_US2
+#define AT91_USART3    AT91SAM9G45_BASE_US3
+
+/*
+ * Internal Memory.
+ */
+#define AT91SAM9G45_SRAM_BASE  0x00300000      /* Internal SRAM base address */
+#define AT91SAM9G45_SRAM_SIZE  SZ_64K          /* Internal SRAM size (64Kb) */
+
+#define AT91SAM9G45_ROM_BASE   0x00400000      /* Internal ROM base address */
+#define AT91SAM9G45_ROM_SIZE   SZ_64K          /* Internal ROM size (64Kb) */
+
+#define AT91SAM9G45_LCDC_BASE  0x00500000      /* LCD Controller */
+#define AT91SAM9G45_UDPHS_FIFO 0x00600000      /* USB Device HS controller */
+#define AT91SAM9G45_HCI_BASE   0x00700000      /* USB Host controller (OHCI) */
+#define AT91SAM9G45_EHCI_BASE  0x00800000      /* USB Host controller (EHCI) */
+#define AT91SAM9G45_VDEC_BASE  0x00900000      /* Video Decoder Controller */
+
+#define CONFIG_DRAM_BASE       AT91_CHIPSELECT_6
+
+/*
+ * Cpu Name
+ */
+#define AT91_CPU_NAME  "AT91SAM9G45"
+
+#endif
diff --git a/include/asm-arm/arch-at91/at91sam9g45_matrix.h b/include/asm-arm/arch-at91/at91sam9g45_matrix.h
new file mode 100644 (file)
index 0000000..1620e1b
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * Matrix-centric header file for the AT91SAM9M1x family
+ *
+ *  Copyright (C) 2008 Atmel Corporation.
+ *
+ * Memory Controllers (MATRIX, EBI) - System peripherals registers.
+ * Based on AT91SAM9G45 preliminary datasheet.
+ *
+ * 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.
+ */
+
+#ifndef AT91SAM9G45_MATRIX_H
+#define AT91SAM9G45_MATRIX_H
+
+#define AT91_MATRIX_MCFG0      (AT91_MATRIX + 0x00)    /* Master Configuration Register 0 */
+#define AT91_MATRIX_MCFG1      (AT91_MATRIX + 0x04)    /* Master Configuration Register 1 */
+#define AT91_MATRIX_MCFG2      (AT91_MATRIX + 0x08)    /* Master Configuration Register 2 */
+#define AT91_MATRIX_MCFG3      (AT91_MATRIX + 0x0C)    /* Master Configuration Register 3 */
+#define AT91_MATRIX_MCFG4      (AT91_MATRIX + 0x10)    /* Master Configuration Register 4 */
+#define AT91_MATRIX_MCFG5      (AT91_MATRIX + 0x14)    /* Master Configuration Register 5 */
+#define AT91_MATRIX_MCFG6      (AT91_MATRIX + 0x18)    /* Master Configuration Register 6 */
+#define AT91_MATRIX_MCFG7      (AT91_MATRIX + 0x1C)    /* Master Configuration Register 7 */
+#define AT91_MATRIX_MCFG8      (AT91_MATRIX + 0x20)    /* Master Configuration Register 8 */
+#define AT91_MATRIX_MCFG9      (AT91_MATRIX + 0x24)    /* Master Configuration Register 9 */
+#define AT91_MATRIX_MCFG10     (AT91_MATRIX + 0x28)    /* Master Configuration Register 10 */
+#define AT91_MATRIX_MCFG11     (AT91_MATRIX + 0x2C)    /* Master Configuration Register 11 */
+#define                AT91_MATRIX_ULBT        (7 << 0)        /* Undefined Length Burst Type */
+#define                        AT91_MATRIX_ULBT_INFINITE       (0 << 0)
+#define                        AT91_MATRIX_ULBT_SINGLE         (1 << 0)
+#define                        AT91_MATRIX_ULBT_FOUR           (2 << 0)
+#define                        AT91_MATRIX_ULBT_EIGHT          (3 << 0)
+#define                        AT91_MATRIX_ULBT_SIXTEEN        (4 << 0)
+#define                        AT91_MATRIX_ULBT_THIRTYTWO      (5 << 0)
+#define                        AT91_MATRIX_ULBT_SIXTYFOUR      (6 << 0)
+#define                        AT91_MATRIX_ULBT_128            (7 << 0)
+
+#define AT91_MATRIX_SCFG0      (AT91_MATRIX + 0x40)    /* Slave Configuration Register 0 */
+#define AT91_MATRIX_SCFG1      (AT91_MATRIX + 0x44)    /* Slave Configuration Register 1 */
+#define AT91_MATRIX_SCFG2      (AT91_MATRIX + 0x48)    /* Slave Configuration Register 2 */
+#define AT91_MATRIX_SCFG3      (AT91_MATRIX + 0x4C)    /* Slave Configuration Register 3 */
+#define AT91_MATRIX_SCFG4      (AT91_MATRIX + 0x50)    /* Slave Configuration Register 4 */
+#define AT91_MATRIX_SCFG5      (AT91_MATRIX + 0x54)    /* Slave Configuration Register 5 */
+#define AT91_MATRIX_SCFG6      (AT91_MATRIX + 0x58)    /* Slave Configuration Register 6 */
+#define AT91_MATRIX_SCFG7      (AT91_MATRIX + 0x5C)    /* Slave Configuration Register 7 */
+#define                AT91_MATRIX_SLOT_CYCLE          (0x1ff << 0)    /* Maximum Number of Allowed Cycles for a Burst */
+#define                AT91_MATRIX_DEFMSTR_TYPE        (3    << 16)    /* Default Master Type */
+#define                        AT91_MATRIX_DEFMSTR_TYPE_NONE   (0 << 16)
+#define                        AT91_MATRIX_DEFMSTR_TYPE_LAST   (1 << 16)
+#define                        AT91_MATRIX_DEFMSTR_TYPE_FIXED  (2 << 16)
+#define                AT91_MATRIX_FIXED_DEFMSTR       (0xf  << 18)    /* Fixed Index of Default Master */
+
+#define AT91_MATRIX_PRAS0      (AT91_MATRIX + 0x80)    /* Priority Register A for Slave 0 */
+#define AT91_MATRIX_PRBS0      (AT91_MATRIX + 0x84)    /* Priority Register B for Slave 0 */
+#define AT91_MATRIX_PRAS1      (AT91_MATRIX + 0x88)    /* Priority Register A for Slave 1 */
+#define AT91_MATRIX_PRBS1      (AT91_MATRIX + 0x8C)    /* Priority Register B for Slave 1 */
+#define AT91_MATRIX_PRAS2      (AT91_MATRIX + 0x90)    /* Priority Register A for Slave 2 */
+#define AT91_MATRIX_PRBS2      (AT91_MATRIX + 0x94)    /* Priority Register B for Slave 2 */
+#define AT91_MATRIX_PRAS3      (AT91_MATRIX + 0x98)    /* Priority Register A for Slave 3 */
+#define AT91_MATRIX_PRBS3      (AT91_MATRIX + 0x9C)    /* Priority Register B for Slave 3 */
+#define AT91_MATRIX_PRAS4      (AT91_MATRIX + 0xA0)    /* Priority Register A for Slave 4 */
+#define AT91_MATRIX_PRBS4      (AT91_MATRIX + 0xA4)    /* Priority Register B for Slave 4 */
+#define AT91_MATRIX_PRAS5      (AT91_MATRIX + 0xA8)    /* Priority Register A for Slave 5 */
+#define AT91_MATRIX_PRBS5      (AT91_MATRIX + 0xAC)    /* Priority Register B for Slave 5 */
+#define AT91_MATRIX_PRAS6      (AT91_MATRIX + 0xB0)    /* Priority Register A for Slave 6 */
+#define AT91_MATRIX_PRBS6      (AT91_MATRIX + 0xB4)    /* Priority Register B for Slave 6 */
+#define AT91_MATRIX_PRAS7      (AT91_MATRIX + 0xB8)    /* Priority Register A for Slave 7 */
+#define AT91_MATRIX_PRBS7      (AT91_MATRIX + 0xBC)    /* Priority Register B for Slave 7 */
+#define                AT91_MATRIX_M0PR                (3 << 0)        /* Master 0 Priority */
+#define                AT91_MATRIX_M1PR                (3 << 4)        /* Master 1 Priority */
+#define                AT91_MATRIX_M2PR                (3 << 8)        /* Master 2 Priority */
+#define                AT91_MATRIX_M3PR                (3 << 12)       /* Master 3 Priority */
+#define                AT91_MATRIX_M4PR                (3 << 16)       /* Master 4 Priority */
+#define                AT91_MATRIX_M5PR                (3 << 20)       /* Master 5 Priority */
+#define                AT91_MATRIX_M6PR                (3 << 24)       /* Master 6 Priority */
+#define                AT91_MATRIX_M7PR                (3 << 28)       /* Master 7 Priority */
+#define                AT91_MATRIX_M8PR                (3 << 0)        /* Master 8 Priority (in Register B) */
+#define                AT91_MATRIX_M9PR                (3 << 4)        /* Master 9 Priority (in Register B) */
+#define                AT91_MATRIX_M10PR               (3 << 8)        /* Master 10 Priority (in Register B) */
+#define                AT91_MATRIX_M11PR               (3 << 12)       /* Master 11 Priority (in Register B) */
+
+#define AT91_MATRIX_MRCR       (AT91_MATRIX + 0x100)   /* Master Remap Control Register */
+#define                AT91_MATRIX_RCB0                (1 << 0)        /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
+#define                AT91_MATRIX_RCB1                (1 << 1)        /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
+#define                AT91_MATRIX_RCB2                (1 << 2)
+#define                AT91_MATRIX_RCB3                (1 << 3)
+#define                AT91_MATRIX_RCB4                (1 << 4)
+#define                AT91_MATRIX_RCB5                (1 << 5)
+#define                AT91_MATRIX_RCB6                (1 << 6)
+#define                AT91_MATRIX_RCB7                (1 << 7)
+#define                AT91_MATRIX_RCB8                (1 << 8)
+#define                AT91_MATRIX_RCB9                (1 << 9)
+#define                AT91_MATRIX_RCB10               (1 << 10)
+#define                AT91_MATRIX_RCB11               (1 << 11)
+
+#define AT91_MATRIX_TCMR       (AT91_MATRIX + 0x110)   /* TCM Configuration Register */
+#define                AT91_MATRIX_ITCM_SIZE           (0xf << 0)      /* Size of ITCM enabled memory block */
+#define                        AT91_MATRIX_ITCM_0              (0 << 0)
+#define                        AT91_MATRIX_ITCM_32             (6 << 0)
+#define                AT91_MATRIX_DTCM_SIZE           (0xf << 4)      /* Size of DTCM enabled memory block */
+#define                        AT91_MATRIX_DTCM_0              (0 << 4)
+#define                        AT91_MATRIX_DTCM_32             (6 << 4)
+#define                        AT91_MATRIX_DTCM_64             (7 << 4)
+#define                AT91_MATRIX_TCM_NWS             (0x1 << 11)     /* Wait state TCM register */
+#define                        AT91_MATRIX_TCM_NO_WS           (0x0 << 11)
+#define                        AT91_MATRIX_TCM_ONE_WS          (0x1 << 11)
+
+#define AT91_MATRIX_VIDEO      (AT91_MATRIX + 0x118)   /* Video Mode Configuration Register */
+#define                AT91C_VDEC_SEL                  (0x1 <<  0) /* Video Mode Selection */
+#define                        AT91C_VDEC_SEL_OFF              (0 << 0)
+#define                        AT91C_VDEC_SEL_ON               (1 << 0)
+
+#define AT91_MATRIX_EBICSA     (AT91_MATRIX + 0x128)   /* EBI Chip Select Assignment Register */
+#define                AT91_MATRIX_EBI_CS1A            (1 << 1)        /* Chip Select 1 Assignment */
+#define                        AT91_MATRIX_EBI_CS1A_SMC                (0 << 1)
+#define                        AT91_MATRIX_EBI_CS1A_SDRAMC             (1 << 1)
+#define                AT91_MATRIX_EBI_CS3A            (1 << 3)        /* Chip Select 3 Assignment */
+#define                        AT91_MATRIX_EBI_CS3A_SMC                (0 << 3)
+#define                        AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA     (1 << 3)
+#define                AT91_MATRIX_EBI_CS4A            (1 << 4)        /* Chip Select 4 Assignment */
+#define                        AT91_MATRIX_EBI_CS4A_SMC                (0 << 4)
+#define                        AT91_MATRIX_EBI_CS4A_SMC_CF0            (1 << 4)
+#define                AT91_MATRIX_EBI_CS5A            (1 << 5)        /* Chip Select 5 Assignment */
+#define                        AT91_MATRIX_EBI_CS5A_SMC                (0 << 5)
+#define                        AT91_MATRIX_EBI_CS5A_SMC_CF1            (1 << 5)
+#define                AT91_MATRIX_EBI_DBPUC           (1 << 8)        /* Data Bus Pull-up Configuration */
+#define                        AT91_MATRIX_EBI_DBPU_ON                 (0 << 8)
+#define                        AT91_MATRIX_EBI_DBPU_OFF                (1 << 8)
+#define                AT91_MATRIX_EBI_VDDIOMSEL       (1 << 16)       /* Memory voltage selection */
+#define                        AT91_MATRIX_EBI_VDDIOMSEL_1_8V          (0 << 16)
+#define                        AT91_MATRIX_EBI_VDDIOMSEL_3_3V          (1 << 16)
+#define                AT91_MATRIX_EBI_EBI_IOSR        (1 << 17)       /* EBI I/O slew rate selection */
+#define                        AT91_MATRIX_EBI_EBI_IOSR_REDUCED        (0 << 17)
+#define                        AT91_MATRIX_EBI_EBI_IOSR_NORMAL         (1 << 17)
+#define                AT91_MATRIX_EBI_DDR_IOSR        (1 << 18)       /* DDR2 dedicated port I/O slew rate selection */
+#define                        AT91_MATRIX_EBI_DDR_IOSR_REDUCED        (0 << 18)
+#define                        AT91_MATRIX_EBI_DDR_IOSR_NORMAL         (1 << 18)
+
+#define AT91_MATRIX_WPMR       (AT91_MATRIX + 0x1E4)   /* Write Protect Mode Register */
+#define                AT91_MATRIX_WPMR_WPEN           (1 << 0)        /* Write Protect ENable */
+#define                        AT91_MATRIX_WPMR_WP_WPDIS               (0 << 0)
+#define                        AT91_MATRIX_WPMR_WP_WPEN                (1 << 0)
+#define                AT91_MATRIX_WPMR_WPKEY          (0xFFFFFF << 8) /* Write Protect KEY */
+
+#define AT91_MATRIX_WPSR       (AT91_MATRIX + 0x1E8)   /* Write Protect Status Register */
+#define                AT91_MATRIX_WPSR_WPVS           (1 << 0)        /* Write Protect Violation Status */
+#define                        AT91_MATRIX_WPSR_NO_WPV         (0 << 0)
+#define                        AT91_MATRIX_WPSR_WPV            (1 << 0)
+#define                AT91_MATRIX_WPSR_WPVSRC         (0xFFFF << 8)   /* Write Protect Violation Source */
+
+#endif
index 6aaf82e..f642dd9 100644 (file)
@@ -49,6 +49,11 @@ static inline unsigned long get_lcdc_clk_rate(unsigned int dev_id)
        return get_mck_clk_rate();
 }
 
+static inline unsigned long get_spi_clk_rate(unsigned int dev_id)
+{
+       return get_mck_clk_rate();
+}
+
 static inline unsigned long get_twi_clk_rate(unsigned int dev_id)
 {
        return get_mck_clk_rate();
index 8704106..de06a10 100644 (file)
@@ -23,7 +23,7 @@
 #define AT91_BASE_SPI  AT91SAM9260_BASE_SPI0
 #define AT91_ID_UHP    AT91SAM9260_ID_UHP
 #define AT91_PMC_UHP   AT91SAM926x_PMC_UHP
-#elif defined(CONFIG_AT91SAM9261)
+#elif defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9G10)
 #include <asm/arch/at91sam9261.h>
 #define AT91_BASE_SPI  AT91SAM9261_BASE_SPI0
 #define AT91_ID_UHP    AT91SAM9261_ID_UHP
 #include <asm/arch/at91sam9rl.h>
 #define AT91_BASE_SPI  AT91SAM9RL_BASE_SPI
 #define AT91_ID_UHP    AT91SAM9RL_ID_UHP
+#elif defined(CONFIG_AT91SAM9G45) || defined(CONFIG_AT91SAM9M10G45)
+#include <asm/arch/at91sam9g45.h>
+#define AT91_BASE_EMAC  AT91SAM9G45_BASE_EMAC
+#define AT91_BASE_SPI   AT91SAM9G45_BASE_SPI0
+#define AT91_ID_UHP     AT91SAM9G45_ID_UHPHS
+#define AT91_PMC_UHP    AT91SAM926x_PMC_UHP
 #elif defined(CONFIG_AT91CAP9)
 #include <asm/arch/at91cap9.h>
 #define AT91_BASE_SPI  AT91CAP9_BASE_SPI0
index 8015dad..f605f37 100644 (file)
@@ -30,5 +30,6 @@
 #define USART1_BASE AT91_USART1
 #define USART2_BASE AT91_USART2
 #define USART3_BASE (AT91_BASE_SYS + AT91_DBGU)
+#define SPI0_BASE      AT91_BASE_SPI
 
 #endif /* __ASM_ARM_ARCH_MEMORYMAP_H__ */
index 187d3c3..386540e 100644 (file)
 
 #include <asm/arch/hardware.h>
 
+#ifdef CONFIG_SOC_DM646x
+#define        MASK_CLE        0x80000
+#define        MASK_ALE        0x40000
+#else
 #define        MASK_CLE        0x10
-#define        MASK_ALE        0x0a
-
-#define NAND_CE0CLE    ((volatile u_int8_t *)(CONFIG_SYS_NAND_BASE + 0x10))
-#define NAND_CE0ALE    ((volatile u_int8_t *)(CONFIG_SYS_NAND_BASE + 0x0a))
-#define NAND_CE0DATA   ((volatile u_int8_t *)CONFIG_SYS_NAND_BASE)
-
-typedef struct  {
-       u_int32_t       NRCSR;
-       u_int32_t       AWCCR;
-       u_int8_t        RSVD0[8];
-       u_int32_t       AB1CR;
-       u_int32_t       AB2CR;
-       u_int32_t       AB3CR;
-       u_int32_t       AB4CR;
-       u_int8_t        RSVD1[32];
-       u_int32_t       NIRR;
-       u_int32_t       NIMR;
-       u_int32_t       NIMSR;
-       u_int32_t       NIMCR;
-       u_int8_t        RSVD2[16];
-       u_int32_t       NANDFCR;
-       u_int32_t       NANDFSR;
-       u_int8_t        RSVD3[8];
-       u_int32_t       NANDF1ECC;
-       u_int32_t       NANDF2ECC;
-       u_int32_t       NANDF3ECC;
-       u_int32_t       NANDF4ECC;
-       u_int8_t        RSVD4[4];
-       u_int32_t       IODFTECR;
-       u_int32_t       IODFTGCR;
-       u_int8_t        RSVD5[4];
-       u_int32_t       IODFTMRLR;
-       u_int32_t       IODFTMRMR;
-       u_int32_t       IODFTMRMSBR;
-       u_int8_t        RSVD6[20];
-       u_int32_t       MODRNR;
-       u_int8_t        RSVD7[76];
-       u_int32_t       CE0DATA;
-       u_int32_t       CE0ALE;
-       u_int32_t       CE0CLE;
-       u_int8_t        RSVD8[4];
-       u_int32_t       CE1DATA;
-       u_int32_t       CE1ALE;
-       u_int32_t       CE1CLE;
-       u_int8_t        RSVD9[4];
-       u_int32_t       CE2DATA;
-       u_int32_t       CE2ALE;
-       u_int32_t       CE2CLE;
-       u_int8_t        RSVD10[4];
-       u_int32_t       CE3DATA;
-       u_int32_t       CE3ALE;
-       u_int32_t       CE3CLE;
-} nand_registers;
-
-typedef volatile nand_registers        *nandregs;
+#define        MASK_ALE        0x08
+#endif
 
 #define NAND_READ_START                0x00
 #define NAND_READ_END          0x30
 #define NAND_STATUS            0x70
 
-#ifdef CONFIG_SYS_NAND_HW_ECC
-#define NAND_Ecc_P1e           (1 << 0)
-#define NAND_Ecc_P2e           (1 << 1)
-#define NAND_Ecc_P4e           (1 << 2)
-#define NAND_Ecc_P8e           (1 << 3)
-#define NAND_Ecc_P16e          (1 << 4)
-#define NAND_Ecc_P32e          (1 << 5)
-#define NAND_Ecc_P64e          (1 << 6)
-#define NAND_Ecc_P128e         (1 << 7)
-#define NAND_Ecc_P256e         (1 << 8)
-#define NAND_Ecc_P512e         (1 << 9)
-#define NAND_Ecc_P1024e                (1 << 10)
-#define NAND_Ecc_P2048e                (1 << 11)
-
-#define NAND_Ecc_P1o           (1 << 16)
-#define NAND_Ecc_P2o           (1 << 17)
-#define NAND_Ecc_P4o           (1 << 18)
-#define NAND_Ecc_P8o           (1 << 19)
-#define NAND_Ecc_P16o          (1 << 20)
-#define NAND_Ecc_P32o          (1 << 21)
-#define NAND_Ecc_P64o          (1 << 22)
-#define NAND_Ecc_P128o         (1 << 23)
-#define NAND_Ecc_P256o         (1 << 24)
-#define NAND_Ecc_P512o         (1 << 25)
-#define NAND_Ecc_P1024o                (1 << 26)
-#define NAND_Ecc_P2048o                (1 << 27)
-
-#define TF(v)                  (v ? 1 : 0)
-
-#define P2048e(a)              (TF(a & NAND_Ecc_P2048e) << 0)
-#define P2048o(a)              (TF(a & NAND_Ecc_P2048o) << 1)
-#define P1e(a)                 (TF(a & NAND_Ecc_P1e) << 2)
-#define P1o(a)                 (TF(a & NAND_Ecc_P1o) << 3)
-#define P2e(a)                 (TF(a & NAND_Ecc_P2e) << 4)
-#define P2o(a)                 (TF(a & NAND_Ecc_P2o) << 5)
-#define P4e(a)                 (TF(a & NAND_Ecc_P4e) << 6)
-#define P4o(a)                 (TF(a & NAND_Ecc_P4o) << 7)
-
-#define P8e(a)                 (TF(a & NAND_Ecc_P8e) << 0)
-#define P8o(a)                 (TF(a & NAND_Ecc_P8o) << 1)
-#define P16e(a)                        (TF(a & NAND_Ecc_P16e) << 2)
-#define P16o(a)                        (TF(a & NAND_Ecc_P16o) << 3)
-#define P32e(a)                        (TF(a & NAND_Ecc_P32e) << 4)
-#define P32o(a)                        (TF(a & NAND_Ecc_P32o) << 5)
-#define P64e(a)                        (TF(a & NAND_Ecc_P64e) << 6)
-#define P64o(a)                        (TF(a & NAND_Ecc_P64o) << 7)
-
-#define P128e(a)               (TF(a & NAND_Ecc_P128e) << 0)
-#define P128o(a)               (TF(a & NAND_Ecc_P128o) << 1)
-#define P256e(a)               (TF(a & NAND_Ecc_P256e) << 2)
-#define P256o(a)               (TF(a & NAND_Ecc_P256o) << 3)
-#define P512e(a)               (TF(a & NAND_Ecc_P512e) << 4)
-#define P512o(a)               (TF(a & NAND_Ecc_P512o) << 5)
-#define P1024e(a)              (TF(a & NAND_Ecc_P1024e) << 6)
-#define P1024o(a)              (TF(a & NAND_Ecc_P1024o) << 7)
-
-#define P8e_s(a)               (TF(a & NAND_Ecc_P8e) << 0)
-#define P8o_s(a)               (TF(a & NAND_Ecc_P8o) << 1)
-#define P16e_s(a)              (TF(a & NAND_Ecc_P16e) << 2)
-#define P16o_s(a)              (TF(a & NAND_Ecc_P16o) << 3)
-#define P1e_s(a)               (TF(a & NAND_Ecc_P1e) << 4)
-#define P1o_s(a)               (TF(a & NAND_Ecc_P1o) << 5)
-#define P2e_s(a)               (TF(a & NAND_Ecc_P2e) << 6)
-#define P2o_s(a)               (TF(a & NAND_Ecc_P2o) << 7)
-
-#define P4e_s(a)               (TF(a & NAND_Ecc_P4e) << 0)
-#define P4o_s(a)               (TF(a & NAND_Ecc_P4o) << 1)
-#endif
+extern void davinci_nand_init(struct nand_chip *nand);
 
 #endif
index 52dafc2..47679dd 100644 (file)
@@ -45,7 +45,7 @@
 #define KW_REG_UNDOC_0x1478            (KW_REGISTER(0x1478))
 
 #define KW_UART0_BASE                  (KW_REGISTER(0x12000))
-#define KW_UART1_BASE                  (KW_REGISTER(0x13000))
+#define KW_UART1_BASE                  (KW_REGISTER(0x12100))
 #define KW_MPP_BASE                    (KW_REGISTER(0x10000))
 #define KW_GPIO0_BASE                  (KW_REGISTER(0x10100))
 #define KW_GPIO1_BASE                  (KW_REGISTER(0x10140))
index 5a0885a..2a723dc 100644 (file)
@@ -1952,12 +1952,13 @@ typedef void            (*ExcpHndlr) (void) ;
 #define CKENA_2_USBHOST        (1 << 2)        /* USB Host Unit Clock Enable */
 #define CKENA_1_LCD    (1 << 1)        /* LCD Unit Clock Enable */
 
-#define CKENB_8_1WIRE  ((1 << 8) + 32) /* One Wire Interface Unit Clock Enable */
-#define CKENB_7_GPIO   ((1 << 7) + 32) /* GPIO Clock Enable */
-#define CKENB_6_IRQ    ((1 << 6) + 32) /* Interrupt Controller Clock Enable */
-#define CKENB_4_I2C    ((1 << 4) + 32) /* I2C Unit Clock Enable */
-#define CKENB_1_PWM1   ((1 << 1) + 32) /* PWM2 & PWM3 Clock Enable */
-#define CKENB_0_PWM0   ((1 << 0) + 32) /* PWM0 & PWM1 Clock Enable */
+#define CKENB_9_SYSBUS2        (1 << 9)        /* System bus 2 */
+#define CKENB_8_1WIRE  (1 << 8)        /* One Wire Interface Unit Clock Enable */
+#define CKENB_7_GPIO   (1 << 7)        /* GPIO Clock Enable */
+#define CKENB_6_IRQ    (1 << 6)        /* Interrupt Controller Clock Enable */
+#define CKENB_4_I2C    (1 << 4)        /* I2C Unit Clock Enable */
+#define CKENB_1_PWM1   (1 << 1)        /* PWM2 & PWM3 Clock Enable */
+#define CKENB_0_PWM0   (1 << 0)        /* PWM0 & PWM1 Clock Enable */
 
 #else /* if defined CONFIG_CPU_MONAHANS */
 
index 3648a05..24e6c69 100644 (file)
@@ -185,10 +185,11 @@ typedef struct clk512x {
        u8 res0[4];
        u32 bcr;                /* Bread Crumb Register */
        u32 pscccr[12];         /* PSC0-11 Clock Control Registers */
-       u32 spccr;              /* SPDIF Clock Control Registers */
-       u32 cccr;               /* CFM Clock Control Registers */
-       u32 dccr;               /* DIU Clock Control Registers */
-       u8 res1[0xa8];
+       u32 spccr;              /* SPDIF Clock Control Register */
+       u32 cccr;               /* CFM Clock Control Register */
+       u32 dccr;               /* DIU Clock Control Register */
+       u32 msccr[4];           /* MSCAN1-4 Clock Control Registers */
+       u8 res1[0x98];
 } clk512x_t;
 
 /* SPMR - System PLL Mode Register */
diff --git a/include/asm-ppc/mpc512x.h b/include/asm-ppc/mpc512x.h
new file mode 100644 (file)
index 0000000..20456f5
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * include/asm-ppc/mpc512x.h
+ *
+ * Prototypes, etc. for the Freescale MPC512x embedded cpu chips
+ *
+ * 2009 (C) 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
+ */
+#ifndef __ASMPPC_MPC512X_H
+#define __ASMPPC_MPC512X_H
+
+/*
+ * macros for manipulating CSx_START/STOP
+ */
+#define CSAW_START(start)      ((start) & 0xFFFF0000)
+#define CSAW_STOP(start, size) (((start) + (size) - 1) >> 16)
+
+/*
+ * Inlines
+ */
+
+/*
+ * According to MPC5121e RM, configuring local access windows should
+ * be followed by a dummy read of the config register that was
+ * modified last and an isync.
+ */
+static inline void sync_law(volatile void *addr)
+{
+       in_be32(addr);
+       __asm__ __volatile__ ("isync");
+}
+
+/*
+ * Prototypes
+ */
+extern long int fixed_sdram(void);
+extern int mpc5121_diu_init(void);
+extern void ide_set_reset(int idereset);
+
+#endif /* __ASMPPC_MPC512X_H */
diff --git a/include/asm-sh/clk.h b/include/asm-sh/clk.h
new file mode 100644 (file)
index 0000000..9cac6b0
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2009 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.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 __ASM_SH_CLK_H__
+#define __ASM_SH_CLK_H__
+
+static inline unsigned long get_peripheral_clk_rate(void)
+{
+       return CONFIG_SYS_CLK_FREQ;
+}
+
+static inline unsigned long get_tmu0_clk_rate(void)
+{
+       return CONFIG_SYS_CLK_FREQ;
+}
+
+#endif /* __ASM_SH_CLK_H__ */
index 61f792a..2b273c3 100644 (file)
@@ -29,7 +29,7 @@
 
 .macro write16, addr, data
        mov.l \addr ,r1
-       mov.l \data ,r0
+       mov.w \data ,r0
        mov.w r0, @r1
 .endm
 
index 6284b8a..a6c7c07 100644 (file)
@@ -275,7 +275,8 @@ void        pci_init_board(void);
 void   pciinfo       (int, int);
 
 #if defined(CONFIG_PCI) && (defined(CONFIG_4xx) && !defined(CONFIG_AP1000))
-    int           pci_pre_init        (struct pci_controller * );
+    int           pci_pre_init        (struct pci_controller *);
+    int           is_pci_host         (struct pci_controller *);
 #endif
 
 #if defined(CONFIG_PCI) && (defined(CONFIG_440) || defined(CONFIG_405EX))
@@ -285,7 +286,6 @@ void        pciinfo       (int, int);
 #   if defined(CONFIG_SYS_PCI_MASTER_INIT)
        void    pci_master_init      (struct pci_controller *);
 #   endif
-    int            is_pci_host         (struct pci_controller *);
 #if defined(CONFIG_440SPE) || \
     defined(CONFIG_460EX) || defined(CONFIG_460GT) || \
     defined(CONFIG_405EX)
@@ -688,7 +688,7 @@ int pcmcia_init (void);
 /*
  * Board-specific Platform code can reimplement show_boot_progress () if needed
  */
-void __attribute__((weak)) show_boot_progress (int val);
+void show_boot_progress(int val);
 
 #ifdef CONFIG_INIT_CRITICAL
 #error CONFIG_INIT_CRITICAL is deprecated!
index f6777b9..251fe67 100644 (file)
 #define PCI_ENET1_MEMADDR      0x81000000
 
 #define CONFIG_RTL8139
-#define _IO_BASE           0x00000000
-/* This macro is used by RTL8139 but not defined in PPC architecture */
-#define KSEG1ADDR(x)       (x)
+
 /* Make sure the ethaddr can be overwritten
    TODO: Remove this on final product
 */
index 50b3a03..5e86e4c 100644 (file)
@@ -85,7 +85,6 @@
 #      define CONFIG_SYS_ATA_REG_OFFSET        0xA0    /* Offset for normal register accesses */
 #      define CONFIG_SYS_ATA_ALT_OFFSET        0xC0    /* Offset for alternate registers */
 #      define CONFIG_SYS_ATA_STRIDE            4       /* Interval between registers */
-#      define _IO_BASE                 0
 #endif
 
 #define CONFIG_NET_MULTI               1
index cf8b773..df6970c 100644 (file)
@@ -91,7 +91,6 @@
 #define CONFIG_SYS_ATA_REG_OFFSET      0xA0    /* Offset for normal register accesses */
 #define CONFIG_SYS_ATA_ALT_OFFSET      0xC0    /* Offset for alternate registers */
 #define CONFIG_SYS_ATA_STRIDE          4       /* Interval between registers */
-#define _IO_BASE               0
 
 #define CONFIG_SYS_PROMPT              "=> "
 #define CONFIG_SYS_LONGHELP            /* undef to save memory */
index 101dced..87f3a73 100644 (file)
 #define CONFIG_SYS_ATA_REG_OFFSET      0xA0    /* Offset for normal register accesses */
 #define CONFIG_SYS_ATA_ALT_OFFSET      0xC0    /* Offset for alternate registers           */
 #define CONFIG_SYS_ATA_STRIDE          4       /* Interval between registers                 */
-#define _IO_BASE               0
 
 /* Realtime clock */
 #define CONFIG_MCFRTC
index f2e574b..d4d3256 100644 (file)
@@ -360,16 +360,9 @@ boards, we say we have two, but don't display a message if we find only one. */
 #define CONFIG_SYS_PCI2_IO_SIZE        0x01000000      /* 16M */
 #endif
 
-#define _IO_BASE               0x00000000      /* points to PCI I/O space */
-
 #define CONFIG_NET_MULTI
 #define CONFIG_PCI_PNP                 /* do pci plug-and-play */
 
-#ifdef CONFIG_RTL8139
-/* This macro is used by RTL8139 but not defined in PPC architecture */
-#define KSEG1ADDR(x)       (x)
-#endif
-
 #ifndef CONFIG_PCI_PNP
     #define PCI_ENET0_IOADDR   0x00000000
     #define PCI_ENET0_MEMADDR  CONFIG_SYS_PCI2_MEM_BASE
index 9e00b89..7085d28 100644 (file)
@@ -427,12 +427,6 @@ extern unsigned long get_board_ddr_clk(unsigned long dummy);
 #undef CONFIG_TULIP
 #undef CONFIG_RTL8139
 
-#ifdef CONFIG_RTL8139
-/* This macro is used by RTL8139 but not defined in PPC architecture */
-#define KSEG1ADDR(x)           ({u32 _x=le32_to_cpu(*(u32 *)(x)); (&_x);})
-#define _IO_BASE       0x00000000
-#endif
-
 #ifndef CONFIG_PCI_PNP
        #define PCI_ENET0_IOADDR        CONFIG_SYS_PCI1_IO_BUS
        #define PCI_ENET0_MEMADDR       CONFIG_SYS_PCI1_IO_BUS
index 59cfde6..1d8fecf 100644 (file)
@@ -340,12 +340,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
 #undef CONFIG_TULIP
 #define CONFIG_RTL8139
 
-#ifdef CONFIG_RTL8139
-/* This macro is used by RTL8139 but not defined in PPC architecture */
-#define KSEG1ADDR(x)           (x)
-#define _IO_BASE       0x00000000
-#endif
-
 #ifndef CONFIG_PCI_PNP
        #define PCI_ENET0_IOADDR        CONFIG_SYS_PCI1_IO_BUS
        #define PCI_ENET0_MEMADDR       CONFIG_SYS_PCI1_IO_BUS
index 6f1b1a4..235be51 100644 (file)
@@ -484,12 +484,6 @@ extern unsigned long get_board_ddr_clk(unsigned long dummy);
 #undef CONFIG_TULIP
 #undef CONFIG_RTL8139
 
-#ifdef CONFIG_RTL8139
-/* This macro is used by RTL8139 but not defined in PPC architecture */
-#define KSEG1ADDR(x)           (x)
-#define _IO_BASE       0x00000000
-#endif
-
 #ifndef CONFIG_PCI_PNP
        #define PCI_ENET0_IOADDR        CONFIG_SYS_PCIE3_IO_BUS
        #define PCI_ENET0_MEMADDR       CONFIG_SYS_PCIE3_IO_BUS
index 1091043..2f40ef4 100644 (file)
 #define CONFIG_SYS_PCI1_IO_VIRT        0xe1000000
 #define CONFIG_SYS_PCI1_IO_SIZE        0x00100000      /* 1M */
 
-/* For RTL8139 */
-#define KSEG1ADDR(x)   ({u32 _x = le32_to_cpu(*(u32 *)(x)); (&_x); })
-#define _IO_BASE               0x00000000
-
 /* controller 1, Base address 0xa000 */
 #define CONFIG_SYS_PCIE1_MEM_BUS       0xa0000000
 #define CONFIG_SYS_PCIE1_MEM_PHYS      CONFIG_SYS_PCIE1_MEM_BUS
index 035874b..60ce0f3 100644 (file)
@@ -348,10 +348,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
                                 | CONFIG_SYS_PHYS_ADDR_HIGH)
 #define CONFIG_SYS_PCI1_IO_SIZE        0x00010000      /* 64K */
 
-/* For RTL8139 */
-#define KSEG1ADDR(x)           ({u32 _x=le32_to_cpu(*(u32 *)(x)); (&_x);})
-#define _IO_BASE               0x00000000
-
 #ifdef CONFIG_PHYS_64BIT
 /*
  * Use the same PCI bus address on PCI1 and PCI2 if we have PHYS_64BIT.
index 9675205..ac8cb57 100644 (file)
 #define CONFIG_SYS_PCI1_IO_PHYS        0xE2000000
 #define CONFIG_SYS_PCI1_IO_SIZE        0x01000000
 
-#define _IO_BASE               0x00000000
-
 #define CONFIG_NET_MULTI       1
 #define CONFIG_NET_RETRY_COUNT 3
 
index c9589bd..3853574 100644 (file)
 
 /* Board Clock */
 #define CONFIG_SYS_CLK_FREQ    33333333
-#define TMU_CLK_DIVIDER                (4)     /* 4 (default), 16, 64, 256 or 1024 */
-#define CONFIG_SYS_HZ                  (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER)
+#define CONFIG_SYS_TMU_CLK_DIV         (4)     /* 4 (default), 16, 64, 256 or 1024 */
+#define CONFIG_SYS_HZ          1000
 
 #endif /* __MIGO_R_H */
index 9306860..676f013 100644 (file)
@@ -519,12 +519,6 @@ extern unsigned long calculate_board_ddr_clk(unsigned long dummy);
 #undef CONFIG_TULIP
 #define CONFIG_RTL8139
 
-#ifdef CONFIG_RTL8139
-/* This macro is used by RTL8139 but not defined in PPC architecture */
-#define KSEG1ADDR(x)           (x)
-#define _IO_BASE       0x00000000
-#endif
-
 #ifndef CONFIG_PCI_PNP
        #define PCI_ENET0_IOADDR        CONFIG_SYS_PCIE3_IO_BUS
        #define PCI_ENET0_MEMADDR       CONFIG_SYS_PCIE3_IO_BUS
index c6d77e3..6f58a05 100644 (file)
 
 /* Board Clock */
 #define CONFIG_SYS_CLK_FREQ    33333333
-#define TMU_CLK_DIVIDER                (4)     /* 4 (default), 16, 64, 256 or 1024 */
-#define CONFIG_SYS_HZ                  (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER)
+#define CONFIG_SYS_TMU_CLK_DIV         (4)     /* 4 (default), 16, 64, 256 or 1024 */
+#define CONFIG_SYS_HZ          1000
 
 #endif /* __AP325RXA_H */
index 58f67a4..e7e238d 100644 (file)
  *     [09:05] DRAM tRP:
  *     [04:00] DRAM tRPA
  */
-#define CONFIG_SYS_MDDRC_SYS_CFG       0xF8604A00
-#define CONFIG_SYS_MDDRC_SYS_CFG_RUN   0xE8604A00
-/*#define CONFIG_SYS_MDDRC_TIME_CFG1   0x54EC1168 */
-  #define CONFIG_SYS_MDDRC_TIME_CFG1   0x55D81189
-/*#define CONFIG_SYS_MDDRC_TIME_CFG2   0x35210864 */
-  #define CONFIG_SYS_MDDRC_TIME_CFG2   0x34790863
+#define CONFIG_SYS_MDDRC_SYS_CFG     ( (1 << 31) |     /* RST_B */ \
+                                       (1 << 30) |     /* CKE */ \
+                                       (1 << 29) |     /* CLK_ON */ \
+                                       (1 << 28) |     /* CMD_MODE */ \
+                                       (4 << 25) |     /* DRAM_ROW_SELECT */ \
+                                       (3 << 21) |     /* DRAM_BANK_SELECT */ \
+                                       (0 << 18) |     /* SELF_REF_EN */ \
+                                       (0 << 17) |     /* 16BIT_MODE */ \
+                                       (2 << 13) |     /* RDLY */ \
+                                       (0 << 12) |     /* HALF_DQS_DLY */ \
+                                       (1 << 11) |     /* QUART_DQS_DLY */ \
+                                       (2 <<  8) |     /* WDLY */ \
+                                       (0 <<  7) |     /* EARLY_ODT */ \
+                                       (1 <<  6) |     /* ON_DIE_TERMINATE */ \
+                                       (0 <<  5) |     /* FIFO_OV_CLEAR */ \
+                                       (0 <<  4) |     /* FIFO_UV_CLEAR */ \
+                                       (0 <<  1) |     /* FIFO_OV_EN */ \
+                                       (0 <<  0)       /* FIFO_UV_EN */ \
+                                    )
+
+#define CONFIG_SYS_MDDRC_SYS_CFG_RUN   (CONFIG_SYS_MDDRC_SYS_CFG & ~(1 << 28))
+#define CONFIG_SYS_MDDRC_TIME_CFG1     0x55D81189
+#define CONFIG_SYS_MDDRC_TIME_CFG2     0x34790863
 
 #define CONFIG_SYS_MDDRC_SYS_CFG_EN    0xF0000000
 #define CONFIG_SYS_MDDRC_TIME_CFG0     0x00003D2E
-/*#define CONFIG_SYS_MDDRC_TIME_CFG0_RUN       0x06183D2E */
 #define CONFIG_SYS_MDDRC_TIME_CFG0_RUN 0x030C3D2E
 
 #define CONFIG_SYS_MICRON_NOP          0x01380000
 #define CONFIG_SYS_MICRON_PCHG_ALL     0x01100400
-#define CONFIG_SYS_MICRON_EM2          0x01020000
-#define CONFIG_SYS_MICRON_EM3          0x01030000
-#define CONFIG_SYS_MICRON_EN_DLL       0x01010000
+#define CONFIG_SYS_MICRON_EMR       (  (1 << 24) |     /* CMD_REQ */ \
+                                       (0 << 22) |     /* DRAM_CS */ \
+                                       (0 << 21) |     /* DRAM_RAS */ \
+                                       (0 << 20) |     /* DRAM_CAS */ \
+                                       (0 << 19) |     /* DRAM_WEB */ \
+                                       (1 << 16) |     /* DRAM_BS[2:0] */ \
+                                       (0 << 15) |     /* */ \
+                                       (0 << 12) |     /* A12->out */ \
+                                       (0 << 11) |     /* A11->RDQS */ \
+                                       (0 << 10) |     /* A10->DQS# */ \
+                                       (0 <<  7) |     /* OCD program */ \
+                                       (0 <<  6) |     /* Rtt1 */ \
+                                       (0 <<  3) |     /* posted CAS# */ \
+                                       (0 <<  2) |     /* Rtt0 */ \
+                                       (1 <<  1) |     /* ODS */ \
+                                       (0 <<  0)       /* DLL */ \
+                                    )
+#define CONFIG_SYS_MICRON_EMR2         0x01020000
+#define CONFIG_SYS_MICRON_EMR3         0x01030000
 #define CONFIG_SYS_MICRON_RFSH         0x01080000
 #define CONFIG_SYS_MICRON_INIT_DEV_OP  0x01000432
-#define CONFIG_SYS_MICRON_OCD_DEFAULT  0x01010780
+#define CONFIG_SYS_MICRON_EMR_OCD    ( (1 << 24) |     /* CMD_REQ */ \
+                                       (0 << 22) |     /* DRAM_CS */ \
+                                       (0 << 21) |     /* DRAM_RAS */ \
+                                       (0 << 20) |     /* DRAM_CAS */ \
+                                       (0 << 19) |     /* DRAM_WEB */ \
+                                       (1 << 16) |     /* DRAM_BS[2:0] */ \
+                                       (0 << 15) |     /* */ \
+                                       (0 << 12) |     /* A12->out */ \
+                                       (0 << 11) |     /* A11->RDQS */ \
+                                       (1 << 10) |     /* A10->DQS# */ \
+                                       (7 <<  7) |     /* OCD program */ \
+                                       (0 <<  6) |     /* Rtt1 */ \
+                                       (0 <<  3) |     /* posted CAS# */ \
+                                       (1 <<  2) |     /* Rtt0 */ \
+                                       (0 <<  1) |     /* ODS (Output Drive Strength) */ \
+                                       (0 <<  0)       /* DLL */ \
+                                    )
+
+/*
+ * Backward compatible definitions,
+ * so we do not have to change cpu/mpc512x/fixed_sdram.c
+ */
+#define        CONFIG_SYS_MICRON_EM2           (CONFIG_SYS_MICRON_EMR2)
+#define CONFIG_SYS_MICRON_EM3          (CONFIG_SYS_MICRON_EMR3)
+#define CONFIG_SYS_MICRON_EN_DLL       (CONFIG_SYS_MICRON_EMR)
+#define CONFIG_SYS_MICRON_OCD_DEFAULT  (CONFIG_SYS_MICRON_EMR_OCD)
 
 /* DDR Priority Manager Configuration */
 #define CONFIG_SYS_MDDRCGRP_PM_CFG1    0x00077777
 
 #undef CONFIG_SYS_FLASH_CHECKSUM
 
+/*
+ * NAND FLASH support
+ * drivers/mtd/nand/mpc5121_nfc.c (rev 2 silicon only)
+ */
+#define CONFIG_CMD_NAND                                        /* enable NAND support */
+#define CONFIG_JFFS2_NAND                              /* with JFFS2 on it */
+
+
+#define CONFIG_NAND_MPC5121_NFC
+#define CONFIG_SYS_NAND_BASE           0x40000000
+
+#define CONFIG_SYS_MAX_NAND_DEVICE     1
+#define NAND_MAX_CHIPS                 CONFIG_SYS_MAX_NAND_DEVICE
+
+#define CONFIG_SYS_64BIT_VSPRINTF      /* needed for nand_util.c */
+
+/*
+ * Configuration parameters for MPC5121 NAND driver
+ */
+#define CONFIG_FSL_NFC_WIDTH           1
+#define CONFIG_FSL_NFC_WRITE_SIZE      2048
+#define CONFIG_FSL_NFC_SPARE_SIZE      64
+#define CONFIG_FSL_NFC_CHIPS           CONFIG_SYS_MAX_NAND_DEVICE
+
 #define CONFIG_SYS_SRAM_BASE           0x30000000
 #define CONFIG_SYS_SRAM_SIZE           0x00020000      /* 128 KB */
 
-#define CONFIG_SYS_ARIA_SRAM_BASE      0x30020000
-#define CONFIG_SYS_ARIA_SRAM_SIZE      0x20000         /* 128 KB */
+/* Make two SRAM regions contiguous */
+#define CONFIG_SYS_ARIA_SRAM_BASE      (CONFIG_SYS_SRAM_BASE + \
+                                        CONFIG_SYS_SRAM_SIZE)
+#define CONFIG_SYS_ARIA_SRAM_SIZE      0x00100000      /* reserve 1MB-window */
 
 #define CONFIG_SYS_ARIA_FPGA_BASE      (CONFIG_SYS_ARIA_SRAM_BASE + \
                                         CONFIG_SYS_ARIA_SRAM_SIZE)
 #define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
 
 #define CONFIG_SYS_MONITOR_BASE                TEXT_BASE
-#define CONFIG_SYS_MONITOR_LEN         (256 * 1024)
+#define CONFIG_SYS_MONITOR_LEN         (384 * 1024)
 
 #ifdef CONFIG_FSL_DIU_FB
 #define CONFIG_SYS_MALLOC_LEN          (6 * 1024 * 1024)
 #undef CONFIG_CMD_FUSE
 #define CONFIG_CMD_I2C
 #undef CONFIG_CMD_IDE
+#define CONFIG_CMD_JFFS2
 #define CONFIG_CMD_MII
 #define CONFIG_CMD_NFS
 #define CONFIG_CMD_PING
 #define CONFIG_CMD_PCI
 #endif
 
-#if defined(CONFIG_CMD_IDE)
+#if defined(CONFIG_CMD_IDE) || defined(CONFIG_CMD_EXT2)
 #define CONFIG_DOS_PARTITION
 #define CONFIG_MAC_PARTITION
 #define CONFIG_ISO_PARTITION
 #endif /* defined(CONFIG_CMD_IDE) */
 
 /*
+ * Dynamic MTD partition support
+ */
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_MTD_DEVICE              /* needed for mtdparts commands */
+#define CONFIG_FLASH_CFI_MTD
+#define MTDIDS_DEFAULT         "nor0=f8000000.flash,nand0=mpc5121.nand"
+
+/*
+ * NOR flash layout:
+ *
+ * F8000000 - FEAFFFFF 107 MiB         User Data
+ * FEB00000 - FFAFFFFF  16 MiB         Root File System
+ * FFB00000 - FFFEFFFF   4 MiB         Linux Kernel
+ * FFF00000 - FFFBFFFF 768 KiB         U-Boot (up to 512 KiB) and 2 x * env
+ * FFFC0000 - FFFFFFFF 256 KiB         Device Tree
+ *
+ * NAND flash layout: one big partition
+ */
+#define MTDPARTS_DEFAULT       "mtdparts=f8000000.flash:107m(user),"   \
+                                               "16m(rootfs),"          \
+                                               "4m(kernel),"           \
+                                               "768k(u-boot),"         \
+                                               "256k(dtb);"            \
+                                       "mpc5121.nand:-(data)"
+
+/*
  * Watchdog timeout = CONFIG_SYS_WATCHDOG_VALUE * 65536 / IPS clock.
  * For example, when IPS is set to 66MHz and CONFIG_SYS_WATCHDOG_VALUE
  * is set to 0xFFFF, watchdog timeouts after about 64s. For details
        "fdt_addr_r=880000\0"                                           \
        "ramdisk_addr_r=900000\0"                                       \
        "u-boot_addr=FFF00000\0"                                        \
-       "kernel_addr=FFC40000\0"                                        \
-       "fdt_addr=FFEC0000\0"                                           \
-       "ramdisk_addr=FC040000\0"                                       \
+       "kernel_addr=FFB00000\0"                                        \
+       "fdt_addr=FFFC0000\0"                                           \
+       "ramdisk_addr=FEB00000\0"                                       \
        "ramdiskfile=aria/uRamdisk\0"                           \
        "u-boot=aria/u-boot.bin\0"                                      \
        "fdtfile=aria/aria.dtb\0"                                       \
index 83e05b3..6d24023 100644 (file)
 #define CONFIG_SYS_HZ          1000
 
 #define CONFIG_ARM926EJS       1       /* This is an ARM926EJS Core    */
+#ifdef CONFIG_AT91SAM9G10EK
+#define CONFIG_AT91SAM9G10     1       /* It's an Atmel AT91SAM9G10 SoC*/
+#else
 #define CONFIG_AT91SAM9261     1       /* It's an Atmel AT91SAM9261 SoC*/
-#define CONFIG_AT91SAM9261EK   1       /* on an AT91SAM9261EK Board    */
+#endif
 #define CONFIG_ARCH_CPU_INIT
 #undef CONFIG_USE_IRQ                  /* we don't need IRQ/FIQ stuff  */
 
 #define CONFIG_LCD_INFO_BELOW_LOGO     1
 #define CONFIG_SYS_WHITE_ON_BLACK              1
 #define CONFIG_ATMEL_LCD               1
+#ifdef CONFIG_AT91SAM9261EK
 #define CONFIG_ATMEL_LCD_BGR555                1
+#else
+#define        CONFIG_AT91SAM9G10_LCD_BASE             0x23E00000      /* LCD is no more in SRAM */
+#endif
 #define CONFIG_SYS_CONSOLE_IS_IN_ENV           1
 
 /* LED */
 #define CONFIG_DOS_PARTITION           1
 #define CONFIG_SYS_USB_OHCI_CPU_INIT           1
 #define CONFIG_SYS_USB_OHCI_REGS_BASE          0x00500000      /* AT91SAM9261_UHP_BASE */
+#ifdef CONFIG_AT91SAM9G10EK
+#define CONFIG_SYS_USB_OHCI_SLOT_NAME          "at91sam9g10"
+#else
 #define CONFIG_SYS_USB_OHCI_SLOT_NAME          "at91sam9261"
+#endif
 #define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS     2
 #define CONFIG_USB_STORAGE             1
 #define CONFIG_CMD_FAT                 1
diff --git a/include/configs/at91sam9m10g45ek.h b/include/configs/at91sam9m10g45ek.h
new file mode 100644 (file)
index 0000000..572c45b
--- /dev/null
@@ -0,0 +1,225 @@
+/*
+ * (C) Copyright 2007-2008
+ * Stelian Pop <stelian.pop@leadtechdesign.com>
+ * Lead Tech Design <www.leadtechdesign.com>
+ *
+ * Configuation settings for the AT91SAM9M10G45EK board(and AT91SAM9G45EKES).
+ *
+ * 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
+
+/* ARM asynchronous clock */
+#define AT91_MAIN_CLOCK                12000000        /* from 12 MHz crystal */
+#define CONFIG_SYS_HZ          1000
+
+#define CONFIG_ARM926EJS       1       /* This is an ARM926EJS Core    */
+#ifdef CONFIG_AT91SAM9M10G45EK
+#define CONFIG_AT91SAM9M10G45  1       /* It's an Atmel AT91SAM9M10G45 SoC*/
+#else
+#define CONFIG_AT91SAM9G45     1       /* It's an Atmel AT91SAM9G45 SoC*/
+#endif
+#define CONFIG_ARCH_CPU_INIT
+#undef CONFIG_USE_IRQ                  /* we don't need IRQ/FIQ stuff  */
+
+#define CONFIG_CMDLINE_TAG     1       /* enable passing of ATAGs      */
+#define CONFIG_SETUP_MEMORY_TAGS 1
+#define CONFIG_INITRD_TAG      1
+
+#define CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_SKIP_RELOCATE_UBOOT
+
+/*
+ * Hardware drivers
+ */
+#define CONFIG_ATMEL_USART     1
+#undef CONFIG_USART0
+#undef CONFIG_USART1
+#undef CONFIG_USART2
+#define CONFIG_USART3          1       /* USART 3 is DBGU */
+
+/* LCD */
+#define CONFIG_LCD                     1
+#define LCD_BPP                                LCD_COLOR8
+#define CONFIG_LCD_LOGO                        1
+#undef LCD_TEST_PATTERN
+#define CONFIG_LCD_INFO                        1
+#define CONFIG_LCD_INFO_BELOW_LOGO     1
+#define CONFIG_SYS_WHITE_ON_BLACK              1
+#define CONFIG_ATMEL_LCD               1
+#define CONFIG_ATMEL_LCD_RGB565                1
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV           1
+/* board specific(not enough SRAM) */
+#define CONFIG_AT91SAM9G45_LCD_BASE            0x73E00000
+
+/* LED */
+#define CONFIG_AT91_LED
+#define        CONFIG_RED_LED          AT91_PIN_PD31   /* this is the user1 led */
+#define        CONFIG_GREEN_LED        AT91_PIN_PD0    /* this is the user2 led */
+
+#define CONFIG_BOOTDELAY       3
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE      1
+#define CONFIG_BOOTP_BOOTPATH          1
+#define CONFIG_BOOTP_GATEWAY           1
+#define CONFIG_BOOTP_HOSTNAME          1
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+#undef CONFIG_CMD_BDI
+#undef CONFIG_CMD_FPGA
+#undef CONFIG_CMD_IMI
+#undef CONFIG_CMD_IMLS
+#undef CONFIG_CMD_AUTOSCRIPT
+#undef CONFIG_CMD_LOADS
+
+#define CONFIG_CMD_PING                1
+#define CONFIG_CMD_DHCP                1
+#define CONFIG_CMD_NAND                1
+#define CONFIG_CMD_USB         1
+
+/* SDRAM */
+#define CONFIG_NR_DRAM_BANKS           1
+#define PHYS_SDRAM                     0x70000000
+#define PHYS_SDRAM_SIZE                        0x08000000      /* 128 megs */
+
+/* DataFlash */
+#ifdef CONFIG_ATMEL_SPI
+#define CONFIG_CMD_SF
+#define CONFIG_CMD_SPI
+#define CONFIG_SPI_FLASH               1
+#define CONFIG_SPI_FLASH_ATMEL         1
+#define CONFIG_SYS_MAX_DATAFLASH_BANKS 1
+#endif
+
+/* NOR flash, if populated */
+#ifndef CONFIG_CMD_NAND
+#define CONFIG_SYS_NO_FLASH            1
+#else
+#define CONFIG_SYS_FLASH_CFI           1
+#define CONFIG_FLASH_CFI_DRIVER                1
+#define PHYS_FLASH_1                   0x10000000
+#define CONFIG_SYS_FLASH_BASE                  PHYS_FLASH_1
+#define CONFIG_SYS_MAX_FLASH_SECT              256
+#define CONFIG_SYS_MAX_FLASH_BANKS             1
+#endif
+
+/* NAND flash */
+#ifdef CONFIG_CMD_NAND
+#define CONFIG_NAND_MAX_CHIPS                  1
+#define CONFIG_NAND_ATMEL
+#define CONFIG_SYS_MAX_NAND_DEVICE             1
+#define CONFIG_SYS_NAND_BASE                   0x40000000
+#define CONFIG_SYS_NAND_DBW_8                  1
+/* our ALE is AD21 */
+#define CONFIG_SYS_NAND_MASK_ALE               (1 << 21)
+/* our CLE is AD22 */
+#define CONFIG_SYS_NAND_MASK_CLE               (1 << 22)
+#define CONFIG_SYS_NAND_ENABLE_PIN             AT91_PIN_PC14
+#define CONFIG_SYS_NAND_READY_PIN              AT91_PIN_PC8
+#endif
+
+/* Ethernet */
+#define CONFIG_MACB                    1
+#define CONFIG_RMII                    1
+#define CONFIG_NET_MULTI               1
+#define CONFIG_NET_RETRY_COUNT         20
+#define CONFIG_RESET_PHY_R             1
+
+/* USB */
+#define CONFIG_USB_ATMEL
+#define CONFIG_USB_OHCI_NEW            1
+#define CONFIG_DOS_PARTITION           1
+#define CONFIG_SYS_USB_OHCI_CPU_INIT           1
+#define CONFIG_SYS_USB_OHCI_REGS_BASE          0x00700000      /* AT91SAM9G45_UHP_OHCI_BASE */
+#define CONFIG_SYS_USB_OHCI_SLOT_NAME          "at91sam9g45"
+#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS     2
+#define CONFIG_USB_STORAGE             1
+
+#define CONFIG_SYS_LOAD_ADDR                   0x22000000      /* load address */
+
+#define CONFIG_SYS_MEMTEST_START               PHYS_SDRAM
+#define CONFIG_SYS_MEMTEST_END                 0x23e00000
+
+#ifdef CONFIG_SYS_USE_DATAFLASH
+
+/* bootstrap + u-boot + env + linux in dataflash on CS0 */
+#define CONFIG_ENV_IS_IN_SPI_FLASH     1
+#define CONFIG_SYS_MONITOR_BASE        (0xC0000000 + 0x8400)
+#define CONFIG_ENV_OFFSET              0x4200
+#define CONFIG_ENV_ADDR                (0xC0000000 + CONFIG_ENV_OFFSET)
+#define CONFIG_ENV_SIZE                0x4200
+#define CONFIG_ENV_SECT_SIZE           0x10000
+#define CONFIG_BOOTCOMMAND     "cp.b 0xC0042000 0x22000000 0x210000; bootm"
+#define CONFIG_BOOTARGS                "console=ttyS0,115200 " \
+                               "root=/dev/mtdblock0 " \
+                               "mtdparts=at91_nand:-(root) "\
+                               "rw rootfstype=jffs2"
+
+#else /* CONFIG_SYS_USE_NANDFLASH */
+
+/* bootstrap + u-boot + env + linux in nandflash */
+#define CONFIG_ENV_IS_IN_NAND  1
+#define CONFIG_ENV_OFFSET              0x60000
+#define CONFIG_ENV_OFFSET_REDUND       0x80000
+#define CONFIG_ENV_SIZE                0x20000         /* 1 sector = 128 kB */
+#define CONFIG_BOOTCOMMAND     "nand read 0x72000000 0x200000 0x200000; bootm"
+#define CONFIG_BOOTARGS                "console=ttyS0,115200 " \
+                               "root=/dev/mtdblock5 " \
+                               "mtdparts=at91_nand:128k(bootstrap)ro, \
+                               256k(uboot)ro,128k(env1)ro,128k(env2)ro, \
+                               2M(linux),-(root) " \
+                               "rw rootfstype=jffs2"
+
+#endif
+
+#define CONFIG_BAUDRATE                115200
+#define CONFIG_SYS_BAUDRATE_TABLE      {115200 , 19200, 38400, 57600, 9600 }
+
+#define CONFIG_SYS_PROMPT              "U-Boot> "
+#define CONFIG_SYS_CBSIZE              256
+#define CONFIG_SYS_MAXARGS             16
+#define CONFIG_SYS_PBSIZE              (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_LONGHELP            1
+#define CONFIG_CMDLINE_EDITING 1
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT_HUSH_PS2     "> "
+
+#define ROUND(A, B)            (((A) + (B)) & ~((B) - 1))
+/*
+ * Size of malloc() pool
+ */
+#define CONFIG_SYS_MALLOC_LEN          ROUND(3 * CONFIG_ENV_SIZE + 128*1024, 0x1000)
+#define CONFIG_SYS_GBL_DATA_SIZE       128     /* 128 bytes for initial data */
+
+#define CONFIG_STACKSIZE       (32*1024)       /* regular stack */
+
+#ifdef CONFIG_USE_IRQ
+#error CONFIG_USE_IRQ not supported
+#endif
+
+#endif
index 0a86e83..98300db 100644 (file)
 /*
  * NAND Settings
  */
-/* #define CONFIG_BF537_NAND */
-#ifdef CONFIG_BF537_NAND
-# define CONFIG_CMD_NAND
-#endif
-
-#define CONFIG_SYS_NAND_ADDR           0x20212000
-#define CONFIG_SYS_NAND_BASE           CONFIG_SYS_NAND_ADDR
+/* #define CONFIG_NAND_PLAT */
+#define CONFIG_SYS_NAND_BASE           0x20212000
 #define CONFIG_SYS_MAX_NAND_DEVICE     1
-#define SECTORSIZE             512
-#define ADDR_COLUMN            1
-#define ADDR_PAGE              2
-#define ADDR_COLUMN_PAGE       3
-#define NAND_ChipID_UNKNOWN    0x00
-#define NAND_MAX_FLOORS                1
-#define BFIN_NAND_READY                PF3
-
-#define NAND_WAIT_READY(nand) \
+
+#define BFIN_NAND_CLE(chip) ((unsigned long)(chip)->IO_ADDR_W | (1 << 2))
+#define BFIN_NAND_ALE(chip) ((unsigned long)(chip)->IO_ADDR_W | (1 << 1))
+#define BFIN_NAND_READY     PF3
+#define BFIN_NAND_WRITE(addr, cmd) \
        do { \
-               int timeout = 0; \
-               while (!(*pPORTFIO & PF3)) \
-                       if (timeout++ > 100000) \
-                               break; \
+               bfin_write8(addr, cmd); \
+               SSYNC(); \
        } while (0)
 
-#define BFIN_NAND_CLE          (1 << 2)        /* A2 -> Command Enable */
-#define BFIN_NAND_ALE          (1 << 1)        /* A1 -> Address Enable */
-#define WRITE_NAND_COMMAND(d, adr) bfin_write8(adr | BFIN_NAND_CLE, d)
-#define WRITE_NAND_ADDRESS(d, adr) bfin_write8(adr | BFIN_NAND_ALE, d)
-#define WRITE_NAND(d, adr)         bfin_write8(adr, d)
-#define READ_NAND(adr)             bfin_read8(adr)
+#define NAND_PLAT_WRITE_CMD(chip, cmd) BFIN_NAND_WRITE(BFIN_NAND_CLE(chip), cmd)
+#define NAND_PLAT_WRITE_ADR(chip, cmd) BFIN_NAND_WRITE(BFIN_NAND_ALE(chip), cmd)
+#define NAND_PLAT_DEV_READY(chip)      (bfin_read_PORTFIO() & BFIN_NAND_READY)
+#define NAND_PLAT_INIT() \
+       do { \
+               bfin_write_PORTF_FER(bfin_read_PORTF_FER() & ~BFIN_NAND_READY); \
+               bfin_write_PORTFIO_DIR(bfin_read_PORTFIO_DIR() & ~BFIN_NAND_READY); \
+               bfin_write_PORTFIO_INEN(bfin_read_PORTFIO_INEN() | BFIN_NAND_READY); \
+       } while (0)
 
 
 /*
index 4149a29..1ca2e51 100644 (file)
@@ -38,6 +38,9 @@
 #  define CONFIG_CMD_USB_STORAGE
 #  define CONFIG_DOS_PARTITION
 # endif
+# ifdef CONFIG_NAND_PLAT
+#  define CONFIG_CMD_NAND
+# endif
 # ifdef CONFIG_POST
 #  define CONFIG_CMD_DIAG
 # endif
index 1e4c716..887f3fb 100644 (file)
 #endif
 
 #define CONFIG_ENV_IS_IN_SPI_FLASH
-#define CONFIG_ENV_OFFSET      0x4000
+#define CONFIG_ENV_OFFSET      0x40000
 #define CONFIG_ENV_SIZE                0x2000
 #define CONFIG_ENV_SECT_SIZE   0x40000
-#define ENV_IS_EMBEDDED_CUSTOM
 
 /*
  * SDRAM settings & memory map
  * Serial Flash Infomation
  */
 #define CONFIG_BFIN_SPI
-/* For the M25P64 SCK Should be Kept < 20Mhz */
-#define CONFIG_ENV_SPI_MAX_HZ  20000000
-#define CONFIG_SF_DEFAULT_SPEED        20000000
+/* For the M25P64 SCK Should be Kept < 15Mhz */
+#define CONFIG_ENV_SPI_MAX_HZ  15000000
+#define CONFIG_SF_DEFAULT_SPEED        15000000
 #define CONFIG_SPI_FLASH
 #define CONFIG_SPI_FLASH_STMICRO
 
index d814012..48c5198 100644 (file)
  */
 #if !defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)
 #define        CONFIG_ENV_IS_IN_FLASH  1       /* use FLASH for environment vars */
+#define CONFIG_SYS_NOR_CS              0       /* NOR chip connected to CSx */
 #define CONFIG_SYS_NAND_CS             3       /* NAND chip connected to CSx */
 #else
 #define        CONFIG_ENV_IS_IN_NAND   1       /* use NAND for environment vars  */
+#define CONFIG_SYS_NOR_CS              3       /* NOR chip connected to CSx */
 #define CONFIG_SYS_NAND_CS             0       /* NAND chip connected to CSx */
 #define CONFIG_ENV_IS_EMBEDDED 1       /* use embedded environment */
 #endif
index 53a2580..1153f11 100644 (file)
  * Network Settings
  */
 #define ADI_CMDS_NETWORK       1
+/* The next 2 lines are for use with DEV-BF5xx */
 #define CONFIG_DRIVER_SMC91111 1
 #define CONFIG_SMC91111_BASE   0x28000300
+/* The next 3 lines are for use with EXT-BF5xx-USB-ETH2 */
+/* #define CONFIG_DRIVER_SMC911X 1 */
+/* #define CONFIG_DRIVER_SMC911X_BASE 0x24080000 // AMS1 */
+/* #define CONFIG_DRIVER_SMC911X_32_BIT 1 */
 #define CONFIG_HOSTNAME                cm-bf561
 /* Uncomment next line to use fixed MAC address */
 /* #define CONFIG_ETHADDR      02:80:ad:20:31:cf */
diff --git a/include/configs/espt.h b/include/configs/espt.h
new file mode 100644 (file)
index 0000000..2ec907c
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Configuation settings for the ESPT-GIGA board
+ *
+ * Copyright (C) 2008 Renesas Solutions Corp.
+ * Copyright (C) 2008 Nobuhiro Iwamatsu <iwamatsu.nobuhiro@renesas.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 __ESPT_H
+#define __ESPT_H
+
+#define CONFIG_SH              1
+#define CONFIG_SH4             1
+#define CONFIG_CPU_SH7763      1
+#define CONFIG_ESPT    1
+#define __LITTLE_ENDIAN                1
+
+/*
+ * Command line configuration.
+ */
+#define CONFIG_CMD_SDRAM
+#define CONFIG_CMD_FLASH
+#define CONFIG_CMD_MEMORY
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_ENV
+#define CONFIG_CMD_NFS
+#define CONFIG_CMD_SAVEENV
+
+#define CONFIG_BOOTDELAY        -1
+#define CONFIG_BOOTARGS         "console=ttySC0,115200 root=1f01"
+#define CONFIG_ENV_OVERWRITE    1
+
+#define CONFIG_VERSION_VARIABLE
+#undef  CONFIG_SHOW_BOOT_PROGRESS
+
+/* SCIF */
+#define CONFIG_SCIF_CONSOLE            1
+#define CONFIG_BAUDRATE         115200
+#define CONFIG_CONS_SCIF0              1
+
+#define CONFIG_SYS_LONGHELP            /* undef to save memory */
+#define CONFIG_SYS_PROMPT              "=> "   /* Monitor Command Prompt */
+#define CONFIG_SYS_CBSIZE              256     /* Buffer size for input from the Console */
+#define CONFIG_SYS_PBSIZE              256     /* Buffer size for Console output */
+#define CONFIG_SYS_MAXARGS             16      /* max args accepted for monitor commands */
+#define CONFIG_SYS_BARGSIZE    512     /* Buffer size for Boot Arguments
+                                                               passed to kernel */
+#define CONFIG_SYS_BAUDRATE_TABLE      { 115200 }      /* List of legal baudrate
+                                                                                               settings for this board */
+
+/* SDRAM */
+#define CONFIG_SYS_SDRAM_BASE          (0x8C000000)
+#define CONFIG_SYS_SDRAM_SIZE          (64 * 1024 * 1024)
+#define CONFIG_SYS_MEMTEST_START       (CONFIG_SYS_SDRAM_BASE)
+#define CONFIG_SYS_MEMTEST_END         (CONFIG_SYS_MEMTEST_START + (60 * 1024 * 1024))
+
+/* Flash(NOR) S29JL064H */
+#define CONFIG_SYS_FLASH_BASE          (0xA0000000)
+#define CONFIG_SYS_FLASH_CFI_WIDTH (FLASH_CFI_16BIT)
+#define CONFIG_SYS_MAX_FLASH_BANKS (1)
+#define CONFIG_SYS_MAX_FLASH_SECT  (150)
+
+/* U-boot setting */
+#define CONFIG_SYS_LOAD_ADDR           (CONFIG_SYS_SDRAM_BASE + 4 * 1024 * 1024)
+#define CONFIG_SYS_MONITOR_BASE        (CONFIG_SYS_FLASH_BASE)
+#define CONFIG_SYS_MONITOR_LEN         (128 * 1024)
+/* Size of DRAM reserved for malloc() use */
+#define CONFIG_SYS_MALLOC_LEN          (1024 * 1024)
+/* size in bytes reserved for initial data */
+#define CONFIG_SYS_GBL_DATA_SIZE       (256)
+#define CONFIG_SYS_BOOTMAPSZ           (8 * 1024 * 1024)
+
+#define CONFIG_SYS_FLASH_CFI
+#define CONFIG_FLASH_CFI_DRIVER
+#undef  CONFIG_SYS_FLASH_QUIET_TEST
+#define CONFIG_SYS_FLASH_EMPTY_INFO    /* print 'E' for empty sector on flinfo */
+/* Timeout for Flash erase operations (in ms) */
+#define CONFIG_SYS_FLASH_ERASE_TOUT    (3 * 1000)
+/* Timeout for Flash write operations (in ms) */
+#define CONFIG_SYS_FLASH_WRITE_TOUT    (3 * 1000)
+/* Timeout for Flash set sector lock bit operations (in ms) */
+#define CONFIG_SYS_FLASH_LOCK_TOUT             (3 * 1000)
+/* Timeout for Flash clear lock bit operations (in ms) */
+#define CONFIG_SYS_FLASH_UNLOCK_TOUT   (3 * 1000)
+/* Use hardware flash sectors protection instead of U-Boot software protection */
+#undef  CONFIG_SYS_FLASH_PROTECTION
+#undef  CONFIG_SYS_DIRECT_FLASH_TFTP
+#define CONFIG_ENV_IS_IN_FLASH
+#define CONFIG_ENV_SECT_SIZE   (128 * 1024)
+#define CONFIG_ENV_SIZE                (CONFIG_ENV_SECT_SIZE)
+#define CONFIG_ENV_ADDR                (CONFIG_SYS_FLASH_BASE + (1 * CONFIG_ENV_SECT_SIZE))
+/* Offset of env Flash sector relative to CONFIG_SYS_FLASH_BASE */
+#define CONFIG_ENV_OFFSET              (CONFIG_ENV_ADDR - CONFIG_SYS_FLASH_BASE)
+#define CONFIG_ENV_SIZE_REDUND (CONFIG_ENV_SECT_SIZE)
+#define CONFIG_ENV_ADDR_REDUND (CONFIG_SYS_FLASH_BASE + (2 * CONFIG_ENV_SECT_SIZE))
+
+/* Clock */
+#define CONFIG_SYS_CLK_FREQ    66666666
+#define CONFIG_SYS_TMU_CLK_DIV      4
+#define CONFIG_SYS_HZ       1000
+
+/* Ether */
+#define CONFIG_NET_MULTI 1
+#define CONFIG_SH_ETHER 1
+#define CONFIG_SH_ETHER_USE_PORT (1)
+#define CONFIG_SH_ETHER_PHY_ADDR (0x00)
+
+#endif /* __SH7763RDP_H */
index 0831843..e00859a 100644 (file)
  *     [09:05] DRAM tRP:
  *     [04:00] DRAM tRPA
  */
-#ifdef CONFIG_ADS5121_REV2
-#define CONFIG_SYS_MDDRC_SYS_CFG       0xF8604A00
-#define CONFIG_SYS_MDDRC_SYS_CFG_RUN   0xE8604A00
-#define CONFIG_SYS_MDDRC_TIME_CFG1     0x54EC1168
-#define CONFIG_SYS_MDDRC_TIME_CFG2     0x35210864
-#else
 #define CONFIG_SYS_MDDRC_SYS_CFG        0xFA804A00
 #define CONFIG_SYS_MDDRC_SYS_CFG_RUN    0xEA804A00
 #define CONFIG_SYS_MDDRC_TIME_CFG1      0x68EC1168
 #define CONFIG_SYS_MDDRC_TIME_CFG2      0x34310864
-#endif
 #define CONFIG_SYS_MDDRC_SYS_CFG_EN    0xF0000000
 #define CONFIG_SYS_MDDRC_TIME_CFG0     0x00003D2E
 #define CONFIG_SYS_MDDRC_TIME_CFG0_RUN 0x06183D2E
 
 /*
  * NAND FLASH
- * drivers/mtd/nand/mpc5121_mpc.c (rev 2 silicon only)
+ * drivers/mtd/nand/mpc5121_nfc.c (rev 2 silicon only)
  */
 #define CONFIG_CMD_NAND
 #define CONFIG_NAND_MPC5121_NFC
 #define CONFIG_SYS_MAX_NAND_DEVICE      1
 #define NAND_MAX_CHIPS                  CONFIG_SYS_MAX_NAND_DEVICE
 
+#define        CONFIG_SYS_64BIT_VSPRINTF       /* needed for nand_util.c */
+
 /*
  * Configuration parameters for MPC5121 NAND driver
  */
index 45a004e..76f174d 100644 (file)
 
 /*
  * NAND FLASH
- * drivers/mtd/nand/mpc5121_mpc.c (rev 2 silicon only)
+ * drivers/mtd/nand/mpc5121_nfc.c (rev 2 silicon only)
  */
-#define CONFIG_CMD_NAND
+#define CONFIG_CMD_NAND                                        /* enable NAND support */
+#define CONFIG_JFFS2_NAND                              /* with JFFS2 on it */
 #define CONFIG_NAND_MPC5121_NFC
 #define CONFIG_SYS_NAND_BASE            0x40000000
 
 #define NAND_MAX_CHIPS                  CONFIG_SYS_MAX_NAND_DEVICE
 #define CONFIG_SYS_NAND_SELECT_DEVICE  /* driver supports mutipl. chips */
 
+#define        CONFIG_SYS_64BIT_VSPRINTF       /* needed for nand_util.c */
+
 /*
  * Configuration parameters for MPC5121 NAND driver
  */
 #include <config_cmd_default.h>
 
 #define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DATE
 #define CONFIG_CMD_DHCP
+#define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_EXT2
 #define CONFIG_CMD_I2C
+#define CONFIG_CMD_IDE
+#define CONFIG_CMD_JFFS2
 #define CONFIG_CMD_MII
 #define CONFIG_CMD_NFS
 #define CONFIG_CMD_PING
 #define CONFIG_CMD_REGINFO
-#define CONFIG_CMD_EEPROM
-#define CONFIG_CMD_DATE
+
 #undef CONFIG_CMD_FUSE
-#define CONFIG_CMD_IDE
-#define CONFIG_CMD_EXT2
 
 #if defined(CONFIG_PCI)
 #define CONFIG_CMD_PCI
 #endif
 
-#if defined(CONFIG_CMD_IDE)
+/*
+ * Dynamic MTD partition support
+ */
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_MTD_DEVICE              /* needed for mtdparts commands */
+#define CONFIG_FLASH_CFI_MTD
+#define MTDIDS_DEFAULT         "nor0=fc000000.flash,nand0=mpc5121.nand"
+
+/*
+ * NOR flash layout:
+ *
+ * FC000000 - FEABFFFF 42.75 MiB       User Data
+ * FEAC0000 - FFABFFFF  16 MiB         Root File System
+ * FFAC0000 - FFEBFFFF   4 MiB         Linux Kernel
+ * FFEC0000 - FFEFFFFF 256 KiB         Device Tree
+ * FFF00000 - FFFFFFFF   1 MiB         U-Boot (up to 512 KiB) and 2 x * env
+ *
+ * NAND flash layout: one big partition
+ */
+#define MTDPARTS_DEFAULT       "mtdparts=fc000000.flash:43776k(user)," \
+                                               "16m(rootfs),"          \
+                                               "4m(kernel),"           \
+                                               "256k(dtb),"            \
+                                               "1m(u-boot);"           \
+                                       "mpc5121.nand:-(data)"
+
+
+#if defined(CONFIG_CMD_IDE) || defined(CONFIG_CMD_EXT2)
 #define CONFIG_DOS_PARTITION
 #define CONFIG_MAC_PARTITION
 #define CONFIG_ISO_PARTITION
        "fdt_addr_r=880000\0"                                           \
        "ramdisk_addr_r=900000\0"                                       \
        "u-boot_addr=FFF00000\0"                                        \
-       "kernel_addr=FFC40000\0"                                        \
+       "kernel_addr=FFAC0000\0"                                        \
        "fdt_addr=FFEC0000\0"                                           \
-       "ramdisk_addr=FC040000\0"                                       \
+       "ramdisk_addr=FEAC0000\0"                                       \
        "ramdiskfile=mpc5121ads/uRamdisk\0"                             \
        "u-boot=mpc5121ads/u-boot.bin\0"                                \
        "bootfile=mpc5121ads/uImage\0"                                  \
index 7d42155..4f98ba4 100644 (file)
 
 /* Networking Configuration */
 
-#define KSEG1ADDR(a)   (a)     /* Needed by the rtl8139 driver */
-
 #define CONFIG_TSI108_ETH
 #define CONFIG_TSI108_ETH_NUM_PORTS    2
 
 
 #define CONFIG_SYS_PCI_IO_SIZE         0x01000000      /* 16MB */
 
-#define _IO_BASE               0x00000000      /* points to PCI I/O space      */
-
 /* PCI Config Space mapping */
 #define CONFIG_SYS_PCI_CFG_BASE        0xfb000000      /* Changed from FE000000 */
 #define CONFIG_SYS_PCI_CFG_SIZE        0x01000000      /* 16MB */
index 86f6a93..0a472a6 100644 (file)
@@ -82,8 +82,8 @@
 
 /* Clocks */
 #define CONFIG_SYS_CLK_FREQ    24000000
-#define TMU_CLK_DIVIDER                4       /* 4 (default), 16, 64, 256 or 1024 */
-#define CONFIG_SYS_HZ                  (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER)
+#define CONFIG_SYS_TMU_CLK_DIV         4       /* 4 (default), 16, 64, 256 or 1024 */
+#define CONFIG_SYS_HZ          1000
 
 /* UART */
 #define CONFIG_SCIF_CONSOLE    1
index 9a88ec7..ba0a3f8 100644 (file)
 
 /* Board Clock */
 #define CONFIG_SYS_CLK_FREQ    33333333
-#define TMU_CLK_DIVIDER                4       /* 4 (default), 16, 64, 256 or 1024 */
-#define CONFIG_SYS_HZ                  (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER)
+#define CONFIG_SYS_TMU_CLK_DIV         4       /* 4 (default), 16, 64, 256 or 1024 */
+#define CONFIG_SYS_HZ          1000
 
 /* PCMCIA */
 #define CONFIG_IDE_PCMCIA      1
index 53ffbee..6755af3 100644 (file)
 
 /* Board Clock */
 #define CONFIG_SYS_CLK_FREQ    33333333
-#define TMU_CLK_DIVIDER                (4)     /* 4 (default), 16, 64, 256 or 1024 */
-#define CONFIG_SYS_HZ                  (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER)
+#define CONFIG_SYS_TMU_CLK_DIV         (4)     /* 4 (default), 16, 64, 256 or 1024 */
+#define CONFIG_SYS_HZ          1000
 
 #endif /* __MS7722SE_H */
index 5eed3ab..8c06bf2 100644 (file)
 
 /* Board Clock */
 #define CONFIG_SYS_CLK_FREQ    33333333
-#define TMU_CLK_DIVIDER                4
-#define CONFIG_SYS_HZ                  (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER)
+#define CONFIG_SYS_TMU_CLK_DIV         4
+#define CONFIG_SYS_HZ          1000
 
 #endif /* __MS7750SE_H */
diff --git a/include/configs/pcm030.h b/include/configs/pcm030.h
new file mode 100644 (file)
index 0000000..8acf3c7
--- /dev/null
@@ -0,0 +1,444 @@
+/*
+ * (C) Copyright 2003-2005
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * (C) Copyright 2006
+ * Eric Schumann, Phytec Messatechnik GmbH
+ *
+ * (C) Copyright 2009
+ * Jon Smirl <jonsmirl@gmail.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 __CONFIG_H
+#define __CONFIG_H
+
+#define CONFIG_BOARDINFO        "phyCORE-MPC5200B-tiny"
+
+/*-----------------------------------------------------------------------------
+High Level Configuration Options
+(easy to change)
+-----------------------------------------------------------------------------*/
+#define CONFIG_MPC5xxx         1       /* This is an MPC5xxx CPU */
+#define CONFIG_MPC5200         1       /* (more precisely an MPC5200 CPU) */
+#define CONFIG_MPC5200_DDR     1       /* (with DDR-SDRAM) */
+#define CONFIG_PHYCORE_MPC5200B_TINY 1 /* phyCORE-MPC5200B -> */
+                                       /* FEC configuration and IDE */
+#define CONFIG_SYS_MPC5XXX_CLKIN 33333333 /* ... running at 33.333333MHz */
+#define BOOTFLAG_COLD          0x01    /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM          0x02    /* Software reboot */
+
+/*-----------------------------------------------------------------------------
+Serial console configuration
+-----------------------------------------------------------------------------*/
+#define CONFIG_PSC_CONSOLE     3       /* console is on PSC3 -> */
+                                       /*define gps port conf. */
+                                       /* register later on to */
+                                       /*enable UART function! */
+#define CONFIG_BAUDRATE                115200  /* ... at 115200 bps */
+#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, 230400 }
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_JFFS2
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NFS
+#define CONFIG_CMD_PCI
+
+#define        CONFIG_TIMESTAMP        1       /* Print image info with timestamp */
+
+#if (TEXT_BASE == 0xFF000000)  /* Boot low */
+#define CONFIG_SYS_LOWBOOT 1
+#endif
+/* RAMBOOT will be defined automatically in memory section */
+
+#define CONFIG_JFFS2_CMDLINE
+#define MTDIDS_DEFAULT                 "nor0=physmap-flash.0"
+#define MTDPARTS_DEFAULT       "mtdparts=physmap-flash.0:256k(ubootl)," \
+       "1792k(kernel),13312k(jffs2),256k(uboot)ro,256k(oftree),-(space)"
+
+/*-----------------------------------------------------------------------------
+Autobooting
+-----------------------------------------------------------------------------*/
+#define CONFIG_BOOTDELAY       3       /* autoboot after 3 seconds */
+#define CONFIG_ZERO_BOOTDELAY_CHECK    /* allow stopping of boot process */
+                                       /* even with bootdelay=0 */
+#undef CONFIG_BOOTARGS
+
+
+#define CONFIG_PREBOOT "echo;" \
+       "echo Type \"run bootcmd_net\" to load Kernel over TFTP and to "\
+               "mount root filesystem over NFS;" \
+       "echo"
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "netdev=eth0\0"                                                 \
+       "uimage=uImage-pcm030\0"                                        \
+       "oftree=oftree-pcm030.dtb\0"                                    \
+       "jffs2=root-pcm030.jffs2\0"                                     \
+       "uboot=u-boot-pcm030.bin\0"                                     \
+       "bargs_base=setenv bootargs console=ttyPSC0,$(baudrate)"        \
+               " $(mtdparts) rw\0"                                     \
+       "bargs_flash=setenv bootargs $(bootargs) root=/dev/mtdblock2"   \
+               " rootfstype=jffs2\0"                                   \
+       "bargs_nfs=setenv bootargs $(bootargs) root=/dev/nfs"           \
+               " ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask)::"   \
+               "$(netdev):off nfsroot=$(serverip):$(nfsrootfs),v3,tcp\0" \
+       "bcmd_net=run bargs_base bargs_nfs; tftpboot 0x500000 $(uimage);" \
+               " tftp 0x400000 $(oftree); bootm 0x500000 - 0x400000\0" \
+       "bcmd_flash=run bargs_base bargs_flash; bootm 0xff040000 - "    \
+               "0xfff40000\0"                                          \
+               " cp.b 0x400000 0xff040000 $(filesize)\0"               \
+       "prg_jffs2=tftp 0x400000 $(jffs2); erase 0xff200000 0xffefffff; " \
+               "cp.b 0x400000 0xff200000 $(filesize)\0"                \
+       "prg_oftree=tftp 0x400000 $(oftree); erase 0xfff40000 0xfff5ffff;" \
+               " cp.b 0x400000 0xfff40000 $(filesize)\0"               \
+       "update=tftpboot 0x400000 $(uboot);erase 0xFFF00000 0xfff3ffff;" \
+               " cp.b 0x400000 0xFFF00000 $(filesize)\0"               \
+       "unlock=yes\0"                                                  \
+       ""
+
+#define CONFIG_BOOTCOMMAND             "run bcmd_flash"
+
+/*--------------------------------------------------------------------------
+IPB Bus clocking configuration.
+ ---------------------------------------------------------------------------*/
+#define CONFIG_SYS_IPBCLK_EQUALS_XLBCLK        /* define for 133MHz speed */
+
+/*-------------------------------------------------------------------------
+ * PCI Mapping:
+ * 0x40000000 - 0x4fffffff - PCI Memory
+ * 0x50000000 - 0x50ffffff - PCI IO Space
+ * -----------------------------------------------------------------------*/
+#define CONFIG_PCI                     1
+#define CONFIG_PCI_PNP                 1
+#define CONFIG_PCI_SCAN_SHOW           1
+#define CONFIG_PCI_MEM_BUS             0x40000000
+#define CONFIG_PCI_MEM_PHYS            CONFIG_PCI_MEM_BUS
+#define CONFIG_PCI_MEM_SIZE            0x10000000
+#define CONFIG_PCI_IO_BUS              0x50000000
+#define CONFIG_PCI_IO_PHYS             CONFIG_PCI_IO_BUS
+#define CONFIG_PCI_IO_SIZE             0x01000000
+#define CONFIG_SYS_XLB_PIPELINING      1
+
+/*---------------------------------------------------------------------------
+ I2C configuration
+---------------------------------------------------------------------------*/
+#define CONFIG_HARD_I2C 1 /* I2C with hardware support */
+#define CONFIG_SYS_I2C_MODULE 2 /* Select I2C module #1 or #2 */
+#define CONFIG_SYS_I2C_SPEED 100000 /* 100 kHz */
+#define CONFIG_SYS_I2C_SLAVE 0x7F
+
+/*---------------------------------------------------------------------------
+ EEPROM CAT24WC32 configuration
+---------------------------------------------------------------------------*/
+#define CONFIG_SYS_I2C_EEPROM_ADDR     0x52    /* 1010100x */
+#define CONFIG_SYS_I2C_FACT_ADDR       0x52    /* EEPROM CAT24WC32 */
+#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2       /* Bytes of address */
+#define CONFIG_SYS_EEPROM_SIZE         2048
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3
+#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 15
+
+/*---------------------------------------------------------------------------
+RTC configuration
+---------------------------------------------------------------------------*/
+#define RTC
+#define CONFIG_RTC_PCF8563             1
+#define CONFIG_SYS_I2C_RTC_ADDR                0x51
+
+/*---------------------------------------------------------------------------
+ Flash configuration
+---------------------------------------------------------------------------*/
+
+#define CONFIG_SYS_FLASH_BASE          0xff000000
+#define CONFIG_SYS_FLASH_SIZE          0x01000000
+#define CONFIG_SYS_FLASH_BANKS_LIST    { CONFIG_SYS_FLASH_BASE }
+
+#define CONFIG_SYS_FLASH_CFI           1       /* Flash is CFI conformant */
+#define CONFIG_FLASH_CFI_DRIVER        1       /* Use the common driver */
+#define CONFIG_SYS_FLASH_EMPTY_INFO
+#define CONFIG_SYS_MAX_FLASH_SECT 260 /* max num of sects on one chip */
+#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max num of flash banks */
+                                               /* (= chip selects) */
+#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
+
+/*
+ * Use also hardware protection. This seems required, as the BDI uses
+ * hardware protection. Without this, U-Boot can't work with this sectors,
+ * as its protection is software only by default
+ */
+#define CONFIG_SYS_FLASH_PROTECTION    1
+
+/*---------------------------------------------------------------------------
+ Environment settings
+---------------------------------------------------------------------------*/
+
+/* pcm030 ships with environment is EEPROM by default */
+#define CONFIG_ENV_IS_IN_EEPROM        1
+#define CONFIG_ENV_OFFSET      0x00    /* environment starts at the */
+                                       /*beginning of the EEPROM */
+#define CONFIG_ENV_SIZE                CONFIG_SYS_EEPROM_SIZE
+
+#define CONFIG_ENV_OVERWRITE   1
+
+/*-----------------------------------------------------------------------------
+  Memory map
+-----------------------------------------------------------------------------*/
+#define CONFIG_SYS_MBAR        0xF0000000      /* MBAR has to be switched by other */
+                                       /* bootloader or debugger config */
+#define CONFIG_SYS_SDRAM_BASE          0x00000000
+#define CONFIG_SYS_DEFAULT_MBAR                0x80000000
+/* Use SRAM until RAM will be available */
+#define CONFIG_SYS_INIT_RAM_ADDR       MPC5XXX_SRAM
+#define CONFIG_SYS_INIT_RAM_END                MPC5XXX_SRAM_SIZE       /* End of used */
+                                                               /* area in DPRAM */
+#define CONFIG_SYS_GBL_DATA_SIZE       128     /* size in bytes */
+                                               /* reserved for initial data */
+#define CONFIG_SYS_GBL_DATA_OFFSET     (CONFIG_SYS_INIT_RAM_END - \
+                                               CONFIG_SYS_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_OFFSET      CONFIG_SYS_GBL_DATA_OFFSET
+
+#define CONFIG_SYS_MONITOR_BASE        TEXT_BASE
+#if (CONFIG_SYS_MONITOR_BASE < CONFIG_SYS_FLASH_BASE)
+#      define CONFIG_SYS_RAMBOOT               1
+#endif
+
+#define CONFIG_SYS_MONITOR_LEN (192 << 10) /* Reserve 192 kB for Monitor */
+#define CONFIG_SYS_MALLOC_LEN (128 << 10) /* Reserve 128 kB for malloc() */
+#define CONFIG_SYS_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */
+
+/*-----------------------------------------------------------------------------
+ Ethernet configuration
+-----------------------------------------------------------------------------*/
+#define CONFIG_MPC5xxx_FEC             1
+#define CONFIG_MPC5xxx_FEC_MII100
+#define CONFIG_PHY_ADDR                        0x01
+
+/*---------------------------------------------------------------------------
+ GPIO configuration
+ ---------------------------------------------------------------------------*/
+
+/* GPIO port configuration
+ *
+ * Pin mapping:
+ *
+ * [29:31] = 01x
+ * PSC1_0 -> AC97 SDATA out
+ * PSC1_1 -> AC97 SDTA in
+ * PSC1_2 -> AC97 SYNC out
+ * PSC1_3 -> AC97 bitclock out
+ * PSC1_4 -> AC97 reset out
+ *
+ * [25:27] = 001
+ * PSC2_0 -> CAN 1 Tx out
+ * PSC2_1 -> CAN 1 Rx in
+ * PSC2_2 -> CAN 2 Tx out
+ * PSC2_3 -> CAN 2 Rx in
+ * PSC2_4 -> GPIO (claimed for ATA reset, active low)
+ *
+ *
+ * [20:23] = 1100
+ * PSC3_0 -> UART Tx out
+ * PSC3_1 -> UART Rx in
+ * PSC3_2 -> UART RTS (in/out FIXME)
+ * PSC3_3 -> UART CTS (in/out FIXME)
+ * PSC3_4 -> LocalPlus Bus CS6 \
+ * PSC3_5 -> LocalPlus Bus CS7 / --> see [4] and [5]
+ * PSC3_6 -> dedicated SPI MOSI out (master case)
+ * PSC3_7 -> dedicated SPI MISO in (master case)
+ * PSC3_8 -> dedicated SPI SS out (master case)
+ * PSC3_9 -> dedicated SPI CLK out (master case)
+ *
+ * [18:19] = 01
+ * USB_0 -> USB OE out
+ * USB_1 -> USB Tx- out
+ * USB_2 -> USB Tx+ out
+ * USB_3 -> USB RxD (in/out FIXME)
+ * USB_4 -> USB Rx+ in
+ * USB_5 -> USB Rx- in
+ * USB_6 -> USB PortPower out
+ * USB_7 -> USB speed out
+ * USB_8 -> USB suspend (in/out FIXME)
+ * USB_9 -> USB overcurrent in
+ *
+ * [17] = 0
+ * USB differential mode
+ *
+ * [16] = 0
+ * PCI enabled
+ *
+ * [12:15] = 0101
+ * ETH_0 -> ETH Txen
+ * ETH_1 -> ETH TxD0
+ * ETH_2 -> ETH TxD1
+ * ETH_3 -> ETH TxD2
+ * ETH_4 -> ETH TxD3
+ * ETH_5 -> ETH Txerr
+ * ETH_6 -> ETH MDC
+ * ETH_7 -> ETH MDIO
+ * ETH_8 -> ETH RxDv
+ * ETH_9 -> ETH RxCLK
+ * ETH_10 -> ETH Collision
+ * ETH_11 -> ETH TxD
+ * ETH_12 -> ETH RxD0
+ * ETH_13 -> ETH RxD1
+ * ETH_14 -> ETH RxD2
+ * ETH_15 -> ETH RxD3
+ * ETH_16 -> ETH Rxerr
+ * ETH_17 -> ETH CRS
+ *
+ * [9:11] = 101
+ * PSC6_0 -> UART RxD in
+ * PSC6_1 -> UART CTS (in/out FIXME)
+ * PSC6_2 -> UART TxD out
+ * PSC6_3 -> UART RTS (in/out FIXME)
+ *
+ * [2:3/6:7] = 00/11
+ * TMR_0 -> ATA_CS0 out
+ * TMR_1 -> ATA_CS1 out
+ * TMR_2 -> GPIO
+ * TMR_3 -> GPIO
+ * TMR_4 -> GPIO
+ * TMR_5 -> GPIO
+ * TMR_6 -> GPIO
+ * TMR_7 -> GPIO
+ * I2C_0 -> I2C 1 Clock out
+ * I2C_1 -> I2C 1 IO in/out
+ * I2C_2 -> I2C 2 Clock out
+ * I2C_3 -> I2C 2 IO in/out
+ *
+ * [4] = 1
+ * PSC3_5 is used as CS7
+ *
+ * [5] = 1
+ * PSC3_4 is used as CS6
+ *
+ * [1] = 0
+ * gpio_wkup_7 is GPIO
+ *
+ * [0] = 0
+ * gpio_wkup_6 is GPIO
+ *
+ */
+#define CONFIG_SYS_GPS_PORT_CONFIG     0x0f551c12
+
+/*-----------------------------------------------------------------------------
+ Miscellaneous configurable options
+-------------------------------------------------------------------------------*/
+#define CONFIG_SYS_LONGHELP    /* undef to save memory */
+#define CONFIG_SYS_PROMPT "uboot> " /* Monitor Command Prompt */
+
+#define CONFIG_CMDLINE_EDITING 1 /* add command line history */
+
+#define CONFIG_SYS_CACHELINE_SIZE 32 /* For MPC5xxx CPUs */
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_SYS_CACHELINE_SHIFT 5 /* log base 2 of the above value */
+#endif
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
+#else
+#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
+#endif
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+                                                       /* Print Buffer Size */
+#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */
+
+#define CONFIG_SYS_MEMTEST_START 0x00100000 /* memtest works on */
+#define CONFIG_SYS_MEMTEST_END 0x00f00000 /* 1 ... 15 MB in DRAM */
+
+#define CONFIG_SYS_LOAD_ADDR 0x400000 /* default load address */
+#define CONFIG_SYS_HZ 1000 /* decrementer freq: 1 ms ticks */
+
+#define CONFIG_DISPLAY_BOARDINFO 1
+
+/*-----------------------------------------------------------------------------
+ Various low-level settings
+-----------------------------------------------------------------------------*/
+#define CONFIG_SYS_HID0_INIT           HID0_ICE | HID0_ICFI
+#define CONFIG_SYS_HID0_FINAL          HID0_ICE
+
+/* no burst access on the LPB */
+#define CONFIG_SYS_CS_BURST            0x00000000
+/* one deadcycle for the 33MHz statemachine */
+#define CONFIG_SYS_CS_DEADCYCLE                0x33333331
+/* one additional waitstate for the 33MHz statemachine */
+#define CONFIG_SYS_BOOTCS_CFG          0x0001dd00
+#define CONFIG_SYS_BOOTCS_START                CONFIG_SYS_FLASH_BASE
+#define CONFIG_SYS_BOOTCS_SIZE         CONFIG_SYS_FLASH_SIZE
+
+#define CONFIG_SYS_RESET_ADDRESS       0xff000000
+
+/*-----------------------------------------------------------------------
+ * USB stuff
+ *-----------------------------------------------------------------------
+ */
+#define CONFIG_USB_CLOCK               0x0001BBBB
+#define CONFIG_USB_CONFIG              0x00001000
+
+/*---------------------------------------------------------------------------
+ IDE/ATA stuff Supports IDE harddisk
+----------------------------------------------------------------------------*/
+
+#undef  CONFIG_IDE_8xx_PCCARD  /* Use IDE with PC Card Adapter */
+#undef CONFIG_IDE_8xx_DIRECT   /* Direct IDE not supported */
+#undef CONFIG_IDE_LED          /* LED for ide not supported */
+#define CONFIG_SYS_ATA_CS_ON_TIMER01
+#define        CONFIG_IDE_RESET 1      /* reset for ide supported */
+#define CONFIG_IDE_PREINIT
+#define CONFIG_SYS_IDE_MAXBUS 1 /* max. 1 IDE bus */
+#define CONFIG_SYS_IDE_MAXDEVICE 2 /* max. 2 drives per IDE bus */
+#define CONFIG_SYS_ATA_IDE0_OFFSET     0x0000
+#define CONFIG_SYS_ATA_BASE_ADDR       MPC5XXX_ATA
+/* Offset for data I/O                 */
+#define CONFIG_SYS_ATA_DATA_OFFSET     (0x0060)
+/* Offset for normal register accesses */
+#define CONFIG_SYS_ATA_REG_OFFSET      (CONFIG_SYS_ATA_DATA_OFFSET)
+/* Offset for alternate registers      */
+#define CONFIG_SYS_ATA_ALT_OFFSET      (0x005C)
+/* Interval between registers */
+#define CONFIG_SYS_ATA_STRIDE          4
+#define CONFIG_ATAPI                   1
+
+/* we enable IDE and FAT support, so we also need partition support */
+#define CONFIG_DOS_PARTITION 1
+
+/* USB */
+#define CONFIG_USB_OHCI
+#define CONFIG_USB_STORAGE
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT               1
+#define CONFIG_OF_BOARD_SETUP          1
+
+#define OF_CPU                         "PowerPC,5200@0"
+#define OF_TBCLK                       CONFIG_SYS_MPC5XXX_CLKIN
+#define OF_SOC                         "soc5200@f0000000"
+#define OF_STDOUT_PATH                 "/soc5200@f0000000/serial@2400"
+
+#endif /* __CONFIG_H */
index 6fa1eaf..8931b97 100644 (file)
@@ -80,8 +80,8 @@
  * SuperH Clock setting
  */
 #define CONFIG_SYS_CLK_FREQ    60000000
-#define TMU_CLK_DIVIDER                4
-#define CONFIG_SYS_HZ                  (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER)
+#define CONFIG_SYS_TMU_CLK_DIV         4
+#define CONFIG_SYS_HZ          1000
 #define        CONFIG_SYS_PLL_SETTLING_TIME    100/* in us */
 
 /*
  */
 #define CONFIG_NET_MULTI
 #define CONFIG_RTL8139
-#define _IO_BASE               0x00000000
-#define KSEG1ADDR(x)           (x)
 
 #endif /* __CONFIG_H */
index 88eb568..7738a17 100644 (file)
 
 /* Board Clock */
 #define CONFIG_SYS_CLK_FREQ    33333333
-#define TMU_CLK_DIVIDER                4
-#define CONFIG_SYS_HZ  (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER)
+#define CONFIG_SYS_TMU_CLK_DIV         4
+#define CONFIG_SYS_HZ          1000
 
 /* PCI Controller */
 #if defined(CONFIG_CMD_PCI)
 #define CONFIG_PCI_IO_BUS      0xFE200000      /* IO space base address */
 #define CONFIG_PCI_IO_PHYS     CONFIG_PCI_IO_BUS
 #define CONFIG_PCI_IO_SIZE     0x00200000      /* Size of IO window */
+#define CONFIG_PCI_SYS_PHYS CONFIG_SYS_SDRAM_BASE
+#define CONFIG_PCI_SYS_BUS  CONFIG_SYS_SDRAM_BASE
+#define CONFIG_PCI_SYS_SIZE CONFIG_SYS_SDRAM_SIZE
 #endif /* CONFIG_CMD_PCI */
 
 #if defined(CONFIG_CMD_NET)
index 8d7456e..c8c62ad 100644 (file)
 
 /* Clock */
 #define CONFIG_SYS_CLK_FREQ    66666666
-#define TMU_CLK_DIVIDER                (4)     /* 4 (default), 16, 64, 256 or 1024 */
-#define CONFIG_SYS_HZ                          (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER)
+#define CONFIG_SYS_TMU_CLK_DIV         (4)     /* 4 (default), 16, 64, 256 or 1024 */
+#define CONFIG_SYS_HZ          1000
 
 /* Ether */
 #define CONFIG_NET_MULTI 1
index 21c3f70..2c18e2f 100644 (file)
 /* Board Clock */
 /* The SCIF used external clock. system clock only used timer. */
 #define CONFIG_SYS_CLK_FREQ    50000000
-#define TMU_CLK_DIVIDER                4
-#define CONFIG_SYS_HZ                  (CONFIG_SYS_CLK_FREQ / TMU_CLK_DIVIDER)
+#define CONFIG_SYS_TMU_CLK_DIV         4
+#define CONFIG_SYS_HZ          1000
 
 #endif /* __SH7785LCR_H */
index cac58cf..018f576 100644 (file)
 /* total memory available to uboot */
 #define CONFIG_SYS_UBOOT_SIZE          (1024 * 1024)
 
+/* Put environment copies after the end of U-Boot owned RAM */
+#define CONFIG_NAND_ENV_DST    (CONFIG_SYS_UBOOT_BASE + CONFIG_SYS_UBOOT_SIZE)
+
 #ifdef CONFIG_ENABLE_MMU
 #define CONFIG_SYS_MAPPED_RAM_BASE     0xc0000000
 #define CONFIG_BOOTCOMMAND     "nand read 0xc0018000 0x60000 0x1c0000;" \
index 300271f..a9b70cc 100644 (file)
 #define CONFIG_VERSATILE       1       /* in Versatile Platform Board  */
 #define CONFIG_ARCH_VERSATILE  1       /* Specifically, a Versatile    */
 
+#ifndef CONFIG_ARCH_VERSATILE_AB       /* AB                           */
+#define CONFIG_ARCH_VERSATILE_PB       /* Versatile PB is default      */
+#endif
+
 #define CONFIG_SYS_MEMTEST_START       0x100000
 #define CONFIG_SYS_MEMTEST_END         0x10000000
 #define CONFIG_SYS_HZ                  (1000000 / 256)
 /*
  * Command line configuration.
  */
-
 #define CONFIG_CMD_BDI
 #define CONFIG_CMD_DHCP
 #define CONFIG_CMD_FLASH
  * Miscellaneous configurable options
  */
 #define CONFIG_SYS_LONGHELP    /* undef to save memory */
-#define CONFIG_SYS_PROMPT      "Versatile # "  /* Monitor Command Prompt */
 #define CONFIG_SYS_CBSIZE      256             /* Console I/O Buffer Size */
+/* Monitor Command Prompt       */
+#ifdef CONFIG_ARCH_VERSATILE_AB
+# define CONFIG_SYS_PROMPT     "VersatileAB # "
+#else
+# define CONFIG_SYS_PROMPT     "VersatilePB # "
+#endif
 /* Print Buffer Size */
 #define CONFIG_SYS_PBSIZE      \
                        (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
 #define CONFIG_NR_DRAM_BANKS   1       /* we have 1 bank of DRAM */
 #define PHYS_SDRAM_1           0x00000000      /* SDRAM Bank #1 */
 #define PHYS_SDRAM_1_SIZE      0x08000000      /* 128 MB */
-
-#define CONFIG_SYS_FLASH_BASE  0x34000000
+#define PHYS_FLASH_SIZE                0x04000000      /* 64MB */
 
 /*-----------------------------------------------------------------------
  * FLASH and environment organization
  */
-
+/*
+ * Use the CFI flash driver for ease of use
+ */
+#define CONFIG_SYS_FLASH_CFI
+#define CONFIG_FLASH_CFI_DRIVER
+#define CONFIG_ENV_IS_IN_FLASH 1
+/*
+ *     System control register
+ */
 #define VERSATILE_SYS_BASE             0x10000000
 #define VERSATILE_SYS_FLASH_OFFSET     0x4C
 #define VERSATILE_FLASHCTRL            \
 /* Enable writing to flash */
 #define VERSATILE_FLASHPROG_FLVPPEN    (1 << 0)
 
-#define CONFIG_SYS_MAX_FLASH_BANKS     1
-#define PHYS_FLASH_SIZE                        0x34000000      /* 64MB */
 /* timeout values are in ticks */
-#define CONFIG_SYS_FLASH_ERASE_TOUT    (20 * CONFIG_SYS_HZ) /* Erase Timeout */
-#define CONFIG_SYS_FLASH_WRITE_TOUT    (20 * CONFIG_SYS_HZ) /* Write Timeout */
-#define CONFIG_SYS_MAX_FLASH_SECT      (256)
+#define CONFIG_SYS_FLASH_ERASE_TOUT    (2 * CONFIG_SYS_HZ) /* Erase Timeout */
+#define CONFIG_SYS_FLASH_WRITE_TOUT    (2 * CONFIG_SYS_HZ) /* Write Timeout */
+
+/*
+ * Note that CONFIG_SYS_MAX_FLASH_SECT allows for a parameter block
+ * i.e.
+ *     the bottom "sector" (bottom boot), or top "sector"
+ *     (top boot), is a seperate erase region divided into
+ *     4 (equal) smaller sectors. This, notionally, allows
+ *     quicker erase/rewrire of the most frequently changed
+ *     area......
+ *     CONFIG_SYS_MAX_FLASH_SECT is padded up to a multiple of 4
+ */
+
+#ifdef CONFIG_ARCH_VERSATILE_AB
+#define FLASH_SECTOR_SIZE              0x00020000      /* 128 KB sectors */
+#define CONFIG_ENV_SECT_SIZE           (2 * FLASH_SECTOR_SIZE)
+#define CONFIG_SYS_MAX_FLASH_SECT      (520)
+#endif
+
+#ifdef CONFIG_ARCH_VERSATILE_PB                /* Versatile PB is default      */
+#define FLASH_SECTOR_SIZE              0x00040000      /* 256 KB sectors */
+#define CONFIG_ENV_SECT_SIZE           FLASH_SECTOR_SIZE
+#define CONFIG_SYS_MAX_FLASH_SECT      (260)
+#endif
+
+#define CONFIG_SYS_FLASH_BASE          0x34000000
+#define CONFIG_SYS_MAX_FLASH_BANKS     1
+
+#define CONFIG_SYS_MONITOR_LEN         (4 * CONFIG_ENV_SECT_SIZE)
+
+/* The ARM Boot Monitor is shipped in the lowest sector of flash */
 
-#define PHYS_FLASH_1                   (CONFIG_SYS_FLASH_BASE)
+#define FLASH_TOP                      (CONFIG_SYS_FLASH_BASE + PHYS_FLASH_SIZE)
+#define CONFIG_ENV_SIZE                        8192
+#define CONFIG_ENV_ADDR                        (FLASH_TOP - CONFIG_ENV_SECT_SIZE)
+#define CONFIG_ENV_OFFSET              (CONFIG_ENV_ADDR - CONFIG_SYS_FLASH_BASE)
+#define CONFIG_SYS_MONITOR_BASE                (CONFIG_ENV_ADDR - CONFIG_SYS_MONITOR_LEN)
 
-#define CONFIG_ENV_IS_IN_FLASH 1               /* env in flash */
-#define CONFIG_ENV_SECT_SIZE   0x00020000      /* 256 KB sectors (x2) */
-#define CONFIG_ENV_SIZE                0x10000         /* Size of Environment */
-#define CONFIG_ENV_OFFSET      0x01f00000      /* environment starts */
-#define CONFIG_ENV_ADDR                (CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET)
+#define CONFIG_SYS_FLASH_PROTECTION    /* The devices have real protection */
+#define CONFIG_SYS_FLASH_EMPTY_INFO    /* flinfo indicates empty blocks */
 
-#endif /* __CONFIG_H */
+#endif /* __CONFIG_H */
index 065a42c..23f3ca1 100644 (file)
@@ -38,22 +38,22 @@ typedef struct mtd_info nand_info_t;
 extern int nand_curr_device;
 extern nand_info_t nand_info[];
 
-static inline int nand_read(nand_info_t *info, off_t ofs, size_t *len, u_char *buf)
+static inline int nand_read(nand_info_t *info, loff_t ofs, size_t *len, u_char *buf)
 {
        return info->read(info, ofs, *len, (size_t *)len, buf);
 }
 
-static inline int nand_write(nand_info_t *info, off_t ofs, size_t *len, u_char *buf)
+static inline int nand_write(nand_info_t *info, loff_t ofs, size_t *len, u_char *buf)
 {
        return info->write(info, ofs, *len, (size_t *)len, buf);
 }
 
-static inline int nand_block_isbad(nand_info_t *info, off_t ofs)
+static inline int nand_block_isbad(nand_info_t *info, loff_t ofs)
 {
        return info->block_isbad(info, ofs);
 }
 
-static inline int nand_erase(nand_info_t *info, off_t off, size_t size)
+static inline int nand_erase(nand_info_t *info, loff_t off, size_t size)
 {
        struct erase_info instr;
 
@@ -110,9 +110,9 @@ struct nand_erase_options {
 
 typedef struct nand_erase_options nand_erase_options_t;
 
-int nand_read_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
+int nand_read_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
                       u_char *buffer);
-int nand_write_skip_bad(nand_info_t *nand, size_t offset, size_t *length,
+int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
                        u_char *buffer);
 int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts);
 
@@ -122,7 +122,7 @@ int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts);
 
 int nand_lock( nand_info_t *meminfo, int tight );
 int nand_unlock( nand_info_t *meminfo, ulong start, ulong length );
-int nand_get_lock_status(nand_info_t *meminfo, ulong offset);
+int nand_get_lock_status(nand_info_t *meminfo, loff_t offset);
 
 #ifdef CONFIG_SYS_NAND_SELECT_DEVICE
 void board_nand_select_device(struct nand_chip *nand, int chip);
index ae642b1..400c540 100644 (file)
 #define PCI_DEVICE_ID_AUREAL_VORTEX_1  0x0001
 #define PCI_DEVICE_ID_AUREAL_VORTEX_2  0x0002
 
+#define PCI_VENDOR_ID_ESDGMBH          0x12fe
+
 #define PCI_VENDOR_ID_CBOARDS          0x1307
 #define PCI_DEVICE_ID_CBOARDS_DAS1602_16 0x0001
 
index 1140561..3b99456 100644 (file)
@@ -85,7 +85,7 @@
 #define MPC83XX_SCCR_USB_DRCM_01       0x00100000
 #define MPC83XX_SCCR_USB_DRCM_10       0x00200000
 
-#if defined(CONFIG_MPC83XX)
+#if defined(CONFIG_MPC83xx)
 #define CONFIG_SYS_MPC8xxx_USB_ADDR CONFIG_SYS_MPC83xx_USB_ADDR
 #elif defined(CONFIG_MPC85xx)
 #define CONFIG_SYS_MPC8xxx_USB_ADDR CONFIG_SYS_MPC85xx_USB_ADDR
index e32ecc9..4bdf6d3 100644 (file)
@@ -40,6 +40,7 @@ COBJS-y       += board.o
 COBJS-y        += boot.o
 COBJS-y        += cache.o
 COBJS-y        += clocks.o
+COBJS-$(CONFIG_CMD_CACHE_DUMP) += cmd_cache_dump.o
 COBJS-y        += muldi3.o
 COBJS-$(CONFIG_POST) += post.o tests.o
 COBJS-y        += string.o
diff --git a/lib_blackfin/cmd_cache_dump.c b/lib_blackfin/cmd_cache_dump.c
new file mode 100644 (file)
index 0000000..de5840e
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * U-boot - cmd_cache_dump.c
+ *
+ * Copyright (c) 2007-2008 Analog Devices Inc.
+ *
+ * Licensed under the GPL-2 or later.
+ */
+
+#include <config.h>
+#include <common.h>
+#include <command.h>
+
+#include <asm/blackfin.h>
+#include <asm/mach-common/bits/mpu.h>
+
+static int check_limit(const char *type, size_t start_limit, size_t end_limit, size_t start, size_t end)
+{
+       if (start >= start_limit && start <= end_limit && \
+           end <= end_limit && end >= start_limit && \
+           start <= end)
+               return 0;
+
+       printf("%s limit violation: %zu <= (user:%zu) <= (user:%zu) <= %zu\n",
+               type, start_limit, start, end, end_limit);
+       return 1;
+}
+
+int do_icache_dump(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       int cache_status = icache_status();
+
+       if (cache_status)
+               icache_disable();
+
+       uint32_t cmd_base, tag, cache_upper, cache_lower;
+
+       size_t way, way_start = 0, way_end = 3;
+       size_t sbnk, sbnk_start = 0, sbnk_end = 3;
+       size_t set, set_start = 0, set_end = 31;
+       size_t dw;
+
+       if (argc > 1) {
+               way_start = way_end = simple_strtoul(argv[1], NULL, 10);
+               if (argc > 2) {
+                       sbnk_start = sbnk_end = simple_strtoul(argv[2], NULL, 10);
+                       if (argc > 3)
+                               set_start = set_end = simple_strtoul(argv[3], NULL, 10);
+               }
+       }
+
+       if (check_limit("way", 0, 3, way_start, way_end) || \
+           check_limit("subbank", 0, 3, sbnk_start, sbnk_end) || \
+           check_limit("set", 0, 31, set_start, set_end))
+               return 1;
+
+       puts("Way:Subbank:Set: [valid-tag lower upper] {invalid-tag lower upper}...\n");
+
+       for (way = way_start; way <= way_end; ++way) {
+               for (sbnk = sbnk_start; sbnk <= sbnk_end; ++sbnk) {
+                       for (set = set_start; set <= set_end; ++set) {
+                               printf("%zu:%zu:%2zu: ", way, sbnk, set);
+                               for (dw = 0; dw < 4; ++dw) {
+                                       if (ctrlc())
+                                               return 1;
+
+                                       cmd_base = \
+                                               (way  << 26) | \
+                                               (sbnk << 16) | \
+                                               (set  <<  5) | \
+                                               (dw   <<  3);
+
+                                       /* first read the tag */
+                                       bfin_write_ITEST_COMMAND(cmd_base | 0x0);
+                                       SSYNC();
+                                       tag = bfin_read_ITEST_DATA0();
+                                       printf("%c%08x ", (tag & 0x1 ? ' ' : '{'), tag);
+
+                                       /* grab the data at this loc */
+                                       bfin_write_ITEST_COMMAND(cmd_base | 0x4);
+                                       SSYNC();
+                                       cache_lower = bfin_read_ITEST_DATA0();
+                                       cache_upper = bfin_read_ITEST_DATA1();
+                                       printf("%08x %08x%c ", cache_lower, cache_upper, (tag & 0x1 ? ' ' : '}'));
+                               }
+                               puts("\n");
+                       }
+               }
+       }
+
+       if (cache_status)
+               icache_enable();
+
+       return 0;
+}
+
+U_BOOT_CMD(icache_dump, 4, 0, do_icache_dump,
+       "icache_dump - dump current instruction cache\n",
+       "[way] [subbank] [set]");
+
+int do_dcache_dump(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       u32 way, bank, subbank, set;
+       u32 status, addr;
+       u32 dmem_ctl = bfin_read_DMEM_CONTROL();
+
+       for (bank = 0; bank < 2; ++bank) {
+               if (!(dmem_ctl & (1 << (DMC1_P - bank))))
+                       continue;
+
+               for (way = 0; way < 2; ++way)
+                       for (subbank = 0; subbank < 4; ++subbank) {
+                               printf("%i:%i:%i:\t", bank, way, subbank);
+                               for (set = 0; set < 64; ++set) {
+
+                                       if (ctrlc())
+                                               return 1;
+
+                                       /* retrieve a cache tag */
+                                       bfin_write_DTEST_COMMAND(
+                                               way << 26 |
+                                               bank << 23 |
+                                               subbank << 16 |
+                                               set << 5
+                                       );
+                                       CSYNC();
+                                       status = bfin_read_DTEST_DATA0();
+
+                                       /* construct the address using the tag */
+                                       addr = (status & 0xFFFFC800) | (subbank << 12) | (set << 5);
+
+                                       /* show it */
+                                       if (set && !(set % 4))
+                                               puts("\n\t");
+                                       printf("%c%08x%c%08x%c ", (status & 0x1 ? '[' : '{'), status, (status & 0x2 ? 'd' : ' '), addr, (status & 0x1 ? ']' : '}'));
+                               }
+                               puts("\n");
+                       }
+       }
+
+       return 0;
+}
+
+U_BOOT_CMD(dcache_dump, 4, 0, do_dcache_dump,
+       "dcache_dump - dump current data cache\n",
+       "[bank] [way] [subbank] [set]");
index 8fccce3..52dbcd0 100644 (file)
@@ -1,4 +1,7 @@
 /*
+ * (C) Copyright 2009
+ * Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
+ *
  * (C) Copyright 2007-2008
  * Nobobuhiro Iwamatsu <iwamatsu@nigauri.org>
  *
  */
 
 #include <common.h>
+#include <div64.h>
 #include <asm/processor.h>
+#include <asm/clk.h>
 #include <asm/io.h>
 
 #define TMU_MAX_COUNTER (~0UL)
-static int clk_adj = 1;
+
+static ulong timer_freq;
+
+static inline unsigned long long tick_to_time(unsigned long long tick)
+{
+       tick *= CONFIG_SYS_HZ;
+       do_div(tick, timer_freq);
+
+       return tick;
+}
+
+static inline unsigned long long usec_to_tick(unsigned long long usec)
+{
+       usec *= timer_freq;
+       do_div(usec, 1000000);
+
+       return usec;
+}
 
 static void tmu_timer_start (unsigned int timer)
 {
@@ -47,10 +69,10 @@ static void tmu_timer_stop (unsigned int timer)
 
 int timer_init (void)
 {
-       /* Divide clock by TMU_CLK_DIVIDER */
+       /* Divide clock by CONFIG_SYS_TMU_CLK_DIV */
        u16 bit = 0;
 
-       switch (TMU_CLK_DIVIDER) {
+       switch (CONFIG_SYS_TMU_CLK_DIV) {
        case 1024:
                bit = 4;
                break;
@@ -65,15 +87,12 @@ int timer_init (void)
                break;
        case 4:
        default:
-               bit = 0;
                break;
        }
        writew(readw(TCR0) | bit, TCR0);
 
-       /* Clock adjustment calc */
-       clk_adj = (int)(1.0 / ((1.0 / CONFIG_SYS_HZ) * 1000000));
-       if (clk_adj < 1)
-               clk_adj = 1;
+       /* Calc clock rate */
+       timer_freq = get_tmu0_clk_rate() >> ((bit + 1) * 2);
 
        tmu_timer_stop(0);
        tmu_timer_start(0);
@@ -86,24 +105,22 @@ unsigned long long get_ticks (void)
        return 0 - readl(TCNT0);
 }
 
-static unsigned long get_usec (void)
-{
-       return (0 - readl(TCNT0));
-}
-
 void udelay (unsigned long usec)
 {
-       unsigned int start = get_usec();
-       unsigned int end = start + (usec * clk_adj);
+       unsigned long long tmp;
+       ulong tmo;
+
+       tmo = usec_to_tick(usec);
+       tmp = get_ticks() + tmo;        /* get current timestamp */
 
-       while (get_usec() < end)
-               continue;
+       while (get_ticks() < tmp)       /* loop till event */
+                /*NOP*/;
 }
 
 unsigned long get_timer (unsigned long base)
 {
        /* return msec */
-       return ((get_usec() / clk_adj) / 1000) - base;
+       return tick_to_time(get_ticks()) - base;
 }
 
 void set_timer (unsigned long t)
@@ -120,5 +137,5 @@ void reset_timer (void)
 
 unsigned long get_tbclk (void)
 {
-       return CONFIG_SYS_HZ;
+       return timer_freq;
 }
index c7eadad..b9fd6f5 100644 (file)
@@ -47,11 +47,13 @@ static int nand_command(struct mtd_info *mtd, int block, int page, int offs, u8
        /* Set ALE and clear CLE to start address cycle */
        /* Column address */
        this->cmd_ctrl(mtd, offs, NAND_CTRL_ALE | NAND_CTRL_CHANGE);
-       this->cmd_ctrl(mtd, page_addr & 0xff, 0); /* A[16:9] */
-       this->cmd_ctrl(mtd, (page_addr >> 8) & 0xff, 0); /* A[24:17] */
+       this->cmd_ctrl(mtd, page_addr & 0xff, NAND_CTRL_ALE); /* A[16:9] */
+       this->cmd_ctrl(mtd, (page_addr >> 8) & 0xff,
+                      NAND_CTRL_ALE); /* A[24:17] */
 #ifdef CONFIG_SYS_NAND_4_ADDR_CYCLE
        /* One more address cycle for devices > 32MiB */
-       this->cmd_ctrl(mtd, (page_addr >> 16) & 0x0f, 0); /* A[28:25] */
+       this->cmd_ctrl(mtd, (page_addr >> 16) & 0x0f,
+                      NAND_CTRL_ALE); /* A[28:25] */
 #endif
        /* Latch in address */
        this->cmd_ctrl(mtd, NAND_CMD_NONE, NAND_NCE | NAND_CTRL_CHANGE);
@@ -94,13 +96,15 @@ static int nand_command(struct mtd_info *mtd, int block, int page, int offs, u8
        /* Column address */
        this->cmd_ctrl(mtd, offs & 0xff,
                       NAND_CTRL_ALE | NAND_CTRL_CHANGE); /* A[7:0] */
-       this->cmd_ctrl(mtd, (offs >> 8) & 0xff, 0); /* A[11:9] */
+       this->cmd_ctrl(mtd, (offs >> 8) & 0xff, NAND_CTRL_ALE); /* A[11:9] */
        /* Row address */
-       this->cmd_ctrl(mtd, (page_addr & 0xff), 0); /* A[19:12] */
-       this->cmd_ctrl(mtd, ((page_addr >> 8) & 0xff), 0); /* A[27:20] */
+       this->cmd_ctrl(mtd, (page_addr & 0xff), NAND_CTRL_ALE); /* A[19:12] */
+       this->cmd_ctrl(mtd, ((page_addr >> 8) & 0xff),
+                      NAND_CTRL_ALE); /* A[27:20] */
 #ifdef CONFIG_SYS_NAND_5_ADDR_CYCLE
        /* One more address cycle for devices > 128MiB */
-       this->cmd_ctrl(mtd, (page_addr >> 16) & 0x0f, 0); /* A[31:28] */
+       this->cmd_ctrl(mtd, (page_addr >> 16) & 0x0f,
+                      NAND_CTRL_ALE); /* A[31:28] */
 #endif
        /* Latch in address */
        this->cmd_ctrl(mtd, NAND_CMD_READSTART,
@@ -246,6 +250,16 @@ void nand_boot(void)
        ret = nand_load(&nand_info, CONFIG_SYS_NAND_U_BOOT_OFFS, CONFIG_SYS_NAND_U_BOOT_SIZE,
                        (uchar *)CONFIG_SYS_NAND_U_BOOT_DST);
 
+#ifdef CONFIG_NAND_ENV_DST
+       nand_load(&nand_info, CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE,
+                 (uchar *)CONFIG_NAND_ENV_DST);
+
+#ifdef CONFIG_ENV_OFFSET_REDUND
+       nand_load(&nand_info, CONFIG_ENV_OFFSET_REDUND, CONFIG_ENV_SIZE,
+                 (uchar *)CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE);
+#endif
+#endif
+
        if (nand_chip.select_chip)
                nand_chip.select_chip(&nand_info, -1);
 
index 49d50f7..407e076 100644 (file)
@@ -22,3 +22,6 @@
 #
 
 PLATFORM_CPPFLAGS += -DCONFIG_SH -D__SH__
+PLATFORM_LDFLAGS += -e $(TEXT_BASE) --defsym reloc_dst=$(TEXT_BASE)
+
+LDSCRIPT := $(SRCTREE)/cpu/$(CPU)/u-boot.lds