Merge with /home/wd/git/u-boot/custodian/u-boot-74xx-7xx
authorWolfgang Denk <wd@denx.de>
Wed, 18 Apr 2007 15:00:09 +0000 (17:00 +0200)
committerWolfgang Denk <wd@denx.de>
Wed, 18 Apr 2007 15:00:09 +0000 (17:00 +0200)
1  2 
MAKEALL
Makefile
README
cpu/ppc4xx/44x_spd_ddr2.c
cpu/ppc4xx/start.S
drivers/Makefile
include/asm-ppc/global_data.h
net/eth.c

diff --combined MAKEALL
index 47f20307064820cb265af111667cfed4a66bed85,1772ae3579b1af4336029fb21e50084448e1bcf0..0f0ec296f26b050c01266681958de8f482d0c92e
+++ b/MAKEALL
@@@ -75,22 -75,22 +75,22 @@@ LIST_8xx=" 
  #########################################################################
  
  LIST_4xx="    \
 -      ADCIOP          alpr            AP1000          AR405           \
 -      ASH405          bamboo          bubinga         CANBT           \
 -      CMS700          CPCI2DP         CPCI405         CPCI4052        \
 -      CPCI405AB       CPCI405DT       CPCI440         CPCIISER4       \
 -      CRAYL1          csb272          csb472          DASA_SIM        \
 -      DP405           DU405           ebony           ERIC            \
 -      EXBITGEN        G2000           HH405           HUB405          \
 -      JSE             KAREF           katmai          luan            \
 -      METROBOX        MIP405          MIP405T         ML2             \
 -      ml300           ocotea          OCRTC           ORSG            \
 -      p3p440          PCI405          pcs440ep        PIP405          \
 -      PLU405          PMC405          PPChameleonEVB  sbc405          \
 -      sc3             sequoia         sequoia_nand    taishan         \
 -      VOH405          VOM405          W7OLMC          W7OLMG          \
 -      walnut          WUH405          XPEDITE1K       yellowstone     \
 -      yosemite        yucca                                           \
 +      acadia          ADCIOP          alpr            AP1000          \
 +      AR405           ASH405          bamboo          bubinga         \
 +      CANBT           CMS700          CPCI2DP         CPCI405         \
 +      CPCI4052        CPCI405AB       CPCI405DT       CPCI440         \
 +      CPCIISER4       CRAYL1          csb272          csb472          \
 +      DASA_SIM        DP405           DU405           ebony           \
 +      ERIC            EXBITGEN        G2000           HH405           \
 +      HUB405          JSE             KAREF           katmai          \
 +      luan            METROBOX        MIP405          MIP405T         \
 +      ML2             ml300           ocotea          OCRTC           \
 +      ORSG            p3p440          PCI405          pcs440ep        \
 +      PIP405          PLU405          PMC405          PPChameleonEVB  \
 +      sbc405          sc3             sequoia         sequoia_nand    \
 +      taishan         VOH405          VOM405          W7OLMC          \
 +      W7OLMG          walnut          WUH405          XPEDITE1K       \
 +      yellowstone     yosemite        yucca                           \
  "
  
  #########################################################################
@@@ -132,8 -132,7 +132,8 @@@ LIST_8260="        
  #########################################################################
  
  LIST_83xx="   \
 -      TQM834x         MPC8349EMDS     MPC8349ITX      MPC8360EMDS     \
 +      MPC832XEMDS     MPC8349EMDS     MPC8349ITX      MPC8349ITXGP    \
 +      MPC8360EMDS     sbc8349         TQM834x                         \
  "
  
  
@@@ -155,6 -154,7 +155,7 @@@ LIST_85xx="        
  LIST_74xx="   \
        DB64360         DB64460         EVB64260        P3G4            \
        p3m7448         PCIPPC2         PCIPPC6         ZUMA            \
+       mpc7448hpc2
  "
  
  LIST_7xx="    \
@@@ -293,7 -293,7 +294,7 @@@ LIST_nios2="       
  #########################################################################
  
  LIST_microblaze="     \
 -      suzaku
 +      suzaku          ml401           xupv2p
  "
  
  #########################################################################
@@@ -312,14 -312,6 +313,14 @@@ LIST_coldfire="  
  
  LIST_avr32="atstk1002"
  
 +#########################################################################
 +## Blackfin Systems
 +#########################################################################
 +
 +LIST_blackfin=" \
 +      bf533-ezkit     bf533-stamp     bf537-stamp     bf561-ezkit     \
 +"
 +
  #-----------------------------------------------------------------------
  
  #----- for now, just run PPC by default -----
@@@ -346,15 -338,14 +347,15 @@@ build_target() 
  for arg in $@
  do
        case "$arg" in
 -      ppc|5xx|5xxx|8xx|8220|824x|8260|83xx|85xx|4xx|7xx|74xx| \
 -      arm|SA|ARM7|ARM9|ARM10|ARM11|pxa|ixp| \
 +      arm|SA|ARM7|ARM9|ARM10|ARM11|ixp|pxa| \
 +      avr32| \
 +      blackfin| \
 +      coldfire| \
        microblaze| \
        mips|mips_el| \
        nios|nios2| \
 -      x86|I486| \
 -      coldfire| \
 -      avr32)
 +      ppc|5xx|5xxx|8xx|8220|824x|8260|83xx|85xx|4xx|7xx|74xx| \
 +      x86|I486)
                        for target in `eval echo '$LIST_'${arg}`
                        do
                                build_target ${target}
diff --combined Makefile
index e45c9179d21d1d68f82a42a95666adbb6dc056d7,86b1006b95eaeb95efe24ea534049f281999e1bc..9a27bc2f86432d57479dfb12763d96e6c9f589d2
+++ b/Makefile
@@@ -146,10 -146,10 +146,10 @@@ ifeq ($(ARCH),microblaze
  CROSS_COMPILE = mb-
  endif
  ifeq ($(ARCH),blackfin)
 -CROSS_COMPILE = bfin-elf-
 +CROSS_COMPILE = bfin-uclinux-
  endif
  ifeq ($(ARCH),avr32)
 -CROSS_COMPILE = avr32-
 +CROSS_COMPILE = avr32-linux-
  endif
  endif
  endif
@@@ -178,15 -178,7 +178,15 @@@ OBJS += cpu/$(CPU)/resetvec.
  endif
  ifeq ($(CPU),bf533)
  OBJS += cpu/$(CPU)/start1.o   cpu/$(CPU)/interrupt.o  cpu/$(CPU)/cache.o
 -OBJS += cpu/$(CPU)/cplbhdlr.o cpu/$(CPU)/cplbmgr.o    cpu/$(CPU)/flush.o
 +OBJS += cpu/$(CPU)/flush.o    cpu/$(CPU)/init_sdram.o
 +endif
 +ifeq ($(CPU),bf537)
 +OBJS += cpu/$(CPU)/start1.o   cpu/$(CPU)/interrupt.o  cpu/$(CPU)/cache.o
 +OBJS += cpu/$(CPU)/flush.o    cpu/$(CPU)/init_sdram.o
 +endif
 +ifeq ($(CPU),bf561)
 +OBJS += cpu/$(CPU)/start1.o   cpu/$(CPU)/interrupt.o  cpu/$(CPU)/cache.o
 +OBJS += cpu/$(CPU)/flush.o    cpu/$(CPU)/init_sdram.o
  endif
  
  OBJS := $(addprefix $(obj),$(OBJS))
@@@ -420,9 -412,6 +420,9 @@@ icecube_5100_config:                       unconfi
                }
        @$(MKCONFIG) -a IceCube ppc mpc5xxx icecube
  
 +jupiter_config:         unconfig
 +      @$(MKCONFIG) jupiter ppc mpc5xxx jupiter
 +
  v38b_config: unconfig
        @./mkconfig -a v38b ppc mpc5xxx v38b
  
@@@ -430,7 -419,6 +430,7 @@@ inka4x0_config:    unconfi
        @$(MKCONFIG) inka4x0 ppc mpc5xxx inka4x0
  
  lite5200b_config      \
 +lite5200b_PM_config   \
  lite5200b_LOWBOOT_config:     unconfig
        @mkdir -p $(obj)include
        @mkdir -p $(obj)board/icecube
        @ echo "... DDR memory revision"
        @ echo "#define CONFIG_MPC5200"         >>$(obj)include/config.h
        @ echo "#define CONFIG_LITE5200B"       >>$(obj)include/config.h
 +      @[ -z "$(findstring _PM_,$@)" ] || \
 +              { echo "#define CONFIG_LITE5200B_PM"    >>$(obj)include/config.h ; \
 +                echo "... with power management (low-power mode) support" ; \
 +              }
        @[ -z "$(findstring LOWBOOT_,$@)" ] || \
                { echo "TEXT_BASE = 0xFF000000" >$(obj)board/icecube/config.tmp ; \
                  echo "... with LOWBOOT configuration" ; \
@@@ -1011,9 -995,6 +1011,9 @@@ wtk_config:      unconfi
  #########################################################################
  xtract_4xx = $(subst _25,,$(subst _33,,$(subst _BA,,$(subst _ME,,$(subst _HI,,$(subst _config,,$1))))))
  
 +acadia_config:        unconfig
 +      @$(MKCONFIG) $(@:_config=) ppc ppc4xx acadia amcc
 +
  ADCIOP_config:        unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx adciop esd
  
@@@ -1195,31 -1176,44 +1195,31 @@@ PPChameleonEVB_HI_33_config: unconfi
                }
        @$(MKCONFIG) -a $(call xtract_4xx,$@) ppc ppc4xx PPChameleonEVB dave
  
 -rainier_config:       unconfig
 -      @mkdir -p $(obj)include
 -      @echo "#define CONFIG_RAINIER" > $(obj)include/config.h
 -      @$(MKCONFIG) -n $@ -a sequoia ppc ppc4xx sequoia amcc
 -
 -rainier_nand_config:  unconfig
 -      @mkdir -p $(obj)include
 -      @mkdir -p $(obj)nand_spl
 -      @mkdir -p $(obj)board/amcc/sequoia
 -      @echo "#define CONFIG_RAINIER" > $(obj)include/config.h
 -      @echo "#define CONFIG_NAND_U_BOOT" >> $(obj)include/config.h
 -      @echo "Compile NAND boot image for sequoia"
 -      @$(MKCONFIG) -n $@ -a sequoia ppc ppc4xx sequoia amcc
 -      @echo "TEXT_BASE = 0x01000000" > $(obj)board/amcc/sequoia/config.tmp
 -      @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
 -
  sbc405_config:        unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx sbc405
  
 -sequoia_config:       unconfig
 -      @$(MKCONFIG) $(@:_config=) ppc ppc4xx sequoia amcc
 +sequoia_config \
 +rainier_config: unconfig
 +      @mkdir -p $(obj)include
 +      @echo "#define CONFIG_$$(echo $(subst ,,$(@:_config=)) | \
 +              tr '[:lower:]' '[:upper:]')" >$(obj)include/config.h
 +      @$(MKCONFIG) -n $@ -a sequoia ppc ppc4xx sequoia amcc
  
 -sequoia_nand_config:  unconfig
 +sequoia_nand_config \
 +rainier_nand_config: unconfig
        @mkdir -p $(obj)include
        @mkdir -p $(obj)nand_spl
        @mkdir -p $(obj)board/amcc/sequoia
        @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
 -      @echo "Compile NAND boot image for sequoia"
 -      @$(MKCONFIG) -a sequoia ppc ppc4xx sequoia amcc
 +      @echo "#define CONFIG_$$(echo $(subst ,,$(@:_config=)) | \
 +              tr '[:lower:]' '[:upper:]')" >> $(obj)include/config.h
 +      @$(MKCONFIG) -n $@ -a sequoia ppc ppc4xx sequoia amcc
        @echo "TEXT_BASE = 0x01000000" > $(obj)board/amcc/sequoia/config.tmp
        @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
  
  sc3_config:unconfig
        @./mkconfig $(@:_config=) ppc ppc4xx sc3
  
 -sycamore_config:      unconfig
 -      @$(MKCONFIG) -n $@ -a walnut ppc ppc4xx walnut amcc
 -
  taishan_config:       unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx taishan amcc
  
@@@ -1236,10 -1230,8 +1236,10 @@@ W7OLMC_config 
  W7OLMG_config: unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx w7o
  
 -walnut_config: unconfig
 -      @$(MKCONFIG) $(@:_config=) ppc ppc4xx walnut amcc
 +# Walnut & Sycamore images are identical (recognized via PVR)
 +walnut_config \
 +sycamore_config: unconfig
 +      @$(MKCONFIG) -n $@ -a walnut ppc ppc4xx walnut amcc
  
  WUH405_config:        unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx wuh405 esd
  XPEDITE1K_config:     unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx xpedite1k
  
 -yosemite_config:      unconfig
 -      @$(MKCONFIG) $(@:_config=) ppc ppc4xx yosemite amcc
 -
 -yellowstone_config:   unconfig
 +yosemite_config \
 +yellowstone_config: unconfig
        @mkdir -p $(obj)include
 -      @echo "#define CONFIG_YELLOWSTONE" > $(obj)include/config.h
 +      @echo "#define CONFIG_$$(echo $(subst ,,$(@:_config=)) | \
 +              tr '[:lower:]' '[:upper:]')" >$(obj)include/config.h
        @$(MKCONFIG) -n $@ -a yosemite ppc ppc4xx yosemite amcc
  
  yucca_config: unconfig
@@@ -1623,47 -1616,12 +1623,47 @@@ r5200_config :               unconfi
  ## MPC83xx Systems
  #########################################################################
  
 -TQM834x_config:       unconfig
 -      @$(MKCONFIG) $(@:_config=) ppc mpc83xx tqm834x
 +MPC832XEMDS_config \
 +MPC832XEMDS_HOST_33_config \
 +MPC832XEMDS_HOST_66_config \
 +MPC832XEMDS_SLAVE_config:     unconfig
 +      @echo "" >include/config.h ; \
 +      if [ "$(findstring _HOST_,$@)" ] ; then \
 +              echo -n "... PCI HOST " ; \
 +              echo "#define CONFIG_PCI" >>include/config.h ; \
 +      fi ; \
 +      if [ "$(findstring _SLAVE_,$@)" ] ; then \
 +              echo "...PCI SLAVE 66M"  ; \
 +              echo "#define CONFIG_PCI" >>include/config.h ; \
 +              echo "#define CONFIG_PCISLAVE" >>include/config.h ; \
 +      fi ; \
 +      if [ "$(findstring _33_,$@)" ] ; then \
 +              echo -n "...33M ..." ; \
 +              echo "#define PCI_33M" >>include/config.h ; \
 +      fi ; \
 +      if [ "$(findstring _66_,$@)" ] ; then \
 +              echo -n "...66M..." ; \
 +              echo "#define PCI_66M" >>include/config.h ; \
 +      fi ;
 +      @$(MKCONFIG) -a MPC832XEMDS ppc mpc83xx mpc832xemds
  
  MPC8349EMDS_config:   unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc83xx mpc8349emds
  
 +MPC8349ITX_config \
 +MPC8349ITX_LOWBOOT_config \
 +MPC8349ITXGP_config:  unconfig
 +      @mkdir -p $(obj)include
 +      @mkdir -p $(obj)board/mpc8349itx
 +      @echo "#define CONFIG_$(subst _LOWBOOT,,$(@:_config=))" >> $(obj)include/config.h
 +      @if [ "$(findstring GP,$@)" ] ; then \
 +              echo "TEXT_BASE = 0xFE000000" >$(obj)board/mpc8349itx/config.tmp ; \
 +      fi
 +      @if [ "$(findstring LOWBOOT,$@)" ] ; then \
 +              echo "TEXT_BASE = 0xFE000000" >$(obj)board/mpc8349itx/config.tmp ; \
 +      fi
 +      @$(MKCONFIG) -a -n $(@:_config=) MPC8349ITX ppc mpc83xx mpc8349itx
 +
  MPC8360EMDS_config \
  MPC8360EMDS_HOST_33_config \
  MPC8360EMDS_HOST_66_config \
@@@ -1688,12 -1646,8 +1688,12 @@@ MPC8360EMDS_SLAVE_config:     unconfi
        fi ;
        @$(MKCONFIG) -a MPC8360EMDS ppc mpc83xx mpc8360emds
  
 -MPC8349ITX_config:    unconfig
 -      @$(MKCONFIG) $(@:_config=) ppc mpc83xx mpc8349itx
 +sbc8349_config:               unconfig
 +      @$(MKCONFIG) $(@:_config=) ppc mpc83xx sbc8349
 +
 +TQM834x_config:       unconfig
 +      @$(MKCONFIG) $(@:_config=) ppc mpc83xx tqm834x
 +
  
  #########################################################################
  ## MPC85xx Systems
@@@ -1819,6 -1773,9 +1819,9 @@@ EVB64260_config 
  EVB64260_750CX_config:        unconfig
        @$(MKCONFIG) EVB64260 ppc 74xx_7xx evb64260
  
+ mpc7448hpc2_config:  unconfig
+       @$(MKCONFIG) $(@:_config=) ppc 74xx_7xx mpc7448hpc2
  P3G4_config: unconfig
        @$(MKCONFIG) $(@:_config=) ppc 74xx_7xx evb64260
  
@@@ -2351,30 -2308,17 +2354,30 @@@ suzaku_config:       unconfi
        @echo "#define CONFIG_SUZAKU 1" >> $(obj)include/config.h
        @$(MKCONFIG) -a $(@:_config=) microblaze microblaze suzaku AtmarkTechno
  
 +ml401_config: unconfig
 +      @ >include/config.h
 +      @echo "#define CONFIG_ML401 1" >> include/config.h
 +      @./mkconfig -a $(@:_config=) microblaze microblaze ml401 xilinx
 +
 +xupv2p_config:        unconfig
 +      @ >include/config.h
 +      @echo "#define CONFIG_XUPV2P 1" >> include/config.h
 +      @./mkconfig -a $(@:_config=) microblaze microblaze xupv2p xilinx
 +
  #########################################################################
  ## Blackfin
  #########################################################################
 -ezkit533_config       :       unconfig
 -      @$(MKCONFIG) $(@:_config=) blackfin bf533 ezkit533
 +bf533-ezkit_config:   unconfig
 +      @$(MKCONFIG) $(@:_config=) blackfin bf533 bf533-ezkit
 +
 +bf533-stamp_config:   unconfig
 +      @$(MKCONFIG) $(@:_config=) blackfin bf533 bf533-stamp
  
 -stamp_config  :       unconfig
 -      @$(MKCONFIG) $(@:_config=) blackfin bf53stamp
 +bf537-stamp_config:   unconfig
 +      @$(MKCONFIG) $(@:_config=) blackfin bf537 bf537-stamp
  
 -dspstamp_config       :       unconfig
 -      @$(MKCONFIG) $(@:_config=) blackfin bf533 dsp_stamp
 +bf561-ezkit_config:   unconfig
 +      @$(MKCONFIG) $(@:_config=) blackfin bf561 bf561-ezkit
  
  #========================================================================
  # AVR32
@@@ -2411,8 -2355,6 +2414,8 @@@ clean
        rm -f $(obj)board/netstar/*.srec $(obj)board/netstar/*.bin
        rm -f $(obj)board/trab/trab_fkt $(obj)board/voiceblue/eeprom
        rm -f $(obj)board/integratorap/u-boot.lds $(obj)board/integratorcp/u-boot.lds
 +      rm -f $(obj)board/bf533-ezkit/u-boot.lds $(obj)board/bf533-stamp/u-boot.lds
 +      rm -f $(obj)board/bf537-stamp/u-boot.lds $(obj)board/bf561-ezkit/u-boot.lds
        rm -f $(obj)include/bmp_logo.h
        rm -f $(obj)nand_spl/u-boot-spl $(obj)nand_spl/u-boot-spl.map
  
diff --combined README
index 87d6d10717adc96522d1f040b616b827e4bdef55,0ba9f5b9f12e363b1780f592442300854da40a1d..90ef2c2eba66be9d011c84f34ca44cc637b76095
--- 1/README
--- 2/README
+++ b/README
@@@ -164,7 -164,6 +164,7 @@@ Directory Hierarchy
  - lib_mips    Files generic to MIPS    architecture
  - lib_nios    Files generic to NIOS    architecture
  - lib_ppc     Files generic to PowerPC architecture
 +- libfdt      Library files to support flattened device trees
  - net         Networking code
  - post                Power On Self Test
  - rtc         Real Time Clock drivers
@@@ -431,23 -430,12 +431,23 @@@ The following options need to be config
                expect it to be in bytes, others in MB.
                Define CONFIG_MEMSIZE_IN_BYTES to make it in bytes.
  
 -              CONFIG_OF_FLAT_TREE
 +              CONFIG_OF_LIBFDT / CONFIG_OF_FLAT_TREE
  
                New kernel versions are expecting firmware settings to be
 -              passed using flat open firmware trees.
 -              The environment variable "disable_of", when set, disables this
 -              functionality.
 +              passed using flattened device trees (based on open firmware
 +              concepts).
 +
 +              CONFIG_OF_LIBFDT
 +               * New libfdt-based support
 +               * Adds the "fdt" command
 +               * The bootm command does _not_ modify the fdt
 +
 +              CONFIG_OF_FLAT_TREE
 +               * Deprecated, see CONFIG_OF_LIBFDT
 +               * Original ft_build.c-based support
 +               * Automatically modifies the dft as part of the bootm command
 +               * The environment variable "disable_of", when set,
 +                   disables this functionality.
  
                CONFIG_OF_FLAT_TREE_MAX_SIZE
  
  
                CONFIG_OF_HAS_BD_T
  
 -              The resulting flat device tree will have a copy of the bd_t.
 -              Space should be pre-allocated in the dts for the bd_t.
 +               * CONFIG_OF_LIBFDT - enables the "fdt bd_t" command
 +               * CONFIG_OF_FLAT_TREE - The resulting flat device tree
 +                   will have a copy of the bd_t.  Space should be
 +                   pre-allocated in the dts for the bd_t.
  
                CONFIG_OF_HAS_UBOOT_ENV
  
 -              The resulting flat device tree will have a copy of u-boot's
 -              environment variables
 +               * CONFIG_OF_LIBFDT - enables the "fdt bd_t" command
 +               * CONFIG_OF_FLAT_TREE - The resulting flat device tree
 +                   will have a copy of u-boot's environment variables
  
                CONFIG_OF_BOARD_SETUP
  
  
                #define CONFIG_COMMANDS (CFG_CMD_ALL & ~CFG_CMD_NET)
  
 +      Other Commands:
 +              fdt (flattened device tree) command: CONFIG_OF_LIBFDT
  
        Note:   Don't enable the "icache" and "dcache" commands
                (configuration option CFG_CMD_CACHE) unless you know
@@@ -2398,17 -2381,17 +2398,17 @@@ configurations; the following names ar
        csb272_config           lwmon_config            sbc8260_config
        CU824_config            MBX860T_config          sbc8560_33_config
        DUET_ADS_config         MBX_config              sbc8560_66_config
-       EBONY_config            MPC8260ADS_config       SM850_config
-       ELPT860_config          MPC8540ADS_config       SPD823TS_config
-       ESTEEM192E_config       MPC8540EVAL_config      stxgp3_config
-       ETX094_config           MPC8560ADS_config       SXNI855T_config
-       FADS823_config          NETVIA_config           TQM823L_config
-       FADS850SAR_config       omap1510inn_config      TQM850L_config
-       FADS860T_config         omap1610h2_config       TQM855L_config
-       FPS850L_config          omap1610inn_config      TQM860L_config
-                               omap5912osk_config      walnut_config
-                               omap2420h4_config       Yukon8220_config
-                                                       ZPC1900_config
+       EBONY_config            mpc7448hpc2_config      SM850_config
+       ELPT860_config          MPC8260ADS_config       SPD823TS_config
+       ESTEEM192E_config       MPC8540ADS_config       stxgp3_config
+       ETX094_config           MPC8540EVAL_config      SXNI855T_config
+       FADS823_config          NMPC8560ADS_config      TQM823L_config
+       FADS850SAR_config       NETVIA_config           TQM850L_config
+       FADS860T_config         omap1510inn_config      TQM855L_config
+       FPS850L_config          omap1610h2_config       TQM860L_config
+                               omap1610inn_config      walnut_config
+                               omap5912osk_config      Yukon8220_config
+                               omap2420h4_config       ZPC1900_config
  
  Note: for some board special configuration names may exist; check if
        additional information is available from the board vendor; for
index b56629bf57679d8d8d17abe1961815318fde2635,d7177c9908975d008731af094612420e7b7b70d4..2ecd3e4b61011cc553675580d99ab530e879fa56
  #define CALC_ODT_RW(n)        (CALC_ODT_R(n) | CALC_ODT_W(n))
  
  /* Defines for the Read Cycle Delay test */
 -#define NUMMEMTESTS 8
 -#define NUMMEMWORDS 8
 +#define NUMMEMTESTS   8
 +#define NUMMEMWORDS   8
 +#define NUMLOOPS      256             /* memory test loops */
  
 -#define CONFIG_ECC_ERROR_RESET                /* test-only: see description below, at check_ecc() */
 +#undef CONFIG_ECC_ERROR_RESET         /* test-only: see description below, at check_ecc() */
  
  /*
   * This DDR2 setup code can dynamically setup the TLB entries for the DDR2 memory
@@@ -585,23 -584,10 +585,23 @@@ static void get_spd_info(unsigned long 
  #ifdef CONFIG_ADD_RAM_INFO
  void board_add_ram_info(int use_default)
  {
 +      PPC440_SYS_INFO board_cfg;
 +      u32 val;
 +
        if (is_ecc_enabled())
 -              puts(" (ECC enabled)");
 +              puts(" (ECC");
        else
 -              puts(" (ECC not enabled)");
 +              puts(" (ECC not");
 +
 +      get_sys_info(&board_cfg);
 +
 +      mfsdr(SDR0_DDR0, val);
 +      val = MULDIV64((board_cfg.freqPLB), SDR0_DDR0_DDRM_DECODE(val), 1);
 +      printf(" enabled, %d MHz", (val * 2) / 1000000);
 +
 +      mfsdram(SDRAM_MMODE, val);
 +      val = (val & SDRAM_MMODE_DCL_MASK) >> 4;
 +      printf(", CL%d)", val);
  }
  #endif
  
@@@ -745,7 -731,6 +745,7 @@@ static void check_frequency(unsigned lo
                        else
                                cycle_time = (((tcyc_reg & 0xF0) >> 4) * 100) +
                                        ((tcyc_reg & 0x0F)*10);
 +                      debug("cycle_time=%d [10 picoseconds]\n", cycle_time);
  
                        if  (cycle_time > (calc_cycle_time + 10)) {
                                /*
@@@ -1124,7 -1109,7 +1124,7 @@@ static void program_codt(unsigned long 
                                modt3 = 0x00000000;
                        }
                }
-       } else {
+       } else {
                codt |= SDRAM_CODT_DQS_2_5_V_DDR1;
                modt0 = 0x00000000;
                modt1 = 0x00000000;
@@@ -1330,7 -1315,6 +1330,7 @@@ static void program_mode(unsigned long 
  
        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);
  
        /*------------------------------------------------------------------
         * Handle the timing.  We need to find the worst case timing of all
  
                        /* 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);
  
                        /* For a particular DIMM, grab the three CAS values it supports */
                        for (cas_index = 0; cas_index < 3; cas_index++) {
                                if ((tcyc_reg & 0x0F) >= 10) {
                                        if ((tcyc_reg & 0x0F) == 0x0D) {
                                                /* Convert from hex to decimal */
 -                                              cycle_time_ns_x_100[cas_index] = (((tcyc_reg & 0xF0) >> 4) * 100) + 75;
 +                                              cycle_time_ns_x_100[cas_index] =
 +                                                      (((tcyc_reg & 0xF0) >> 4) * 100) + 75;
                                        } else {
                                                printf("ERROR: SPD reported Tcyc is incorrect for DIMM "
                                                       "in slot %d\n", (unsigned int)dimm_num);
                                        }
                                } else {
                                        /* Convert from hex to decimal */
 -                                      cycle_time_ns_x_100[cas_index] = (((tcyc_reg & 0xF0) >> 4) * 100) +
 +                                      cycle_time_ns_x_100[cas_index] =
 +                                              (((tcyc_reg & 0xF0) >> 4) * 100) +
                                                ((tcyc_reg & 0x0F)*10);
                                }
 +                              debug("cas_index=%d: cycle_time_ns_x_100=%d\n", cas_index,
 +                                    cycle_time_ns_x_100[cas_index]);
                        }
  
                        /* The rest of this routine determines if CAS 2.0, 2.5, 3.0, 4.0 and 5.0 are */
                                 *  Bit   7    6    5    4    3    2    1    0
                                 *       TBD  4.0  3.5  3.0  2.5  2.0  1.5  1.0
                                 */
 -                              if (((cas_bit & 0x40) == 0x40) && (cas_index < 3) && (cycle_time_ns_x_100[cas_index] != 0)) {
 -                                      max_4_0_tcyc_ns_x_100 = max(max_4_0_tcyc_ns_x_100, cycle_time_ns_x_100[cas_index]);
 +                              if (((cas_bit & 0x40) == 0x40) && (cas_index < 3) &&
 +                                  (cycle_time_ns_x_100[cas_index] != 0)) {
 +                                      max_4_0_tcyc_ns_x_100 = max(max_4_0_tcyc_ns_x_100,
 +                                                                  cycle_time_ns_x_100[cas_index]);
                                        cas_index++;
                                } else {
                                        if (cas_index != 0)
                                        cas_4_0_available = FALSE;
                                }
  
 -                              if (((cas_bit & 0x10) == 0x10) && (cas_index < 3) && (cycle_time_ns_x_100[cas_index] != 0)) {
 -                                      max_3_0_tcyc_ns_x_100 = max(max_3_0_tcyc_ns_x_100, cycle_time_ns_x_100[cas_index]);
 +                              if (((cas_bit & 0x10) == 0x10) && (cas_index < 3) &&
 +                                  (cycle_time_ns_x_100[cas_index] != 0)) {
 +                                      max_3_0_tcyc_ns_x_100 = max(max_3_0_tcyc_ns_x_100,
 +                                                                  cycle_time_ns_x_100[cas_index]);
                                        cas_index++;
                                } else {
                                        if (cas_index != 0)
                                        cas_3_0_available = FALSE;
                                }
  
 -                              if (((cas_bit & 0x08) == 0x08) && (cas_index < 3) && (cycle_time_ns_x_100[cas_index] != 0)) {
 -                                      max_2_5_tcyc_ns_x_100 = max(max_2_5_tcyc_ns_x_100, cycle_time_ns_x_100[cas_index]);
 +                              if (((cas_bit & 0x08) == 0x08) && (cas_index < 3) &&
 +                                  (cycle_time_ns_x_100[cas_index] != 0)) {
 +                                      max_2_5_tcyc_ns_x_100 = max(max_2_5_tcyc_ns_x_100,
 +                                                                  cycle_time_ns_x_100[cas_index]);
                                        cas_index++;
                                } else {
                                        if (cas_index != 0)
                                        cas_2_5_available = FALSE;
                                }
  
 -                              if (((cas_bit & 0x04) == 0x04) && (cas_index < 3) && (cycle_time_ns_x_100[cas_index] != 0)) {
 -                                      max_2_0_tcyc_ns_x_100 = max(max_2_0_tcyc_ns_x_100, cycle_time_ns_x_100[cas_index]);
 +                              if (((cas_bit & 0x04) == 0x04) && (cas_index < 3) &&
 +                                  (cycle_time_ns_x_100[cas_index] != 0)) {
 +                                      max_2_0_tcyc_ns_x_100 = max(max_2_0_tcyc_ns_x_100,
 +                                                                  cycle_time_ns_x_100[cas_index]);
                                        cas_index++;
                                } else {
                                        if (cas_index != 0)
                                 *  Bit   7    6    5    4    3    2    1    0
                                 *       TBD  6.0  5.0  4.0  3.0  2.0  TBD  TBD
                                 */
 -                              if (((cas_bit & 0x20) == 0x20) && (cas_index < 3) && (cycle_time_ns_x_100[cas_index] != 0)) {
 -                                      max_5_0_tcyc_ns_x_100 = max(max_5_0_tcyc_ns_x_100, cycle_time_ns_x_100[cas_index]);
 +                              if (((cas_bit & 0x20) == 0x20) && (cas_index < 3) &&
 +                                  (cycle_time_ns_x_100[cas_index] != 0)) {
 +                                      max_5_0_tcyc_ns_x_100 = max(max_5_0_tcyc_ns_x_100,
 +                                                                  cycle_time_ns_x_100[cas_index]);
                                        cas_index++;
                                } else {
                                        if (cas_index != 0)
                                        cas_5_0_available = FALSE;
                                }
  
 -                              if (((cas_bit & 0x10) == 0x10) && (cas_index < 3) && (cycle_time_ns_x_100[cas_index] != 0)) {
 -                                      max_4_0_tcyc_ns_x_100 = max(max_4_0_tcyc_ns_x_100, cycle_time_ns_x_100[cas_index]);
 +                              if (((cas_bit & 0x10) == 0x10) && (cas_index < 3) &&
 +                                  (cycle_time_ns_x_100[cas_index] != 0)) {
 +                                      max_4_0_tcyc_ns_x_100 = max(max_4_0_tcyc_ns_x_100,
 +                                                                  cycle_time_ns_x_100[cas_index]);
                                        cas_index++;
                                } else {
                                        if (cas_index != 0)
                                        cas_4_0_available = FALSE;
                                }
  
 -                              if (((cas_bit & 0x08) == 0x08) && (cas_index < 3) && (cycle_time_ns_x_100[cas_index] != 0)) {
 -                                      max_3_0_tcyc_ns_x_100 = max(max_3_0_tcyc_ns_x_100, cycle_time_ns_x_100[cas_index]);
 +                              if (((cas_bit & 0x08) == 0x08) && (cas_index < 3) &&
 +                                  (cycle_time_ns_x_100[cas_index] != 0)) {
 +                                      max_3_0_tcyc_ns_x_100 = max(max_3_0_tcyc_ns_x_100,
 +                                                                  cycle_time_ns_x_100[cas_index]);
                                        cas_index++;
                                } else {
                                        if (cas_index != 0)
        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);
  
        if (sdram_ddr1 == TRUE) { /* DDR1 */
                if ((cas_2_0_available == TRUE) && (sdram_freq <= cycle_2_0_clk)) {
                        hang();
                }
        } else { /* DDR2 */
 +              debug("cas_3_0_available=%d\n", cas_3_0_available);
 +              debug("cas_4_0_available=%d\n", cas_4_0_available);
 +              debug("cas_5_0_available=%d\n", cas_5_0_available);
                if ((cas_3_0_available == TRUE) && (sdram_freq <= cycle_3_0_clk)) {
                        mmode |= SDRAM_MMODE_DCL_DDR2_3_0_CLK;
                        *selected_cas = DDR_CAS_3;
@@@ -2178,18 -2137,6 +2178,18 @@@ static unsigned long is_ecc_enabled(voi
        return ecc;
  }
  
 +static void blank_string(int size)
 +{
 +      int i;
 +
 +      for (i=0; i<size; i++)
 +              putc('\b');
 +      for (i=0; i<size; i++)
 +              putc(' ');
 +      for (i=0; i<size; i++)
 +              putc('\b');
 +}
 +
  #ifdef CONFIG_DDR_ECC
  /*-----------------------------------------------------------------------------+
   * program_ecc.
@@@ -2286,10 -2233,8 +2286,10 @@@ static void program_ecc_addr(unsigned l
        unsigned long end_address;
        unsigned long address_increment;
        unsigned long mcopt1;
 -      char str[] = "ECC generation...";
 -      int i;
 +      char str[] = "ECC generation -";
 +      char slash[] = "\\|/-\\|/-";
 +      int loop = 0;
 +      int loopi = 0;
  
        current_address = start_address;
        mfsdram(SDRAM_MCOPT1, mcopt1);
                        while (current_address < end_address) {
                                *((unsigned long *)current_address) = 0x00000000;
                                current_address += address_increment;
 +
 +                              if ((loop++ % (2 << 20)) == 0) {
 +                                      putc('\b');
 +                                      putc(slash[loopi++ % 8]);
 +                              }
                        }
 +
                } else {
                        /* ECC bit set method for cached memory */
                        dcbz_area(start_address, num_bytes);
                        dflush();
                }
 -              for (i=0; i<strlen(str); i++)
 -                      putc('\b');
 +
 +              blank_string(strlen(str));
  
                sync();
                eieio();
@@@ -2408,7 -2347,7 +2408,7 @@@ static void program_DQS_calibration(uns
  #endif
  }
  
 -static u32 short_mem_test(void)
 +static int short_mem_test(void)
  {
        u32 *membase;
        u32 bxcr_num;
                 0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA},
                {0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55,
                 0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55} };
 +      int l;
  
        for (bxcr_num = 0; bxcr_num < MAXBXCF; bxcr_num++) {
                mfsdram(SDRAM_MB0CF + (bxcr_num << 2), bxcf);
  
                /* Banks enabled */
                if ((bxcf & SDRAM_BXCF_M_BE_MASK) == SDRAM_BXCF_M_BE_ENABLE) {
 -
                        /* Bank is enabled */
 -                      membase = (u32 *)(SDRAM_RXBAS_SDBA_DECODE(mfdcr_any(SDRAM_R0BAS+bxcr_num)));
  
                        /*------------------------------------------------------------------
                         * Run the short memory test.
                         *-----------------------------------------------------------------*/
 +                      membase = (u32 *)(SDRAM_RXBAS_SDBA_DECODE(mfdcr_any(SDRAM_R0BAS+bxcr_num)));
 +
                        for (i = 0; i < NUMMEMTESTS; i++) {
                                for (j = 0; j < NUMMEMWORDS; j++) {
                                        membase[j] = test[i][j];
                                        ppcDcbf((u32)&(membase[j]));
                                }
                                sync();
 -                              for (j = 0; j < NUMMEMWORDS; j++) {
 -                                      if (membase[j] != test[i][j]) {
 +                              for (l=0; l<NUMLOOPS; l++) {
 +                                      for (j = 0; j < NUMMEMWORDS; j++) {
 +                                              if (membase[j] != test[i][j]) {
 +                                                      ppcDcbf((u32)&(membase[j]));
 +                                                      return 0;
 +                                              }
                                                ppcDcbf((u32)&(membase[j]));
 -                                              break;
                                        }
 -                                      ppcDcbf((u32)&(membase[j]));
 +                                      sync();
                                }
 -                              sync();
 -                              if (j < NUMMEMWORDS)
 -                                      break;
                        }
 -                      if (i < NUMMEMTESTS)
 -                              break;
                }       /* if bank enabled */
        }               /* for bxcf_num */
  
 -      return bxcr_num;
 +      return 1;
  }
  
  #ifndef HARD_CODED_DQS
   *-----------------------------------------------------------------------------*/
  static void DQS_calibration_process(void)
  {
 -      unsigned long ecc_temp;
        unsigned long rfdc_reg;
        unsigned long rffd;
        unsigned long rqdc_reg;
        unsigned long rqfd;
 -      unsigned long bxcr_num;
        unsigned long val;
        long rqfd_average;
        long rffd_average;
        long max_end;
        unsigned char fail_found;
        unsigned char pass_found;
 +      u32 rqfd_start;
 +      char str[] = "Auto calibration -";
 +      char slash[] = "\\|/-\\|/-";
 +      int loopi = 0;
  
        /*------------------------------------------------------------------
         * Test to determine the best read clock delay tuning bits.
         * we can clock the DDR interface at is 200 MHz (2x 100 MHz PLB speed),
         * from experimentation it is safe to say you will always have a failure.
         *-----------------------------------------------------------------*/
 -      mfsdram(SDRAM_MCOPT1, ecc_temp);
 -      ecc_temp &= SDRAM_MCOPT1_MCHK_MASK;
 -      mfsdram(SDRAM_MCOPT1, val);
 -      mtsdram(SDRAM_MCOPT1, (val & ~SDRAM_MCOPT1_MCHK_MASK) |
 -              SDRAM_MCOPT1_MCHK_NON);
 +
 +      /* first fix RQDC[RQFD] to an average of 80 degre phase shift to find RFDC[RFFD] */
 +      rqfd_start = 64; /* test-only: don't know if this is the _best_ start value */
 +
 +      puts(str);
 +
 +calibration_loop:
 +      mfsdram(SDRAM_RQDC, rqdc_reg);
 +      mtsdram(SDRAM_RQDC, (rqdc_reg & ~SDRAM_RQDC_RQFD_MASK) |
 +              SDRAM_RQDC_RQFD_ENCODE(rqfd_start));
  
        max_start = 0;
        min_end = 0;
        fail_found = FALSE;
        pass_found = FALSE;
  
 -      /* first fix RQDC[RQFD] to an average of 80 degre phase shift to find RFDC[RFFD] */
 -      /* rqdc_reg = mfsdram(SDRAM_RQDC) & ~(SDRAM_RQDC_RQFD_MASK); */
 -
        /*
         * get the delay line calibration register value
         */
                 *-----------------------------------------------------------------*/
                mtsdram(SDRAM_RFDC, rfdc_reg | SDRAM_RFDC_RFFD_ENCODE(rffd));
  
 -              /* do the small memory test */
 -              bxcr_num = short_mem_test();
 -
                /*------------------------------------------------------------------
                 * See if the rffd value passed.
                 *-----------------------------------------------------------------*/
 -              if (bxcr_num == MAXBXCF) {
 +              if (short_mem_test()) {
                        if (fail_found == TRUE) {
                                pass_found = TRUE;
                                if (current_pass_length == 0)
                 *-----------------------------------------------------------------*/
                mtsdram(SDRAM_RQDC, rqdc_reg | SDRAM_RQDC_RQFD_ENCODE(rqfd));
  
 -              /* do the small memory test */
 -              bxcr_num = short_mem_test();
 -
                /*------------------------------------------------------------------
                 * See if the rffd value passed.
                 *-----------------------------------------------------------------*/
 -              if (bxcr_num == MAXBXCF) {
 +              if (short_mem_test()) {
                        if (fail_found == TRUE) {
                                pass_found = TRUE;
                                if (current_pass_length == 0)
                }
        }
  
 +      rqfd_average = ((max_start + max_end) >> 1);
 +
        /*------------------------------------------------------------------
         * Make sure we found the valid read passing window.  Halt if not
         *-----------------------------------------------------------------*/
        if (window_found == FALSE) {
 -              printf("ERROR: Cannot determine a common read delay for the "
 +              if (rqfd_start < SDRAM_RQDC_RQFD_MAX) {
 +                      putc('\b');
 +                      putc(slash[loopi++ % 8]);
 +
 +                      /* try again from with a different RQFD start value */
 +                      rqfd_start++;
 +                      goto calibration_loop;
 +              }
 +
 +              printf("\nERROR: Cannot determine a common read delay for the "
                       "DIMM(s) installed.\n");
                debug("%s[%d] ERROR : \n", __FUNCTION__,__LINE__);
                hang();
        }
  
 -      rqfd_average = ((max_start + max_end) >> 1);
 +      blank_string(strlen(str));
  
        if (rqfd_average < 0)
                rqfd_average = 0;
        if (rqfd_average > SDRAM_RQDC_RQFD_MAX)
                rqfd_average = SDRAM_RQDC_RQFD_MAX;
  
 -      /*------------------------------------------------------------------
 -       * Restore the ECC variable to what it originally was
 -       *-----------------------------------------------------------------*/
 -      mfsdram(SDRAM_MCOPT1, val);
 -      mtsdram(SDRAM_MCOPT1, (val & ~SDRAM_MCOPT1_MCHK_MASK) | ecc_temp);
 -
        mtsdram(SDRAM_RQDC,
                (rqdc_reg & ~SDRAM_RQDC_RQFD_MASK) |
                SDRAM_RQDC_RQFD_ENCODE(rqfd_average));
diff --combined cpu/ppc4xx/start.S
index 3b1586c0ae3d12df74ee3bfdb69cf1c5ccf9929f,072a6d1e9249cf5f8da755e91194b545db8c00bf..a96083caa581cc10b357ac52d6c8a5aeab46c5b3
@@@ -2,7 -2,6 +2,7 @@@
   *  Copyright (C) 1998        Dan Malek <dmalek@jlc.net>
   *  Copyright (C) 1999        Magnus Damm <kieraypc01.p.y.kie.era.ericsson.se>
   *  Copyright (C) 2000,2001,2002 Wolfgang Denk <wd@denx.de>
 + *  Copyright (C) 2007 Stefan Roese <sr@denx.de>, DENX Software Engineering
   *
   * See file CREDITS for list of people who contributed to this
   * project.
@@@ -700,9 -699,7 +700,9 @@@ _start
  #endif        /* CONFIG_IOP480 */
  
  /*****************************************************************************/
 -#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || defined(CONFIG_405) || defined(CONFIG_405EP)
 +#if defined(CONFIG_405GP) || defined(CONFIG_405CR) || \
 +    defined(CONFIG_405EP) || defined(CONFIG_405EZ) || \
 +    defined(CONFIG_405)
        /*----------------------------------------------------------------------- */
        /* Clear and set up some registers. */
        /*----------------------------------------------------------------------- */
        /*----------------------------------------------------------------------- */
        /* Enable two 128MB cachable regions. */
        /*----------------------------------------------------------------------- */
 -      addis   r4,r0,0x8000
 -      addi    r4,r4,0x0001
 +      lis     r4,0x8000
 +      ori     r4,r4,0x0001
        mticcr  r4                      /* instruction cache */
        isync
  
 -      addis   r4,r0,0x0000
 -      addi    r4,r4,0x0000
 +      lis     r4,0x0000
 +      ori     r4,r4,0x0000
        mtdccr  r4                      /* data cache */
  
  #if !(defined(CFG_EBC_PB0AP) && defined(CFG_EBC_PB0CR))
  #endif /* CONFIG_405EP */
  
  #if defined(CFG_OCM_DATA_ADDR) && defined(CFG_OCM_DATA_SIZE)
 +#if defined(CONFIG_405EZ)
 +      /********************************************************************
 +       * Setup OCM - On Chip Memory - PPC405EZ uses OCM Controller V2
 +       *******************************************************************/
 +      /*
 +       * We can map the OCM on the PLB3, so map it at
 +       * CFG_OCM_DATA_ADDR + 0x8000
 +       */
 +      lis     r3,CFG_OCM_DATA_ADDR@h  /* OCM location */
 +      ori     r3,r3,CFG_OCM_DATA_ADDR@l
 +      ori     r3,r3,0x8270    /* 32K Offset, 16K for Bank 1, R/W/Enable */
 +      mtdcr   ocmplb3cr1,r3           /* Set PLB Access */
 +      ori     r3,r3,0x4000            /* Add 0x4000 for bank 2 */
 +      mtdcr   ocmplb3cr2,r3           /* Set PLB Access */
 +      isync
 +
 +      lis     r3,CFG_OCM_DATA_ADDR@h  /* OCM location */
 +      ori     r3,r3,CFG_OCM_DATA_ADDR@l
 +      ori     r3,r3,0x0270            /* 16K for Bank 1, R/W/Enable */
 +      mtdcr   ocmdscr1, r3            /* Set Data Side */
 +      mtdcr   ocmiscr1, r3            /* Set Instruction Side */
 +      ori     r3,r3,0x4000            /* Add 0x4000 for bank 2 */
 +      mtdcr   ocmdscr2, r3            /* Set Data Side */
 +      mtdcr   ocmiscr2, r3            /* Set Instruction Side */
 +      addis   r3,0,0x0800             /* OCM Data Parity Disable - 1 Wait State */
 +      mtdcr   ocmdsisdpc,r4
 +
 +      isync
 +#else /* CONFIG_405EZ */
        /********************************************************************
         * Setup OCM - On Chip Memory
         *******************************************************************/
        lis     r0, 0x7FFF
        ori     r0, r0, 0xFFFF
        mfdcr   r3, ocmiscntl           /* get instr-side IRAM config */
 -      mfdcr   r4, ocmdscntl   /* get data-side IRAM config */
 -      and     r3, r3, r0      /* disable data-side IRAM */
 -      and     r4, r4, r0      /* disable data-side IRAM */
 -      mtdcr   ocmiscntl, r3   /* set instr-side IRAM config */
 -      mtdcr   ocmdscntl, r4   /* set data-side IRAM config */
 +      mfdcr   r4, ocmdscntl           /* get data-side IRAM config */
 +      and     r3, r3, r0              /* disable data-side IRAM */
 +      and     r4, r4, r0              /* disable data-side IRAM */
 +      mtdcr   ocmiscntl, r3           /* set instr-side IRAM config */
 +      mtdcr   ocmdscntl, r4           /* set data-side IRAM config */
        isync
  
 -      addis   r3, 0, CFG_OCM_DATA_ADDR@h /* OCM location */
 +      lis     r3,CFG_OCM_DATA_ADDR@h  /* OCM location */
 +      ori     r3,r3,CFG_OCM_DATA_ADDR@l
        mtdcr   ocmdsarc, r3
        addis   r4, 0, 0xC000           /* OCM data area enabled */
        mtdcr   ocmdscntl, r4
        isync
 +#endif /* CONFIG_405EZ */
  #endif
  
        /*----------------------------------------------------------------------- */
@@@ -1892,11 -1858,11 +1892,11 @@@ pll_wait
  #endif /* CONFIG_405EP */
  
  #if defined(CONFIG_440)
- #define function_prolog(func_name)      .text; \
+ #define function_prolog(func_name)    .text; \
                                        .align 2; \
                                        .globl func_name; \
                                        func_name:
- #define function_epilog(func_name)      .type func_name,@function; \
+ #define function_epilog(func_name)    .type func_name,@function; \
                                        .size func_name,.-func_name
  
  /*----------------------------------------------------------------------------+
  +----------------------------------------------------------------------------*/
        function_prolog(dcbz_area)
        rlwinm. r5,r4,0,27,31
-       rlwinm  r5,r4,27,5,31
-       beq     ..d_ra2
-       addi    r5,r5,0x0001
- ..d_ra2:mtctr   r5
- ..d_ag2:dcbz    r0,r3
-       addi    r3,r3,32
-       bdnz    ..d_ag2
+       rlwinm  r5,r4,27,5,31
+       beq     ..d_ra2
+       addi    r5,r5,0x0001
+ ..d_ra2:mtctr r5
+ ..d_ag2:dcbz  r0,r3
+       addi    r3,r3,32
+       bdnz    ..d_ag2
        sync
        blr
        function_epilog(dcbz_area)
  | dflush.  Assume 32K at vector address is cachable.
  +----------------------------------------------------------------------------*/
        function_prolog(dflush)
-       mfmsr   r9
-       rlwinm  r8,r9,0,15,13
-       rlwinm  r8,r8,0,17,15
-       mtmsr   r8
-       addi    r3,r0,0x0000
-       mtspr   dvlim,r3
-       mfspr   r3,ivpr
-       addi    r4,r0,1024
-       mtctr   r4
+       mfmsr   r9
+       rlwinm  r8,r9,0,15,13
+       rlwinm  r8,r8,0,17,15
+       mtmsr   r8
+       addi    r3,r0,0x0000
+       mtspr   dvlim,r3
+       mfspr   r3,ivpr
+       addi    r4,r0,1024
+       mtctr   r4
  ..dflush_loop:
-       lwz     r6,0x0(r3)
-       addi    r3,r3,32
-       bdnz    ..dflush_loop
-       addi    r3,r3,-32
-       mtctr   r4
- ..ag:   dcbf    r0,r3
-       addi    r3,r3,-32
-       bdnz    ..ag
+       lwz     r6,0x0(r3)
+       addi    r3,r3,32
+       bdnz    ..dflush_loop
+       addi    r3,r3,-32
+       mtctr   r4
+ ..ag: dcbf    r0,r3
+       addi    r3,r3,-32
+       bdnz    ..ag
        sync
-       mtmsr   r9
+       mtmsr   r9
        blr
        function_epilog(dflush)
  #endif /* CONFIG_440 */
diff --combined drivers/Makefile
index 2eac7c848558a8eb069e99e5ef9ade47f8a9bb4b,60ce3b489cc32c41b314127abe60f3d4fb2a6c2a..df9fbf2aae1efafa312607b78c894c5289c2987c
@@@ -32,11 -32,11 +32,11 @@@ COBJS      = 3c589.o 5701rls.o ali512x.o atm
          cs8900.o ct69000.o dataflash.o dc2114x.o dm9000x.o \
          e1000.o eepro100.o \
          i8042.o inca-ip_sw.o keyboard.o \
 -        lan91c96.o \
 +        lan91c96.o macb.o \
          natsemi.o ne2000.o netarm_eth.o netconsole.o \
          ns16550.o ns8382x.o ns87308.o ns7520_eth.o omap1510_i2c.o \
-         omap24xx_i2c.o pci.o pci_auto.o pci_indirect.o \
-         pcnet.o plb2800_eth.o \
+         omap24xx_i2c.o pci.o pci_auto.o pci_indirect.o tsi108_pci.o\
+         tsi108_i2c.o pcnet.o plb2800_eth.o \
          ps2ser.o ps2mult.o pc_keyb.o \
          rtl8019.o rtl8139.o rtl8169.o \
          s3c4510b_eth.o s3c4510b_uart.o \
@@@ -45,7 -45,7 +45,7 @@@
          serial_pl010.o serial_pl011.o serial_xuartlite.o \
          sl811_usb.o sm501.o smc91111.o smiLynxEM.o \
          status_led.o sym53c8xx.o systemace.o ahci.o \
-         ti_pci1410a.o tigon3.o tsec.o \
+         ti_pci1410a.o tigon3.o tsec.o tsi108_eth.o\
          usbdcore.o usbdcore_ep0.o usbdcore_omap1510.o usbtty.o \
          videomodes.o w83c553f.o \
          ks8695eth.o \
index c113b7ee0e4942d34ccb129b77aa6fbb9fa6c579,5f0f0b4b029cccc142b87f01b7815de2a44e26e5..26bc875f86920e2548fb9dac116db1b96a8269e5
@@@ -49,15 -49,18 +49,18 @@@ typedef    struct  global_data 
        unsigned long   scc_clk;
        unsigned long   brg_clk;
  #endif
+ #if defined(CONFIG_MPC7448HPC2)
+       unsigned long   mem_clk;
+ #endif
  #if defined(CONFIG_MPC83XX)
        /* There are other clocks in the MPC83XX */
        u32 csb_clk;
 -#if defined (CONFIG_MPC8349)
 +#if defined (CONFIG_MPC834X)
        u32 tsec1_clk;
        u32 tsec2_clk;
        u32 usbmph_clk;
        u32 usbdr_clk;
 -#endif /* CONFIG_MPC8349 */
 +#endif /* CONFIG_MPC834X */
        u32 core_clk;
        u32 i2c1_clk;
        u32 i2c2_clk;
diff --combined net/eth.c
index b3e281fdcac47aebe36a5ef461a580e37e4c1855,44390d237b2f1386f8c8fd40ea1682e29b938224..0fc22115dc20772349dde0e9bd9fd7fa849314d4
+++ b/net/eth.c
@@@ -52,11 -52,10 +52,12 @@@ extern int rtl8139_initialize(bd_t*)
  extern int rtl8169_initialize(bd_t*);
  extern int scc_initialize(bd_t*);
  extern int skge_initialize(bd_t*);
+ extern int tsi108_eth_initialize(bd_t*);
  extern int tsec_initialize(bd_t*, int, char *);
  extern int npe_initialize(bd_t *);
  extern int uec_initialize(int);
 +extern int bfin_EMAC_initialize(bd_t *);
 +extern int atstk1000_eth_initialize(bd_t *);
  
  static struct eth_device *eth_devices, *eth_current;
  
@@@ -250,6 -249,9 +251,9 @@@ int eth_initialize(bd_t *bis
  #endif
  #ifdef CONFIG_NS8382X
        ns8382x_initialize(bis);
+ #endif
+ #if defined(CONFIG_TSI108_ETH)
+       tsi108_eth_initialize(bis);
  #endif
  #if defined(CONFIG_RTL8139)
        rtl8139_initialize(bis);
  #if defined(CONFIG_RTL8169)
        rtl8169_initialize(bis);
  #endif
 +#if defined(CONFIG_BF537)
 +      bfin_EMAC_initialize(bis);
 +#endif
 +#if defined(CONFIG_ATSTK1000)
 +      atstk1000_eth_initialize(bis);
 +#endif
  
        if (!eth_devices) {
                puts ("No ethernet found.\n");