Das U-Boot: Universal Boot Loader
authorwdenk <wdenk>
Sat, 2 Nov 2002 23:17:16 +0000 (23:17 +0000)
committerwdenk <wdenk>
Sat, 2 Nov 2002 23:17:16 +0000 (23:17 +0000)
15 files changed:
MAKEALL [new file with mode: 0644]
Makefile [new file with mode: 0644]
board/cogent/README [new file with mode: 0644]
board/cpu86/config.mk [new file with mode: 0644]
board/cray/L1/config.mk [new file with mode: 0644]
board/cu824/README [new file with mode: 0644]
board/eltec/bab7xx/bab7xx.c [new file with mode: 0644]
board/eltec/elppc/elppc.c [new file with mode: 0644]
board/ep8260/config.mk [new file with mode: 0644]
board/evb64260/evb64260.c [new file with mode: 0644]
board/evb64260/flash.c [new file with mode: 0644]
board/evb64260/memory.c [new file with mode: 0644]
board/evb64260/u-boot.lds [new file with mode: 0644]
board/gth/README [new file with mode: 0644]
mkconfig [new file with mode: 0644]

diff --git a/MAKEALL b/MAKEALL
new file mode 100644 (file)
index 0000000..e4a8151
--- /dev/null
+++ b/MAKEALL
@@ -0,0 +1,138 @@
+#!/bin/sh
+
+if [ "${CROSS_COMPILE}" ] ; then
+       MAKE="make CROSS_COMPILE=${CROSS_COMPILE}"
+else
+       MAKE=make
+fi
+
+[ -d LOG ] || mkdir LOG || exit 1
+
+LIST=""
+
+#########################################################################
+## MPC8xx Systems
+#########################################################################
+
+LIST_8xx="     \
+       ADS860          AMX860          c2mon           CCM             \
+       cogent_mpc8xx   ESTEEM192E      ETX094          FADS823         \
+       FADS850SAR      FADS860T        FLAGADM         FPS850L         \
+       GEN860T         GENIETV         GTH             hermes          \
+       IAD210          ICU862_100MHz   IP860           IVML24          \
+       IVML24_128      IVML24_256      IVMS8           IVMS8_128       \
+       IVMS8_256       LANTEC          lwmon           MBX             \
+       MBX860T         MHPC            MVS1            NETVIA          \
+       NX823           pcu_e           R360MPI         RPXClassic      \
+       RPXlite         RRvision        SM850           SPD823TS        \
+       SXNI855T        TQM823L         TQM823L_LCD     TQM850L         \
+       TQM855L         TQM860L         TQM860L_FEC     TTTech          \
+"
+
+#########################################################################
+## PPC4xx Systems
+#########################################################################
+
+LIST_4xx="     \
+       ADCIOP          AR405           CANBT           CPCI405         \
+       CPCI4052        CPCI440         CPCIISER4       CRAYL1          \
+       DASA_SIM        DU405           EBONY           ERIC            \
+       MIP405          ML2             OCRTC           ORSG            \
+       PCI405          PIP405          W7OLMC          W7OLMG          \
+       WALNUT405                                                       \
+"
+
+#########################################################################
+## MPC824x Systems
+#########################################################################
+
+LIST_824x="    \
+       BMW             CU824           MOUSSE          MUSENKI         \
+       OXC             PN62            Sandpoint8240   Sandpoint8245   \
+       utx8245                                                         \
+"
+
+#########################################################################
+## MPC8260 Systems
+#########################################################################
+
+LIST_8260="    \
+       cogent_mpc8260  CPU86           ep8260          gw8260          \
+       hymod           IPHASE4539      MPC8260ADS      PM826           \
+       ppmc8260        RPXsuper        rsdproto        sacsng          \
+       sbc8260         SCM             TQM8260                         \
+"
+
+#########################################################################
+## 74xx/7xx Systems
+#########################################################################
+
+LIST_74xx="    \
+       EVB64260        PCIPPC2         PCIPPC6         ZUMA            \
+"
+
+LIST_7xx="     \
+       BAB7xx          ELPPC                                           \
+"
+
+LIST_ppc="${LIST_8xx} ${LIST_824x} ${LIST_8260} \
+         ${LIST_4xx} ${LIST_74xx} ${LIST_7xx}"
+
+#########################################################################
+## StrongARM Systems
+#########################################################################
+
+LIST_SA="lart shannon dnp1110"
+
+#########################################################################
+## ARM7 Systems
+#########################################################################
+
+LIST_ARM7="impa7 ep7312"
+
+#########################################################################
+## ARM9 Systems
+#########################################################################
+
+LIST_ARM9="smdk2400 smdk2410 trab"
+
+#########################################################################
+## Xscale Systems
+#########################################################################
+
+LIST_xscale="lubbock cradle csb226"
+
+
+LIST_arm="${LIST_SA} ${LIST_ARM7} ${LIST_ARM9} ${LIST_xscale}"
+
+
+#----- for now, just run PPC by default -----
+[ $# = 0 ] && set $LIST_ppc
+
+#-----------------------------------------------------------------------
+
+build_target() {
+       target=$1
+
+       ${MAKE} distclean >/dev/null
+       ${MAKE} ${target}_config
+       ${MAKE} all 2>&1 >LOG/$target.MAKELOG | tee LOG/$target.ERR
+       ${CROSS_COMPILE:-ppc_8xx-}size u-boot | tee -a LOG/$target.MAKELOG
+}
+
+#-----------------------------------------------------------------------
+
+
+for arg in $@
+do
+       case "$arg" in
+       8xx|824x|8260|4xx|7xx|74xx|SA|ARM7|ARM9|ppc|arm|xscale)
+                       for target in `eval echo '$LIST_'${arg}`
+                       do
+                               build_target ${target}
+                       done
+                       ;;
+       *)              build_target ${arg}
+                       ;;
+       esac
+done
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..6bb0071
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,656 @@
+#
+# (C) Copyright 2000, 2001, 2002
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+HOSTARCH := $(shell uname -m | \
+       sed -e s/i.86/i386/ \
+           -e s/sun4u/sparc64/ \
+           -e s/arm.*/arm/ \
+           -e s/sa110/arm/ \
+           -e s/powerpc/ppc/ \
+           -e s/macppc/ppc/)
+
+HOSTOS := $(shell uname -s | tr A-Z a-z | \
+           sed -e 's/\(cygwin\).*/cygwin/')
+
+export HOSTARCH
+
+# Deal with colliding definitions from tcsh etc.
+VENDOR=
+
+#########################################################################
+
+TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
+export TOPDIR
+
+ifeq (include/config.mk,$(wildcard include/config.mk))
+# load ARCH, BOARD, and CPU configuration
+include include/config.mk
+export ARCH CPU BOARD VENDOR
+# load other configuration
+include $(TOPDIR)/config.mk
+
+ifndef CROSS_COMPILE
+ifeq ($(HOSTARCH),ppc)
+CROSS_COMPILE =
+else
+##  #ifeq ($(CPU),mpc8xx)
+##  CROSS_COMPILE = ppc_8xx-
+##  #endif
+##  #ifeq ($(CPU),ppc4xx)
+##  #CROSS_COMPILE = ppc_4xx-
+##  #endif
+##  #ifeq ($(CPU),mpc824x)
+##  #CROSS_COMPILE = ppc_82xx-
+##  #endif
+##  #ifeq ($(CPU),mpc8260)
+##  #CROSS_COMPILE = ppc_82xx-
+##  #endif
+##  #ifeq ($(CPU),74xx_7xx)
+##  #CROSS_COMPILE = ppc_74xx-)
+##  #endif
+ifeq ($(ARCH),ppc)
+CROSS_COMPILE = ppc_8xx-
+endif
+ifeq ($(ARCH),arm)
+CROSS_COMPILE = arm_920TDI-
+endif
+endif
+endif
+
+export CROSS_COMPILE
+
+# The "tools" are needed early, so put this first
+SUBDIRS        = tools \
+         lib_generic \
+         lib_$(ARCH) \
+         cpu/$(CPU) \
+         board/$(BOARDDIR) \
+         common \
+         disk \
+         fs \
+         net \
+         rtc \
+         dtt \
+         drivers \
+         post \
+         post/cpu \
+         examples
+
+#########################################################################
+# U-Boot objects....order is important (i.e. start must be first)
+
+OBJS  =        cpu/$(CPU)/start.o
+
+ifeq ($(CPU),ppc4xx)
+OBJS +=        cpu/$(CPU)/resetvec.o
+endif
+
+LIBS  =        board/$(BOARDDIR)/lib$(BOARD).a
+LIBS += cpu/$(CPU)/lib$(CPU).a
+LIBS += lib_$(ARCH)/lib$(ARCH).a
+LIBS += fs/jffs2/libjffs2.a
+LIBS += net/libnet.a
+LIBS += disk/libdisk.a
+LIBS += rtc/librtc.a
+LIBS += dtt/libdtt.a
+LIBS += drivers/libdrivers.a
+LIBS += post/libpost.a post/cpu/libcpu.a
+LIBS += common/libcommon.a
+LIBS += lib_generic/libgeneric.a
+
+#########################################################################
+
+all:           u-boot.srec u-boot.bin System.map
+
+install:       all
+               cp u-boot.bin /tftpboot/u-boot.bin
+               cp u-boot.bin /net/sam/tftpboot/u-boot.bin
+
+u-boot.srec:   u-boot
+               $(OBJCOPY) ${OBJCFLAGS} -O srec $< $@
+
+u-boot.bin:    u-boot
+               $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
+
+u-boot.dis:    u-boot
+               $(OBJDUMP) -d $< > $@
+
+u-boot:                depend subdirs $(OBJS) $(LIBS) $(LDSCRIPT)
+               $(LD) $(LDFLAGS) $(OBJS) $(LIBS) $(LIBS) -Map u-boot.map -o u-boot
+
+subdirs:
+               @for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir || exit 1 ; done
+
+depend dep:
+               @for dir in $(SUBDIRS) ; do $(MAKE) -C $$dir .depend ; done
+
+tags:
+               ctags -w `find $(SUBDIRS) include \
+                       \( -name CVS -prune \) -o \( -name '*.[ch]' -print \)`
+
+etags:
+               etags -a `find $(SUBDIRS) include \
+                       \( -name CVS -prune \) -o \( -name '*.[ch]' -print \)`
+
+System.map:    u-boot
+               @$(NM) $< | \
+               grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | \
+               sort > System.map
+
+#########################################################################
+else
+all install u-boot u-boot.srec depend dep:
+       @echo "System not configured - see README" >&2
+       @ exit 1
+endif
+
+#########################################################################
+
+unconfig:
+       rm -f include/config.h include/config.mk
+
+#========================================================================
+# PowerPC
+#========================================================================
+#########################################################################
+## MPC8xx Systems
+#########################################################################
+
+ADS860_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx fads
+
+AMX860_config  :       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx amx860 westel
+
+c2mon_config:          unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx c2mon
+
+CCM_config:            unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx CCM siemens
+
+cogent_mpc8xx_config:  unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx cogent
+
+ESTEEM192E_config:     unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx esteem192e
+
+ETX094_config  :       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx etx094
+
+FADS823_config \
+FADS850SAR_config \
+FADS860T_config:       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx fads
+
+FLAGADM_config:        unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx flagadm
+
+GEN860T_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx gen860t
+
+GENIETV_config:        unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx genietv
+
+GTH_config:    unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx gth
+
+hermes_config  :       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx hermes
+
+IAD210_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx IAD210 siemens
+
+xtract_ICU862 = $(subst _100MHz,,$(subst _config,,$1))
+
+ICU862_100MHz_config   \
+ICU862_config: unconfig
+       @ >include/config.h
+       @[ -z "$(findstring _100MHz,$@)" ] || \
+               { echo "#define CONFIG_100MHz"  >>include/config.h ; \
+                 echo "... with 100MHz system clock" ; \
+               }
+       @./mkconfig -a $(call xtract_ICU862,$@) ppc mpc8xx icu862
+
+IP860_config   :       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx ip860
+
+IVML24_256_config \
+IVML24_128_config \
+IVML24_config: unconfig
+       @ >include/config.h
+       @[ -z "$(findstring IVML24_config,$@)" ] || \
+                { echo "#define CONFIG_IVML24_16M"     >>include/config.h ; \
+                }
+       @[ -z "$(findstring IVML24_128_config,$@)" ] || \
+                { echo "#define CONFIG_IVML24_32M"     >>include/config.h ; \
+                }
+       @[ -z "$(findstring IVML24_256_config,$@)" ] || \
+                { echo "#define CONFIG_IVML24_64M"     >>include/config.h ; \
+                }
+       @./mkconfig -a IVML24 ppc mpc8xx ivm
+
+IVMS8_256_config \
+IVMS8_128_config \
+IVMS8_config:  unconfig
+       @ >include/config.h
+       @[ -z "$(findstring IVMS8_config,$@)" ] || \
+                { echo "#define CONFIG_IVMS8_16M"      >>include/config.h ; \
+                }
+       @[ -z "$(findstring IVMS8_128_config,$@)" ] || \
+                { echo "#define CONFIG_IVMS8_32M"      >>include/config.h ; \
+                }
+       @[ -z "$(findstring IVMS8_256_config,$@)" ] || \
+                { echo "#define CONFIG_IVMS8_64M"      >>include/config.h ; \
+                }
+       @./mkconfig -a IVMS8 ppc mpc8xx ivm
+
+LANTEC_config  :       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx lantec
+
+lwmon_config:          unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx lwmon
+
+MBX_config     \
+MBX860T_config:        unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx mbx8xx
+
+MHPC_config:           unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx mhpc eltec
+
+MVS1_config :          unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx mvs1
+
+NETVIA_config:         unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx netvia
+
+NX823_config:          unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx nx823
+
+pcu_e_config:          unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx pcu_e siemens
+
+R360MPI_config:        unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx r360mpi
+
+RPXClassic_config:     unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx RPXClassic
+
+RPXlite_config:                unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx RPXlite
+
+RRvision_config:       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx RRvision
+
+RRvision_LCD_config:   unconfig
+       @echo "#define CONFIG_LCD" >include/config.h
+       @echo "#define CONFIG_SHARP_LQ104V7DS01" >>include/config.h
+       @./mkconfig -a RRvision ppc mpc8xx RRvision
+
+SM850_config   :       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx tqm8xx
+
+SPD823TS_config:       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx spd8xx
+
+SXNI855T_config:       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8xx sixnet
+
+# Play some tricks for configuration selection
+# All boards can come with 50 MHz (default), 66MHz or 80MHz clock,
+# but only 855 and 860 boards may come with FEC
+# and 823 boards may have LCD support
+xtract_8xx = $(subst _66MHz,,$(subst _80MHz,,$(subst _LCD,,$(subst _FEC,,$(subst _config,,$1)))))
+
+FPS850L_config         \
+TQM823L_config         \
+TQM823L_66MHz_config   \
+TQM823L_80MHz_config   \
+TQM823L_LCD_config     \
+TQM823L_LCD_66MHz_config \
+TQM823L_LCD_80MHz_config \
+TQM850L_config         \
+TQM850L_66MHz_config   \
+TQM850L_80MHz_config   \
+TQM855L_config         \
+TQM855L_66MHz_config   \
+TQM855L_80MHz_config   \
+TQM855L_FEC_config     \
+TQM855L_FEC_66MHz_config \
+TQM855L_FEC_80MHz_config \
+TQM860L_config         \
+TQM860L_66MHz_config   \
+TQM860L_80MHz_config   \
+TQM860L_FEC_config     \
+TQM860L_FEC_66MHz_config       \
+TQM860L_FEC_80MHz_config:      unconfig
+       @ >include/config.h
+       @[ -z "$(findstring _FEC,$@)" ] || \
+               { echo "#define CONFIG_FEC_ENET"        >>include/config.h ; \
+                 echo "... with FEC support" ; \
+               }
+       @[ -z "$(findstring _66MHz,$@)" ] || \
+               { echo "#define CONFIG_66MHz"           >>include/config.h ; \
+                 echo "... with 66MHz system clock" ; \
+               }
+       @[ -z "$(findstring _80MHz,$@)" ] || \
+               { echo "#define CONFIG_80MHz"           >>include/config.h ; \
+                 echo "... with 80MHz system clock" ; \
+               }
+       @[ -z "$(findstring _LCD,$@)" ] || \
+               { echo "#define CONFIG_LCD"             >>include/config.h ; \
+                 echo "#define CONFIG_NEC_NL6648BC20"  >>include/config.h ; \
+                 echo "... with LCD display" ; \
+               }
+       @./mkconfig -a $(call xtract_8xx,$@) ppc mpc8xx tqm8xx
+
+TTTech_config: unconfig
+       @echo "#define CONFIG_LCD" >include/config.h
+       @echo "#define CONFIG_SHARP_LQ104V7DS01" >>include/config.h
+       @./mkconfig -a TQM823L ppc mpc8xx tqm8xx
+
+#########################################################################
+## PPC4xx Systems
+#########################################################################
+
+ADCIOP_config: unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx adciop esd
+
+AR405_config:  unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx ar405 esd
+
+CANBT_config:  unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx canbt esd
+
+CPCI405_config         \
+CPCI4052_config:       unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx cpci405 esd
+       @echo "BOARD_REVISION = $(@:_config=)"  >>include/config.mk
+
+CPCI440_config:        unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx cpci440 esd
+
+CPCIISER4_config:      unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx cpciiser4 esd
+
+CRAYL1_config:unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx L1 cray
+
+DASA_SIM_config: unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx dasa_sim esd
+
+DU405_config:  unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx du405 esd
+
+EBONY_config:unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx ebony
+
+ERIC_config:unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx eric
+
+MIP405_config:unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx mip405 mpl
+
+ML2_config:unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx ml2
+
+OCRTC_config           \
+ORSG_config:   unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx ocrtc esd
+
+PCI405_config: unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx pci405 esd
+
+PIP405_config:unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx pip405 mpl
+
+W7OLMC_config  \
+W7OLMG_config: unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx w7o
+
+WALNUT405_config:unconfig
+       @./mkconfig $(@:_config=) ppc ppc4xx walnut405
+
+#########################################################################
+## MPC824x Systems
+#########################################################################
+BMW_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc824x bmw
+
+CU824_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc824x cu824
+
+MOUSSE_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc824x mousse
+
+MUSENKI_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc824x musenki
+
+OXC_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc824x oxc
+
+PN62_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc824x pn62
+
+Sandpoint8240_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc824x sandpoint
+
+Sandpoint8245_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc824x sandpoint
+
+utx8245_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc824x utx8245
+
+#########################################################################
+## MPC8260 Systems
+#########################################################################
+xtract_82xx = $(subst _ROMBOOT,,$(subst _L2,,$(subst _266MHz,,$(subst _300MHz,,$(subst _config,,$1)))))
+
+cogent_mpc8260_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc8260 cogent
+
+CPU86_config   \
+CPU86_ROMBOOT_config: unconfig
+       @./mkconfig $(call xtract_82xx,$@) ppc mpc8260 cpu86
+       @cd ./include ;                         \
+       if [ "$(findstring _ROMBOOT_,$@)" ] ; then \
+               echo "CONFIG_BOOT_ROM = y" >> config.mk ; \
+               echo "... booting from 8-bit flash" ; \
+       else \
+               echo "CONFIG_BOOT_ROM = n" >> config.mk ; \
+               echo "... booting from 64-bit flash" ; \
+       fi; \
+       echo "export CONFIG_BOOT_ROM" >> config.mk;
+
+ep8260_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc8260 ep8260
+
+gw8260_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc8260 gw8260
+
+hymod_config:  unconfig
+       @./mkconfig $(@:_config=) ppc mpc8260 hymod
+
+IPHASE4539_config:     unconfig
+       @./mkconfig $(@:_config=) ppc mpc8260 iphase4539
+
+MPC8260ADS_config:     unconfig
+       @./mkconfig $(@:_config=) ppc mpc8260 mpc8260ads
+
+PM826_config   \
+PM826_ROMBOOT_config: unconfig
+       @./mkconfig $(call xtract_82xx,$@) ppc mpc8260 pm826
+       @cd ./include ;                         \
+       if [ "$(findstring _ROMBOOT_,$@)" ] ; then \
+               echo "CONFIG_BOOT_ROM = y" >> config.mk ; \
+               echo "... booting from 8-bit flash" ; \
+       else \
+               echo "CONFIG_BOOT_ROM = n" >> config.mk ; \
+               echo "... booting from 64-bit flash" ; \
+       fi; \
+       echo "export CONFIG_BOOT_ROM" >> config.mk; \
+
+ppmc8260_config:       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8260 ppmc8260
+
+RPXsuper_config:       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8260 rpxsuper
+
+rsdproto_config:       unconfig
+       @./mkconfig $(@:_config=) ppc mpc8260 rsdproto
+
+sacsng_config: unconfig
+       @./mkconfig $(@:_config=) ppc mpc8260 sacsng
+
+sbc8260_config:        unconfig
+       @./mkconfig $(@:_config=) ppc mpc8260 sbc8260
+
+SCM_config:            unconfig
+       @./mkconfig $(@:_config=) ppc mpc8260 SCM siemens
+
+TQM8260_config \
+TQM8260_L2_config      \
+TQM8260_266MHz_config  \
+TQM8260_L2_266MHz_config \
+TQM8260_300MHz_config: unconfig
+       @ >include/config.h
+       @if [ "$(findstring _L2_,$@)" ] ; then \
+               echo "#define CONFIG_L2_CACHE"  >>include/config.h ; \
+               echo "... with L2 Cache support (60x Bus Mode)" ; \
+       else \
+               echo "#undef CONFIG_L2_CACHE"   >>include/config.h ; \
+               echo "... without L2 Cache support" ; \
+       fi
+       @[ -z "$(findstring _266MHz,$@)" ] || \
+               { echo "#define CONFIG_266MHz"  >>include/config.h ; \
+                 echo "... with 266MHz system clock" ; \
+               }
+       @[ -z "$(findstring _300MHz,$@)" ] || \
+               { echo "#define CONFIG_300MHz"  >>include/config.h ; \
+                 echo "... with 300MHz system clock" ; \
+               }
+       @./mkconfig -a $(call xtract_82xx,$@) ppc mpc8260 tqm8260
+
+#########################################################################
+## 74xx/7xx Systems
+#########################################################################
+
+EVB64260_config        \
+EVB64260_750CX_config: unconfig
+       @./mkconfig EVB64260 ppc 74xx_7xx evb64260
+
+ZUMA_config:   unconfig
+       @./mkconfig $(@:_config=) ppc 74xx_7xx evb64260
+
+PCIPPC2_config \
+PCIPPC6_config: unconfig
+       @./mkconfig $(@:_config=) ppc 74xx_7xx pcippc2
+
+BAB7xx_config: unconfig
+       @./mkconfig $(@:_config=) ppc 74xx_7xx bab7xx eltec
+
+ELPPC_config: unconfig
+       @./mkconfig $(@:_config=) ppc 74xx_7xx elppc eltec
+
+#========================================================================
+# ARM
+#========================================================================
+#########################################################################
+## StrongARM Systems
+#########################################################################
+
+lart_config    :       unconfig
+       @./mkconfig $(@:_config=) arm sa1100 lart
+
+dnp1110_config :       unconfig
+       @./mkconfig $(@:_config=) arm sa1100 dnp1110
+
+shannon_config :       unconfig
+       @./mkconfig $(@:_config=) arm sa1100 shannon
+
+#########################################################################
+## ARM920T Systems
+#########################################################################
+
+smdk2400_config        :       unconfig
+       @./mkconfig $(@:_config=) arm arm920t smdk2400
+
+smdk2410_config        :       unconfig
+       @./mkconfig $(@:_config=) arm arm920t smdk2410
+
+trab_config :          unconfig
+       @./mkconfig $(@:_config=) arm arm920t trab
+
+#########################################################################
+## ARM720T Systems
+#########################################################################
+
+impa7_config   :       unconfig
+       @./mkconfig $(@:_config=) arm arm720t impa7
+
+ep7312_config  :       unconfig
+       @./mkconfig $(@:_config=) arm arm720t ep7312
+
+#########################################################################
+## Xscale Systems
+#########################################################################
+
+lubbock_config :       unconfig
+       @./mkconfig $(@:_config=) arm xscale lubbock
+
+cradle_config  :       unconfig
+       @./mkconfig $(@:_config=) arm xscale cradle
+
+csb226_config  :       unconfig
+       @./mkconfig $(@:_config=) arm xscale csb226
+
+#########################################################################
+
+clean:
+       find . -type f \
+               \( -name 'core' -o -name '*.bak' -o -name '*~' \
+               -o -name '*.o'  -o -name '*.a'  \) -print \
+               | xargs rm -f
+       rm -f examples/hello_world examples/timer examples/eepro100_eeprom
+       rm -f tools/img2srec tools/mkimage tools/envcrc tools/gen_eth_addr
+       rm -f tools/easylogo/easylogo tools/bmp_logo
+       rm -f tools/gdb/astest tools/gdb/gdbcont tools/gdb/gdbsend
+
+clobber:       clean
+       find . -type f \
+               \( -name .depend -o -name '*.srec' -o -name '*.bin' \) \
+               -print \
+               | xargs rm -f
+       rm -f $(OBJS) *.bak tags TAGS
+       rm -fr *.*~
+       rm -f u-boot u-boot.bin u-boot.elf u-boot.srec u-boot.map System.map
+       rm -f tools/crc32.c tools/environment.c
+       rm -f include/asm/arch include/asm
+
+mrproper \
+distclean:     clobber unconfig
+
+backup:
+       F=`basename $(TOPDIR)` ; cd .. ; \
+       gtar --force-local -zcvf `date "+$$F-%Y-%m-%d-%T.tar.gz"` $$F
+
+#########################################################################
diff --git a/board/cogent/README b/board/cogent/README
new file mode 100644 (file)
index 0000000..e6eef66
--- /dev/null
@@ -0,0 +1,118 @@
+Cogent Modular Architecture configuration
+-----------------------------------------
+
+As the name suggests, the Cogent platform is a modular system where
+you have a motherboard into which plugs a cpu module and one or more
+i/o modules. This provides very nice flexibility, but makes the
+configuration task somewhat harder.
+
+The possible Cogent motherboards are:
+
+Code           Config Variable         Description
+----           ---------------         -----------
+
+CMA101         CONFIG_CMA101           32MB ram, 2 ser, 1 par, rtc, dipsw,
+                                       2x16 lcd, eth(?)
+CMA102         CONFIG_CMA102           32MB ram, 2 ser, 1 par, rtc, dipsw,
+                                       2x16 lcd
+CMA111         CONFIG_CMA111           32MB ram, 1MB flash, 4 ser, 1 par,
+                                       rtc, ps/2 kbd/mse, 2x16 lcd, 2xPCI,
+                                       10/100TP eth
+CMA120         CONFIG_CMA120           32MB ram, 1MB flash, 4 ser, 1 par,
+                                       rtc, ps/2 kbd/mse, 2x16 lcd, 2xPCI,
+                                       10/100TP eth, 2xPCMCIA, video/lcd-panel
+CMA150         CONFIG_CMA150           8MB ram, 1MB flash, 2 ser, 1 par, rtc,
+                                       ps/2 kbd/mse, 2x16 lcd
+
+The possible Cogent PowerPC CPU modules are:
+
+Code           Config Variable         Description
+----           ---------------         -----------
+
+CMA278-603EV   CONFIG_CMA278_603EV     PPC603ev CPU, 66MHz clock, 512K EPROM,
+                                       JTAG/COP
+CMA278-603ER   CONFIG_CMA278_603ER     PPC603er CPU, 66MHz clock, 512K EPROM,
+                                       JTAG/COP
+CMA278-740     CONFIG_CMA278_740       PPC740 CPU, 66MHz clock, 512K EPROM,
+                                       JTAG/COP
+CMA280-509     CONFIG_CMA280_509       MPC505/509 CPU, 50MHz clock,
+                                       512K EPROM, BDM
+CMA282         CONFIG_CMA282           MPC8260 CPU, 66MHz clock, 512K EPROM,
+                                       JTAG, 16M RAM, 1 x ser (SMC2),
+                                       1 x 10baseT PHY (SCC4), 1 x 10/100 TP
+                                       PHY (FCC1), 2 x 48pin DIN (FCC2 + TDM1)
+CMA285         CONFIG_CMA285           MPC801 CPU, 33MHz clock, 512K EPROM,
+                                       BDM
+CMA286-21      CONFIG_CMA286_21        MPC821 CPU, 66MHz clock, 512K EPROM,
+                                       BDM, 16M RAM, 2 x ser (SMC1 + SMC2),
+                                       1 x 10baseT PHY (SCC2)
+CMA286-60-OLD  CONFIG_CMA286_60_OLD    MPC860 CPU, 33MHz clock, 128K EPROM,
+                                       BDM
+CMA286-60      CONFIG_CMA286_60        MPC860 CPU, 66MHz clock, 512K EPROM,
+                                       BDM, 16M RAM, 2 x ser (SMC1 + SMC2),
+                                       1 x 10baseT PHY (SCC2)
+CMA286-60P     CONFIG_CMA286_60P       MPC860P CPU, 66MHz clock, 512K EPROM,
+                                       BDM, 16M RAM, 2 x ser (SMC1 + SMC2),
+                                       1 x 10baseT PHY (SCC2)
+CMA287-23      CONFIG_CMA287_23        MPC823 CPU, 33MHz clock, 512K EPROM,
+                                       BDM
+CMA287-50      CONFIG_CMA287_50        MPC850 CPU, 33MHz clock, 512K EPROM,
+                                       BDM
+
+(there are a lot of other cpu modules with ARM, MIPS and M-CORE CPUs,
+but we'll worry about those later).
+
+The possible Cogent CMA I/O Modules are:
+
+Code           Config Variable         Description
+----           ---------------         -----------
+
+CMA302         CONFIG_CMA302           up to 16M flash, ps/2 keyboard/mouse
+CMA352         CONFIG_CMA352           CMAbus <=> PCI
+
+Currently supported:
+
+       Motherboards:   CMA102
+       CPU Modules:    CMA286-60-OLD
+       I/O Modules:    CMA302 I/O module
+
+To configure, perform the usual U-Boot configuration task of editing
+"include/config_cogent_mpc8xx.h" and reviewing all the options and
+settings in there. In particular, check the chip select values
+installed into the memory controller's various option and base
+registers - these are set by the defines CFG_CMA_CSn_{BASE,SIZE} and
+CFG_{B,O}Rn_PRELIM. Also be careful of the clock settings installed
+into the SCCR - via the define CFG_SCCR. Finally, decide whether you
+want the serial console on motherboard serial port A or on one of the
+8xx SMC ports, and set CONFIG_8xx_CONS_{SMC1,SMC2,NONE} accordingly
+(NONE means use Cogent motherboard serial port A).
+
+Then edit the file "cogent/config.mk". Firstly, set TEXT_BASE to be
+the base address of the EPROM for the CPU module. This should be the
+same as the value selected for CFG_MONITOR_BASE in
+"include/config_cogent_*.h" (in fact, I have made this automatic via
+the -DTEXT_BASE=... option in CPPFLAGS).
+
+Finally, set the values of the make variables $(CMA_MB) and $(CMA_IOMS).
+
+$(CMA_MB) is the name of the directory that contains support for your
+motherboard. At this stage, only "cma10x" exists, which supports the
+CMA101 and CMA102 motherboards - but only selected devices, namely
+serial, lcd and dipsw.
+
+$(CMA_IOMS) is a list of zero or more directories that contain
+support for the i/o modules you have installed. At this stage, only
+"cma302" exists, which supports the CMA302 flash i/o module - but
+only the flash part, not the ps/2 keyboard and mouse interfaces.
+
+There should be a make variable for each of the above directories,
+which is the directory name with "_O" appended. This make variable is
+a list of object files to compile from that directory and include in
+the library.
+
+       e.g. cma10x_O = serial.o ...
+
+That's it. Good Luck.
+
+Murray.Jensen@cmst.csiro.au
+August 31, 2000.
diff --git a/board/cpu86/config.mk b/board/cpu86/config.mk
new file mode 100644 (file)
index 0000000..00354c4
--- /dev/null
@@ -0,0 +1,40 @@
+#
+# (C) Copyright 2001
+# 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
+#
+
+#
+# CPU86 boards
+#
+
+# This should be equal to the CFG_FLASH_BASE define in config_CPU86.h
+# for the "final" configuration, with U-Boot in flash, or the address
+# in RAM where U-Boot is loaded at for debugging.
+#
+
+ifeq ($(CONFIG_BOOT_ROM),y)
+       TEXT_BASE := 0xFF800000
+       PLATFORM_CPPFLAGS += -DCONFIG_BOOT_ROM
+else
+       TEXT_BASE := 0xFF000000
+endif
+
+PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE) -I$(TOPDIR)
diff --git a/board/cray/L1/config.mk b/board/cray/L1/config.mk
new file mode 100644 (file)
index 0000000..b69fe8e
--- /dev/null
@@ -0,0 +1,26 @@
+#
+# (C) Copyright 2000
+# 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
+#
+
+# Note: I make an "image" from U-Boot itself, which prefixes 0x40 bytes of
+# header info, hence start address is thus shifted.
+TEXT_BASE = 0xFFFD0040
diff --git a/board/cu824/README b/board/cu824/README
new file mode 100644 (file)
index 0000000..d38c48e
--- /dev/null
@@ -0,0 +1,453 @@
+ppcboot for a CU824 board
+---------------------------
+
+CU824 has two banks of flash 8MB each. In board's notation, bank 0 is
+the one at the address of 0xFF800000 and bank 1 is the one at the
+address of 0xFF000000. On power-up the processor jumps to the address
+of 0xFFF00100, the last megabyte of the bank 0 of flash. Thus,
+U-Boot is configured to reside in flash starting at the address of
+0xFFF00000. The environment space is not embedded in the U-Boot code
+and is located in flash separately from U-Boot, at the address of
+0xFF008000.
+
+
+U-Boot test results
+--------------------
+
+x.x Operation on all available serial consoles
+
+x.x.x CONFIG_CONS_INDEX 1
+
+
+ppcboot 0.9.2 (May 13 2001 - 17:56:46)
+
+Initializing...
+  CPU:   MPC8240 Revsion 1.1 at 247 MHz: 16 kB I-Cache 16 kB D-Cache
+  Board: CU824 Revision 1 Local Bus at 99 MHz
+  DRAM:  64 MB
+  FLASH: 16 MB
+  In:    serial
+  Out:   serial
+  Err:   serial
+
+Hit any key to stop autoboot:  0
+=>
+=>he
+go      - start application at address 'addr'
+run     - run commands in an environment variable
+bootm   - boot application image from memory
+bootp   - boot image via network using BootP/TFTP protocol
+tftpboot- boot image via network using TFTP protocol
+               and env variables ipaddr and serverip
+rarpboot- boot image via network using RARP/TFTP protocol
+bootd   - boot default, i.e., run 'bootcmd'
+loads   - load S-Record file over serial line
+loadb   - load binary file over serial line (kermit mode)
+md      - memory display
+mm      - memory modify (auto-incrementing)
+nm      - memory modify (constant address)
+mw      - memory write (fill)
+cp      - memory copy
+cmp     - memory compare
+crc32   - checksum calculation
+base    - print or set address offset
+printenv- print environment variables
+setenv  - set environment variables
+saveenv - save environment variables to persistent storage
+protect - enable or disable FLASH write protection
+erase   - erase FLASH memory
+flinfo  - print FLASH memory information
+bdinfo  - print Board Info structure
+iminfo  - print header information for application image
+coninfo - print console devices and informations
+loop    - infinite loop on address range
+mtest   - simple RAM test
+icache  - enable or disable instruction cache
+dcache  - enable or disable data cache
+reset   - Perform RESET of the CPU
+echo    - echo args to console
+version - print monitor version
+help    - print online help
+?       - alias for 'help'
+=>
+
+
+x.x.x CONFIG_CONS_INDEX 2
+
+**** NOT TESTED ****
+
+x.x Flash Driver Operation
+
+x.x.x Erase Operation
+
+
+ppcboot 0.9.2 (May 13 2001 - 17:56:46)
+
+Initializing...
+  CPU:   MPC8240 Revsion 1.1 at 247 MHz: 16 kB I-Cache 16 kB D-Cache
+  Board: CU824 Revision 1 Local Bus at 99 MHz
+  DRAM:  64 MB
+  FLASH: 16 MB
+  In:    serial
+  Out:   serial
+  Err:   serial
+
+Hit any key to stop autoboot:  0
+=>
+=>
+=>
+=>md ff000000
+ff000000: 27051956 70706362 6f6f7420 302e382e    '..Vppcboot 0.8.
+ff000010: 3320284d 61792031 31203230 3031202d    3 (May 11 2001 -
+ff000020: 2031343a 35373a30 33290000 00000000     14:57:03)......
+ff000030: 00000000 00000000 00000000 00000000    ................
+ff000040: 00000000 00000000 00000000 00000000    ................
+ff000050: 00000000 00000000 00000000 00000000    ................
+ff000060: 00000000 00000000 00000000 00000000    ................
+ff000070: 00000000 00000000 00000000 00000000    ................
+ff000080: 00000000 00000000 00000000 00000000    ................
+ff000090: 00000000 00000000 00000000 00000000    ................
+ff0000a0: 00000000 00000000 00000000 00000000    ................
+ff0000b0: 00000000 00000000 00000000 00000000    ................
+ff0000c0: 00000000 00000000 00000000 00000000    ................
+ff0000d0: 00000000 00000000 00000000 00000000    ................
+ff0000e0: 00000000 00000000 00000000 00000000    ................
+ff0000f0: 00000000 00000000 00000000 00000000    ................
+=>erase ff000000 ff007fff
+Erase Flash from 0xff000000 to 0xff007fff
+ done
+Erased 1 sectors
+=>md ff000000
+ff000000: ffffffff ffffffff ffffffff ffffffff    ................
+ff000010: ffffffff ffffffff ffffffff ffffffff    ................
+ff000020: ffffffff ffffffff ffffffff ffffffff    ................
+ff000030: ffffffff ffffffff ffffffff ffffffff    ................
+ff000040: ffffffff ffffffff ffffffff ffffffff    ................
+ff000050: ffffffff ffffffff ffffffff ffffffff    ................
+ff000060: ffffffff ffffffff ffffffff ffffffff    ................
+ff000070: ffffffff ffffffff ffffffff ffffffff    ................
+ff000080: ffffffff ffffffff ffffffff ffffffff    ................
+ff000090: ffffffff ffffffff ffffffff ffffffff    ................
+ff0000a0: ffffffff ffffffff ffffffff ffffffff    ................
+ff0000b0: ffffffff ffffffff ffffffff ffffffff    ................
+ff0000c0: ffffffff ffffffff ffffffff ffffffff    ................
+ff0000d0: ffffffff ffffffff ffffffff ffffffff    ................
+ff0000e0: ffffffff ffffffff ffffffff ffffffff    ................
+ff0000f0: ffffffff ffffffff ffffffff ffffffff    ................
+=>
+
+x.x.x Information
+
+
+ppcboot 0.9.2 (May 13 2001 - 17:56:46)
+
+Initializing...
+  CPU:   MPC8240 Revsion 1.1 at 247 MHz: 16 kB I-Cache 16 kB D-Cache
+  Board: CU824 Revision 1 Local Bus at 99 MHz
+  DRAM:  64 MB
+  FLASH: 16 MB
+  In:    serial
+  Out:   serial
+  Err:   serial
+
+Hit any key to stop autoboot:  0
+=>
+=>
+=>
+=>
+=>flinfo
+
+Bank # 1: Intel: 28F160F3B (16Mbit)
+  Size: 8 MB in 39 Sectors
+  Sector Start Addresses:
+    FF000000      FF008000 (RO) FF010000      FF018000      FF020000
+    FF028000      FF030000      FF038000      FF040000      FF080000
+    FF0C0000      FF100000      FF140000      FF180000      FF1C0000
+    FF200000      FF240000      FF280000      FF2C0000      FF300000
+    FF340000      FF380000      FF3C0000      FF400000      FF440000
+    FF480000      FF4C0000      FF500000      FF540000      FF580000
+    FF5C0000      FF600000      FF640000      FF680000      FF6C0000
+    FF700000      FF740000      FF780000      FF7C0000
+
+Bank # 2: Intel: 28F160F3B (16Mbit)
+  Size: 8 MB in 39 Sectors
+  Sector Start Addresses:
+    FF800000      FF808000      FF810000      FF818000      FF820000
+    FF828000      FF830000      FF838000      FF840000      FF880000
+    FF8C0000      FF900000      FF940000      FF980000      FF9C0000
+    FFA00000      FFA40000      FFA80000      FFAC0000      FFB00000
+    FFB40000      FFB80000      FFBC0000      FFC00000      FFC40000
+    FFC80000      FFCC0000      FFD00000      FFD40000      FFD80000
+    FFDC0000      FFE00000      FFE40000      FFE80000      FFEC0000
+    FFF00000 (RO) FFF40000      FFF80000      FFFC0000
+=>
+
+x.x.x Flash Programming
+
+
+ppcboot 0.9.2 (May 13 2001 - 17:56:46)
+
+Initializing...
+  CPU:   MPC8240 Revsion 1.1 at 247 MHz: 16 kB I-Cache 16 kB D-Cache
+  Board: CU824 Revision 1 Local Bus at 99 MHz
+  DRAM:  64 MB
+  FLASH: 16 MB
+  In:    serial
+  Out:   serial
+  Err:   serial
+
+Hit any key to stop autoboot:  0
+=>
+=>
+=>
+=>
+=>cp 0 ff000000 20
+Copy to Flash... done
+=>md 0
+00000000: 0ec08ce0 03f9800c 00000001 040c0000    ................
+00000010: 00000001 03fd1aa0 03fd1ae4 03fd1a00    ................
+00000020: 03fd1a58 03fceb04 03fd34cc 03fd34d0    ...X......4...4.
+00000030: 03fcd5bc 03fcdabc 00000000 00000000    ................
+00000040: 00000000 00000000 00000000 00000000    ................
+00000050: 00000000 00000000 00000000 00000000    ................
+00000060: 00000000 00000000 00000000 00000000    ................
+00000070: 00000000 00000000 00000000 00000000    ................
+00000080: 00000000 00000000 00000000 00000000    ................
+00000090: 00000000 00000000 00000000 00000000    ................
+000000a0: 00000000 00000000 00000000 00000000    ................
+000000b0: 00000000 00000000 00000000 00000000    ................
+000000c0: 00000000 00000000 00000000 00000000    ................
+000000d0: 00000000 00000000 00000000 00000000    ................
+000000e0: 00000000 00000000 00000000 00000000    ................
+000000f0: 00000000 00000000 00000000 00000000    ................
+=>md ff000000
+ff000000: 0ec08ce0 03f9800c 00000001 040c0000    ................
+ff000010: 00000001 03fd1aa0 03fd1ae4 03fd1a00    ................
+ff000020: 03fd1a58 03fceb04 03fd34cc 03fd34d0    ...X......4...4.
+ff000030: 03fcd5bc 03fcdabc 00000000 00000000    ................
+ff000040: 00000000 00000000 00000000 00000000    ................
+ff000050: 00000000 00000000 00000000 00000000    ................
+ff000060: 00000000 00000000 00000000 00000000    ................
+ff000070: 00000000 00000000 00000000 00000000    ................
+ff000080: ffffffff ffffffff ffffffff ffffffff    ................
+ff000090: ffffffff ffffffff ffffffff ffffffff    ................
+ff0000a0: ffffffff ffffffff ffffffff ffffffff    ................
+ff0000b0: ffffffff ffffffff ffffffff ffffffff    ................
+ff0000c0: ffffffff ffffffff ffffffff ffffffff    ................
+ff0000d0: ffffffff ffffffff ffffffff ffffffff    ................
+ff0000e0: ffffffff ffffffff ffffffff ffffffff    ................
+ff0000f0: ffffffff ffffffff ffffffff ffffffff    ................
+=>
+
+x.x.x Storage of environment variables in flash
+
+
+ppcboot 0.9.2 (May 13 2001 - 17:56:46)
+
+Initializing...
+  CPU:   MPC8240 Revsion 1.1 at 247 MHz: 16 kB I-Cache 16 kB D-Cache
+  Board: CU824 Revision 1 Local Bus at 99 MHz
+  DRAM:  64 MB
+  FLASH: 16 MB
+  In:    serial
+  Out:   serial
+  Err:   serial
+
+Hit any key to stop autoboot:  0
+=>
+=>printenv
+bootargs=
+bootcmd=bootm FE020000
+bootdelay=5
+baudrate=9600
+ipaddr=192.168.4.2
+serverip=192.168.4.1
+ethaddr=00:40:42:01:00:a0
+stdin=serial
+stdout=serial
+stderr=serial
+
+Environment size: 167/32764 bytes
+=>setenv myvar 1234
+=>save_env
+Un-Protected 1 sectors
+Erasing Flash...
+ done
+Erased 1 sectors
+Saving Environment to Flash...
+Protected 1 sectors
+=>reset
+
+
+ppcboot 0.9.2 (May 13 2001 - 17:56:46)
+
+Initializing...
+  CPU:   MPC8240 Revsion 1.1 at 247 MHz: 16 kB I-Cache 16 kB D-Cache
+  Board: CU824 Revision 1 Local Bus at 99 MHz
+  DRAM:  64 MB
+  FLASH: 16 MB
+  In:    serial
+  Out:   serial
+  Err:   serial
+
+Hit any key to stop autoboot:  0
+=>
+=>printenv
+bootargs=
+bootcmd=bootm FE020000
+bootdelay=5
+baudrate=9600
+ipaddr=192.168.4.2
+serverip=192.168.4.1
+ethaddr=00:40:42:01:00:a0
+myvar=1234
+stdin=serial
+stdout=serial
+stderr=serial
+
+Environment size: 178/32764 bytes
+=>
+
+x.x Image Download and run over serial port
+
+
+ppcboot 0.9.2 (May 13 2001 - 17:56:46)
+
+Initializing...
+  CPU:   MPC8240 Revsion 1.1 at 247 MHz: 16 kB I-Cache 16 kB D-Cache
+  Board: CU824 Revision 1 Local Bus at 99 MHz
+  DRAM:  64 MB
+  FLASH: 16 MB
+  In:    serial
+  Out:   serial
+  Err:   serial
+
+Hit any key to stop autoboot:  0
+=>
+=>
+=>mw 40000 0 10000
+=>md 40000
+00040000: 00000000 00000000 00000000 00000000    ................
+00040010: 00000000 00000000 00000000 00000000    ................
+00040020: 00000000 00000000 00000000 00000000    ................
+00040030: 00000000 00000000 00000000 00000000    ................
+00040040: 00000000 00000000 00000000 00000000    ................
+00040050: 00000000 00000000 00000000 00000000    ................
+00040060: 00000000 00000000 00000000 00000000    ................
+00040070: 00000000 00000000 00000000 00000000    ................
+00040080: 00000000 00000000 00000000 00000000    ................
+00040090: 00000000 00000000 00000000 00000000    ................
+000400a0: 00000000 00000000 00000000 00000000    ................
+000400b0: 00000000 00000000 00000000 00000000    ................
+000400c0: 00000000 00000000 00000000 00000000    ................
+000400d0: 00000000 00000000 00000000 00000000    ................
+000400e0: 00000000 00000000 00000000 00000000    ................
+000400f0: 00000000 00000000 00000000 00000000    ................
+=>loads
+## Ready for S-Record download ...
+
+(Back at xpert.denx.de)
+[vlad@xpert vlad]$ cat hello_world.srec >/dev/ttyS0
+[vlad@xpert vlad]$ kermit -l /dev/ttyS0 -b 9600 -c
+Connecting to /dev/ttyS0, speed 9600.
+The escape character is Ctrl-\ (ASCII 28, FS)
+Type the escape character followed by C to get back,
+or followed by ? to see other options.
+md 40000
+00040000: 00018148 9421ffe0 7c0802a6 bf61000c    ...H.!..|....a..
+00040010: 90010024 48000005 7fc802a6 801effe8    ...$H...........
+00040020: 7fc0f214 7c7f1b78 813f0038 7c9c2378    ....|..x.?.8|.#x
+00040030: 807e8000 7cbd2b78 80090010 3b600000    .~..|.+x....;`..
+00040040: 7c0803a6 4e800021 813f0038 7f84e378    |...N..!.?.8...x
+00040050: 807e8004 80090010 7c0803a6 4e800021    .~......|...N..!
+00040060: 7c1be000 4181003c 80bd0000 813f0038    |...A..<.....?.8
+00040070: 3bbd0004 2c050000 40820008 80be8008    ;...,...@.......
+00040080: 80090010 7f64db78 807e800c 3b7b0001    .....d.x.~..;{..
+00040090: 7c0803a6 4e800021 7c1be000 4081ffcc    |...N..!|...@...
+000400a0: 813f0038 807e8010 80090010 7c0803a6    .?.8.~......|...
+000400b0: 4e800021 813f0038 80090004 7c0803a6    N..!.?.8....|...
+000400c0: 4e800021 2c030000 4182ffec 813f0038    N..!,...A....?.8
+000400d0: 80090000 7c0803a6 4e800021 813f0038    ....|...N..!.?.8
+000400e0: 807e8014 80090010 7c0803a6 4e800021    .~......|...N..!
+000400f0: 38600000 80010024 7c0803a6 bb61000c    8`.....$|....a..
+=>go 40004
+## Starting application at 0x00040004 ...
+Hello World
+argc = 1
+argv[0] = "40004"
+argv[1] = "<NULL>"
+Hit any key to exit ...
+
+## Application terminated, rc = 0x0
+=>
+
+x.x Image download and run over ethernet interface
+
+
+ppcboot 0.9.2 (May 13 2001 - 17:56:46)
+
+Initializing...
+  CPU:   MPC8240 Revsion 1.1 at 247 MHz: 16 kB I-Cache 16 kB D-Cache
+  Board: CU824 Revision 1 Local Bus at 99 MHz
+  DRAM:  64 MB
+  FLASH: 16 MB
+  In:    serial
+  Out:   serial
+  Err:   serial
+
+Hit any key to stop autoboot:  0
+=>
+=>
+=>mw 40000 0 10000
+=>md 40000
+00040000: 00000000 00000000 00000000 00000000    ................
+00040010: 00000000 00000000 00000000 00000000    ................
+00040020: 00000000 00000000 00000000 00000000    ................
+00040030: 00000000 00000000 00000000 00000000    ................
+00040040: 00000000 00000000 00000000 00000000    ................
+00040050: 00000000 00000000 00000000 00000000    ................
+00040060: 00000000 00000000 00000000 00000000    ................
+00040070: 00000000 00000000 00000000 00000000    ................
+00040080: 00000000 00000000 00000000 00000000    ................
+00040090: 00000000 00000000 00000000 00000000    ................
+000400a0: 00000000 00000000 00000000 00000000    ................
+000400b0: 00000000 00000000 00000000 00000000    ................
+000400c0: 00000000 00000000 00000000 00000000    ................
+000400d0: 00000000 00000000 00000000 00000000    ................
+000400e0: 00000000 00000000 00000000 00000000    ................
+000400f0: 00000000 00000000 00000000 00000000    ................
+=>tftpboot 40000 hello_world.bin
+ARP broadcast 1
+TFTP from server 192.168.4.1; our IP address is 192.168.4.2
+Filename 'hello_world.bin'.
+Load address: 0x40000
+Loading: #############
+done
+Bytes transferred = 65912 (10178 hex)
+=>md 40000
+00040000: 00018148 9421ffe0 7c0802a6 bf61000c    ...H.!..|....a..
+00040010: 90010024 48000005 7fc802a6 801effe8    ...$H...........
+00040020: 7fc0f214 7c7f1b78 813f0038 7c9c2378    ....|..x.?.8|.#x
+00040030: 807e8000 7cbd2b78 80090010 3b600000    .~..|.+x....;`..
+00040040: 7c0803a6 4e800021 813f0038 7f84e378    |...N..!.?.8...x
+00040050: 807e8004 80090010 7c0803a6 4e800021    .~......|...N..!
+00040060: 7c1be000 4181003c 80bd0000 813f0038    |...A..<.....?.8
+00040070: 3bbd0004 2c050000 40820008 80be8008    ;...,...@.......
+00040080: 80090010 7f64db78 807e800c 3b7b0001    .....d.x.~..;{..
+00040090: 7c0803a6 4e800021 7c1be000 4081ffcc    |...N..!|...@...
+000400a0: 813f0038 807e8010 80090010 7c0803a6    .?.8.~......|...
+000400b0: 4e800021 813f0038 80090004 7c0803a6    N..!.?.8....|...
+000400c0: 4e800021 2c030000 4182ffec 813f0038    N..!,...A....?.8
+000400d0: 80090000 7c0803a6 4e800021 813f0038    ....|...N..!.?.8
+000400e0: 807e8014 80090010 7c0803a6 4e800021    .~......|...N..!
+000400f0: 38600000 80010024 7c0803a6 bb61000c    8`.....$|....a..
+=>go 40004
+## Starting application at 0x00040004 ...
+Hello World
+argc = 1
+argv[0] = "40004"
+argv[1] = "<NULL>"
+Hit any key to exit ...
+
+## Application terminated, rc = 0x0
+=>
diff --git a/board/eltec/bab7xx/bab7xx.c b/board/eltec/bab7xx/bab7xx.c
new file mode 100644 (file)
index 0000000..6f6f977
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+ * (C) Copyright 2001 Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Andreas Heppel <aheppel@sysgo.de>
+ * (C) Copyright 2001 ELTEC Elektronik AG
+ * Frank Gottschling <fgottschling@eltec.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <command.h>
+#include <mpc106.h>
+#include <mk48t59.h>
+#include <74xx_7xx.h>
+#include <ns87308.h>
+#include <video_fb.h>
+
+/*---------------------------------------------------------------------------*/
+/*
+ * Get Bus clock frequency
+ */
+ulong bab7xx_get_bus_freq (void)
+{
+    /*
+     * The GPIO Port 1 on BAB7xx reflects the bus speed.
+     */
+    volatile struct GPIO *gpio = (struct GPIO *)(CFG_ISA_IO + CFG_NS87308_GPIO_BASE);
+
+    unsigned char data = gpio->dta1;
+
+    if (data & 0x02)
+        return 66666666;
+
+    return 83333333;
+}
+
+/*---------------------------------------------------------------------------*/
+
+/*
+ * Measure CPU clock speed (core clock GCLK1) (Approx. GCLK frequency in Hz)
+ */
+ulong bab7xx_get_gclk_freq (void)
+{
+    static const int pllratio_to_factor[] = {
+        00, 75, 70, 00, 20, 65, 100, 45, 30, 55, 40, 50, 80, 60, 35, 00,
+    };
+
+    return pllratio_to_factor[get_hid1 () >> 28] * (bab7xx_get_bus_freq() / 10);
+}
+
+/*----------------------------------------------------------------------------*/
+
+int checkcpu (void)
+{
+    uint pvr  = get_pvr();
+
+    printf ("MPC7xx V%d.%d",(pvr >> 8) & 0xFF, pvr & 0xFF);
+    printf (" at %ld / %ld MHz\n",  bab7xx_get_gclk_freq()/1000000,
+            bab7xx_get_bus_freq()/1000000);
+
+    return (0);
+}
+
+/* ------------------------------------------------------------------------- */
+
+int checkboard (void)
+{
+#ifdef CFG_ADDRESS_MAP_A
+    puts ("Board: ELTEC BAB7xx PReP\n");
+#else
+    puts ("Board: ELTEC BAB7xx CHRP\n");
+#endif
+    return (0);
+}
+
+/* ------------------------------------------------------------------------- */
+
+int checkflash (void)
+{
+    /* TODO: XXX XXX XXX */
+    printf ("2 MB ## Test not implemented yet ##\n");
+    return (0);
+}
+
+/* ------------------------------------------------------------------------- */
+
+
+static unsigned int mpc106_read_cfg_dword (unsigned int reg)
+{
+    unsigned int reg_addr = MPC106_REG | (reg & 0xFFFFFFFC);
+
+    out32r(MPC106_REG_ADDR, reg_addr);
+
+    return (in32r(MPC106_REG_DATA | (reg & 0x3)));
+}
+
+/* ------------------------------------------------------------------------- */
+
+long int dram_size (int board_type)
+{
+    /* No actual initialisation to do - done when setting up
+     * PICRs MCCRs ME/SARs etc in ram_init.S.
+     */
+
+    register unsigned long i, msar1, mear1, memSize;
+
+#if defined(CFG_MEMTEST)
+    register unsigned long reg;
+
+    printf("Testing DRAM\n");
+
+    /* write each mem addr with it's address */
+    for (reg = CFG_MEMTEST_START; reg < CFG_MEMTEST_END; reg+=4)
+    *reg = reg;
+
+    for (reg = CFG_MEMTEST_START; reg < CFG_MEMTEST_END; reg+=4)
+    {
+        if (*reg != reg)
+            return -1;
+    }
+#endif
+
+    /*
+    * Since MPC106 memory controller chip has already been set to
+    * control all memory, just read and interpret its memory boundery register.
+    */
+    memSize = 0;
+    msar1 = mpc106_read_cfg_dword(MPC106_MSAR1);
+    mear1 = mpc106_read_cfg_dword(MPC106_MEAR1);
+    i     = mpc106_read_cfg_dword(MPC106_MBER) & 0xf;
+
+    do
+    {
+        if (i & 0x01)   /* is bank enabled ? */
+            memSize += (mear1 & 0xff) - (msar1 & 0xff) + 1;
+        msar1 >>= 8;
+        mear1 >>= 8;
+        i     >>= 1;
+    } while (i);
+
+    return (memSize * 0x100000);
+}
+
+/* ------------------------------------------------------------------------- */
+
+long int initdram(int board_type)
+{
+    return dram_size(board_type);
+}
+
+/* ------------------------------------------------------------------------- */
+
+void after_reloc (ulong dest_addr)
+{
+    DECLARE_GLOBAL_DATA_PTR;
+
+    /*
+     * Jump to the main U-Boot board init code
+     */
+    board_init_r(gd, dest_addr);
+}
+
+/* ------------------------------------------------------------------------- */
+
+/*
+ * do_reset is done here because in this case it is board specific, since the
+ * 7xx CPUs can only be reset by external HW (the RTC in this case).
+ */
+void
+do_reset (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
+{
+#if defined(CONFIG_RTC_MK48T59)
+    /* trigger watchdog immediately */
+    rtc_set_watchdog(1, RTC_WD_RB_16TH);
+#else
+    #error "You must define the macro CONFIG_RTC_MK48T59."
+#endif
+}
+
+/* ------------------------------------------------------------------------- */
+
+#if defined(CONFIG_WATCHDOG)
+/*
+ * Since the 7xx CPUs don't have an internal watchdog, this function is
+ * board specific.  We use the RTC here.
+ */
+void watchdog_reset(void)
+{
+#if defined(CONFIG_RTC_MK48T59)
+    /* we use a 32 sec watchdog timer */
+    rtc_set_watchdog(8, RTC_WD_RB_4);
+#else
+    #error "You must define the macro CONFIG_RTC_MK48T59."
+#endif
+}
+#endif    /* CONFIG_WATCHDOG */
+
+/* ------------------------------------------------------------------------- */
+
+#ifdef CONFIG_CONSOLE_EXTRA_INFO
+extern GraphicDevice smi;
+
+void video_get_info_str (int line_number, char *info)
+{
+    /* init video info strings for graphic console */
+    switch (line_number)
+    {
+    case 1:
+        sprintf (info," MPC7xx V%d.%d at %ld / %ld MHz",
+            (get_pvr() >> 8) & 0xFF,
+            get_pvr() & 0xFF,
+            bab7xx_get_gclk_freq()/1000000,
+            bab7xx_get_bus_freq()/1000000);
+        return;
+    case 2:
+        sprintf (info, " ELTEC BAB7xx with %ld MB DRAM and %ld MB FLASH",
+            dram_size(0)/0x100000,
+            flash_init()/0x100000);
+        return;
+    case 3:
+        sprintf (info, " %s", smi.modeIdent);
+        return;
+    }
+
+    /* no more info lines */
+    *info = 0;
+    return;
+}
+#endif
+
+/*---------------------------------------------------------------------------*/
diff --git a/board/eltec/elppc/elppc.c b/board/eltec/elppc/elppc.c
new file mode 100644 (file)
index 0000000..97b70a4
--- /dev/null
@@ -0,0 +1,189 @@
+/*
+ * (C) Copyright 2002 ELTEC Elektronik AG
+ * Frank Gottschling <fgottschling@eltec.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <command.h>
+#include <mpc106.h>
+#include <video_fb.h>
+
+/* ------------------------------------------------------------------------- */
+
+int checkboard (void)
+{
+    puts ("Board: ELTEC PowerPC\n");
+    return (0);
+}
+
+/* ------------------------------------------------------------------------- */
+
+int checkflash (void)
+{
+    /* TODO */
+    printf ("Test not implemented !\n");
+    return (0);
+}
+
+/* ------------------------------------------------------------------------- */
+
+static unsigned int mpc106_read_cfg_dword (unsigned int reg)
+{
+    unsigned int reg_addr = MPC106_REG | (reg & 0xFFFFFFFC);
+
+    out32r(MPC106_REG_ADDR, reg_addr);
+
+    return (in32r(MPC106_REG_DATA | (reg & 0x3)));
+}
+
+/* ------------------------------------------------------------------------- */
+
+long int dram_size (int board_type)
+{
+    /*
+    * No actual initialisation to do - done when setting up
+    * PICRs MCCRs ME/SARs etc in asm_init.S.
+    */
+
+    register unsigned long i, msar1, mear1, memSize;
+
+#if defined(CFG_MEMTEST)
+    register unsigned long reg;
+
+    printf("Testing DRAM\n");
+
+    /* write each mem addr with it's address */
+    for (reg = CFG_MEMTEST_START; reg < CFG_MEMTEST_END; reg+=4)
+        *reg = reg;
+
+    for (reg = CFG_MEMTEST_START; reg < CFG_MEMTEST_END; reg+=4)
+    {
+        if (*reg != reg)
+        return -1;
+    }
+#endif
+
+    /*
+    * Since MPC107 memory controller chip has already been set to
+    * control all memory, just read and interpret its memory boundery register.
+    */
+    memSize = 0;
+    msar1 = mpc106_read_cfg_dword(MPC106_MSAR1);
+    mear1 = mpc106_read_cfg_dword(MPC106_MEAR1);
+    i     = mpc106_read_cfg_dword(MPC106_MBER) & 0xf;
+
+    do
+    {
+        if (i & 0x01)   /* is bank enabled ? */
+            memSize += (mear1 & 0xff) - (msar1 & 0xff) + 1;
+        msar1 >>= 8;
+        mear1 >>= 8;
+        i     >>= 1;
+    } while (i);
+
+    return (memSize * 0x100000);
+}
+/* ------------------------------------------------------------------------- */
+
+long int initdram(int board_type)
+{
+    return dram_size(board_type);
+}
+
+/* ------------------------------------------------------------------------- */
+
+/*
+ * The BAB 911 can be reset by writing bit 0 of the Processor Initialization
+ * Register PI in the MPC 107 (at offset 0x41090 of the Embedded Utilities
+ * Memory Block).
+ */
+void do_reset (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
+{
+    out8(MPC107_EUMB_PI, 1);
+}
+
+/* ------------------------------------------------------------------------- */
+
+#if defined(CONFIG_WATCHDOG)
+
+/*
+ * Since the 7xx CPUs don't have an internal watchdog, this function is
+ * board specific.
+ */
+void watchdog_reset(void)
+{
+}
+#endif    /* CONFIG_WATCHDOG */
+
+/* ------------------------------------------------------------------------- */
+
+void after_reloc (ulong dest_addr)
+{
+    DECLARE_GLOBAL_DATA_PTR;
+
+    /*
+     * Jump to the main U-Boot board init code
+     */
+    board_init_r(gd, dest_addr);
+}
+
+/* ------------------------------------------------------------------------- */
+
+#ifdef CONFIG_CONSOLE_EXTRA_INFO
+extern GraphicDevice smi;
+
+void video_get_info_str (int line_number, char *info)
+{
+    /* init video info strings for graphic console */
+    switch (line_number)
+    {
+    case 1:
+        sprintf (info," MPC7xx V%d.%d at %d / %d MHz",
+            (get_pvr() >> 8) & 0xFF,
+            get_pvr() & 0xFF,
+            400,
+            100);
+        return;
+    case 2:
+        sprintf (info, " ELTEC ELPPC with %ld MB DRAM and %ld MB FLASH",
+            dram_size(0)/0x100000,
+            flash_init()/0x100000);
+        return;
+    case 3:
+        sprintf (info, " %s", smi.modeIdent);
+        return;
+    }
+
+    /* no more info lines */
+    *info = 0;
+    return;
+}
+#endif
+
+
+
+
+
+
+
+
+
+
diff --git a/board/ep8260/config.mk b/board/ep8260/config.mk
new file mode 100644 (file)
index 0000000..eaf1560
--- /dev/null
@@ -0,0 +1,36 @@
+#
+# (C) Copyright 2002
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+#
+# EP8260 boards
+#
+
+# This should be equal to the CFG_FLASH_BASE define in config_ep8260.h
+# for the "final" configuration, with U-Boot in flash, or the address
+# in RAM where U-Boot is loaded at for debugging.
+#
+#TEXT_BASE = 0x00100000
+#TEXT_BASE = 0xFF000000
+TEXT_BASE = 0xFFF00000
+
+PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE) -I$(TOPDIR)
diff --git a/board/evb64260/evb64260.c b/board/evb64260/evb64260.c
new file mode 100644 (file)
index 0000000..1c02e32
--- /dev/null
@@ -0,0 +1,437 @@
+/*
+ * (C) Copyright 2001
+ * Josh Huber <huber@mclx.com>, Mission Critical Linux, 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
+ */
+
+/*
+ * evb64260.c - main board support/init for the Galileo Eval board.
+ */
+
+#include <common.h>
+#include <74xx_7xx.h>
+#include <galileo/memory.h>
+#include <galileo/pci.h>
+#include <galileo/gt64260R.h>
+#include <net.h>
+
+#include <asm/io.h>
+#include "eth.h"
+#include "mpsc.h"
+#include "i2c.h"
+#include "64260.h"
+#ifdef CONFIG_ZUMA_V2
+extern void zuma_mbox_init(void);
+#endif
+
+#undef DEBUG
+#define        MAP_PCI
+
+#ifdef DEBUG
+#define DP(x) x
+#else
+#define DP(x)
+#endif
+
+/* ------------------------------------------------------------------------- */
+
+/* this is the current GT register space location */
+/* it starts at CFG_DFL_GT_REGS but moves later to CFG_GT_REGS */
+
+/* Unfortunately, we cant change it while we are in flash, so we initialize it
+ * to the "final" value. This means that any debug_led calls before
+ * board_pre_init wont work right (like in cpu_init_f).
+ * See also my_remap_gt_regs below. (NTL)
+ */
+
+unsigned int INTERNAL_REG_BASE_ADDR = CFG_GT_REGS;
+
+/* ------------------------------------------------------------------------- */
+
+/*
+ * This is a version of the GT register space remapping function that
+ * doesn't touch globals (meaning, it's ok to run from flash.)
+ *
+ * Unfortunately, this has the side effect that a writable
+ * INTERNAL_REG_BASE_ADDR is impossible. Oh well.
+ */
+
+void
+my_remap_gt_regs(u32 cur_loc, u32 new_loc)
+{
+       u32 temp;
+
+       /* check and see if it's already moved */
+       temp = in_le32((u32 *)(new_loc + INTERNAL_SPACE_DECODE));
+       if ((temp & 0xffff) == new_loc >> 20)
+               return;
+
+       temp = (in_le32((u32 *)(cur_loc + INTERNAL_SPACE_DECODE)) &
+               0xffff0000) | (new_loc >> 20);
+
+       out_le32((u32 *)(cur_loc + INTERNAL_SPACE_DECODE), temp);
+
+       while (GTREGREAD(INTERNAL_SPACE_DECODE) != temp);
+}
+
+static void
+gt_pci_config(void)
+{
+       /* move PCI stuff out of the way - NTL */
+       /* map PCI Host 0 */
+       pciMapSpace(PCI_HOST0, PCI_REGION0, CFG_PCI0_0_MEM_SPACE,
+               CFG_PCI0_0_MEM_SPACE, CFG_PCI0_MEM_SIZE);
+
+       pciMapSpace(PCI_HOST0, PCI_REGION1, 0, 0, 0);
+       pciMapSpace(PCI_HOST0, PCI_REGION2, 0, 0, 0);
+       pciMapSpace(PCI_HOST0, PCI_REGION3, 0, 0, 0);
+
+       pciMapSpace(PCI_HOST0, PCI_IO, CFG_PCI0_IO_SPACE_PCI,
+               CFG_PCI0_IO_SPACE, CFG_PCI0_IO_SIZE);
+
+       /* map PCI Host 1 */
+       pciMapSpace(PCI_HOST1, PCI_REGION0, CFG_PCI1_0_MEM_SPACE,
+               CFG_PCI1_0_MEM_SPACE, CFG_PCI1_MEM_SIZE);
+
+       pciMapSpace(PCI_HOST1, PCI_REGION1, 0, 0, 0);
+       pciMapSpace(PCI_HOST1, PCI_REGION2, 0, 0, 0);
+       pciMapSpace(PCI_HOST1, PCI_REGION3, 0, 0, 0);
+
+       pciMapSpace(PCI_HOST1, PCI_IO, CFG_PCI1_IO_SPACE_PCI,
+               CFG_PCI1_IO_SPACE, CFG_PCI1_IO_SIZE);
+
+       /* PCI interface settings */
+       GT_REG_WRITE(PCI_0TIMEOUT_RETRY, 0xffff);
+       GT_REG_WRITE(PCI_1TIMEOUT_RETRY, 0xffff);
+       GT_REG_WRITE(PCI_0BASE_ADDRESS_REGISTERS_ENABLE, 0xfffff80e);
+       GT_REG_WRITE(PCI_1BASE_ADDRESS_REGISTERS_ENABLE, 0xfffff80e);
+
+
+}
+
+/* Setup CPU interface paramaters */
+static void
+gt_cpu_config(void)
+{
+       cpu_t cpu = get_cpu_type();
+       ulong tmp;
+
+       /* cpu configuration register */
+       tmp = GTREGREAD(CPU_CONFIGURATION);
+
+       /* set the AACK delay bit
+        * see Res#14 */
+       tmp |= CPU_CONF_AACK_DELAY;
+       tmp &= ~CPU_CONF_AACK_DELAY_2; /* New RGF */
+
+       /* Galileo claims this is necessary for all busses >= 100 MHz */
+       tmp |= CPU_CONF_FAST_CLK;
+
+       if (cpu == CPU_750CX) {
+               tmp &= ~CPU_CONF_DP_VALID; /* Safer, needed for CXe. RGF */
+               tmp &= ~CPU_CONF_AP_VALID;
+       } else {
+               tmp |= CPU_CONF_DP_VALID;
+               tmp |= CPU_CONF_AP_VALID;
+       }
+
+       /* this only works with the MPX bus */
+       tmp &= ~CPU_CONF_RD_OOO; /* Safer RGF */
+       tmp |= CPU_CONF_PIPELINE;
+       tmp |= CPU_CONF_TA_DELAY;
+
+       GT_REG_WRITE(CPU_CONFIGURATION, tmp);
+
+       /* CPU master control register */
+       tmp = GTREGREAD(CPU_MASTER_CONTROL);
+
+       tmp |= CPU_MAST_CTL_ARB_EN;
+
+       if ((cpu == CPU_7400) ||
+           (cpu == CPU_7410) ||
+           (cpu == CPU_7450)) {
+
+               tmp |= CPU_MAST_CTL_CLEAN_BLK;
+               tmp |= CPU_MAST_CTL_FLUSH_BLK;
+
+       } else {
+               /* cleanblock must be cleared for CPUs
+                * that do not support this command
+                * see Res#1 */
+               tmp &= ~CPU_MAST_CTL_CLEAN_BLK;
+               tmp &= ~CPU_MAST_CTL_FLUSH_BLK;
+       }
+       GT_REG_WRITE(CPU_MASTER_CONTROL, tmp);
+}
+
+/*
+ * board_pre_init.
+ *
+ * set up gal. device mappings, etc.
+ */
+int board_pre_init (void)
+{
+       uchar sram_boot = 0;
+
+       /*
+        * set up the GT the way the kernel wants it
+        * the call to move the GT register space will obviously
+        * fail if it has already been done, but we're going to assume
+        * that if it's not at the power-on location, it's where we put
+        * it last time. (huber)
+        */
+       my_remap_gt_regs(CFG_DFL_GT_REGS, CFG_GT_REGS);
+
+       gt_pci_config();
+
+       /* mask all external interrupt sources */
+       GT_REG_WRITE(CPU_INTERRUPT_MASK_REGISTER_LOW, 0);
+       GT_REG_WRITE(CPU_INTERRUPT_MASK_REGISTER_HIGH, 0);
+       GT_REG_WRITE(PCI_0INTERRUPT_CAUSE_MASK_REGISTER_LOW, 0);
+       GT_REG_WRITE(PCI_0INTERRUPT_CAUSE_MASK_REGISTER_HIGH, 0);
+       GT_REG_WRITE(PCI_1INTERRUPT_CAUSE_MASK_REGISTER_LOW, 0);
+       GT_REG_WRITE(PCI_1INTERRUPT_CAUSE_MASK_REGISTER_HIGH, 0);
+       GT_REG_WRITE(CPU_INT_0_MASK, 0);
+       GT_REG_WRITE(CPU_INT_1_MASK, 0);
+       GT_REG_WRITE(CPU_INT_2_MASK, 0);
+       GT_REG_WRITE(CPU_INT_3_MASK, 0);
+
+       /* now, onto the configuration */
+       GT_REG_WRITE(SDRAM_CONFIGURATION, CFG_SDRAM_CONFIG);
+
+       /* ----- DEVICE BUS SETTINGS ------ */
+
+        /*
+        * EVB
+         * 0 - SRAM
+         * 1 - RTC
+         * 2 - UART
+         * 3 - Flash
+         * boot - BootCS
+        *
+        * Zuma
+        * 0 - Flash
+        * boot - BootCS
+         */
+
+       /*
+        * the dual 7450 module requires burst access to the boot
+        * device, so the serial rom copies the boot device to the
+        * on-board sram on the eval board, and updates the correct
+        * registers to boot from the sram. (device0)
+        */
+#ifdef CONFIG_ZUMA_V2
+       /* Zuma has no SRAM */
+       sram_boot = 0;
+#else
+       if (memoryGetDeviceBaseAddress(DEVICE0) && 0xfff00000 == CFG_MONITOR_BASE)
+               sram_boot = 1;
+#endif
+
+       if (!sram_boot)
+               memoryMapDeviceSpace(DEVICE0, CFG_DEV0_SPACE, CFG_DEV0_SIZE);
+
+       memoryMapDeviceSpace(DEVICE1, CFG_DEV1_SPACE, CFG_DEV1_SIZE);
+       memoryMapDeviceSpace(DEVICE2, CFG_DEV2_SPACE, CFG_DEV2_SIZE);
+       memoryMapDeviceSpace(DEVICE3, CFG_DEV3_SPACE, CFG_DEV3_SIZE);
+
+       /* configure device timing */
+#ifdef CFG_DEV0_PAR
+       if (!sram_boot)
+               GT_REG_WRITE(DEVICE_BANK0PARAMETERS, CFG_DEV0_PAR);
+#endif
+
+#ifdef CFG_DEV1_PAR
+       GT_REG_WRITE(DEVICE_BANK1PARAMETERS, CFG_DEV1_PAR);
+#endif
+#ifdef CFG_DEV2_PAR
+       GT_REG_WRITE(DEVICE_BANK2PARAMETERS, CFG_DEV2_PAR);
+#endif
+
+#ifdef CFG_32BIT_BOOT_PAR
+       /* detect if we are booting from the 32 bit flash */
+       if (GTREGREAD(DEVICE_BOOT_BANK_PARAMETERS) & (0x3 << 20)) {
+               /* 32 bit boot flash */
+               GT_REG_WRITE(DEVICE_BANK3PARAMETERS, CFG_8BIT_BOOT_PAR);
+               GT_REG_WRITE(DEVICE_BOOT_BANK_PARAMETERS, CFG_32BIT_BOOT_PAR);
+       } else {
+               /* 8 bit boot flash */
+               GT_REG_WRITE(DEVICE_BANK3PARAMETERS, CFG_32BIT_BOOT_PAR);
+               GT_REG_WRITE(DEVICE_BOOT_BANK_PARAMETERS, CFG_8BIT_BOOT_PAR);
+       }
+#else
+       /* 8 bit boot flash only */
+       GT_REG_WRITE(DEVICE_BOOT_BANK_PARAMETERS, CFG_8BIT_BOOT_PAR);
+#endif
+
+       gt_cpu_config();
+
+       /* MPP setup */
+       GT_REG_WRITE(MPP_CONTROL0, CFG_MPP_CONTROL_0);
+       GT_REG_WRITE(MPP_CONTROL1, CFG_MPP_CONTROL_1);
+       GT_REG_WRITE(MPP_CONTROL2, CFG_MPP_CONTROL_2);
+       GT_REG_WRITE(MPP_CONTROL3, CFG_MPP_CONTROL_3);
+
+       GT_REG_WRITE(GPP_LEVEL_CONTROL, CFG_GPP_LEVEL_CONTROL);
+       GT_REG_WRITE(SERIAL_PORT_MULTIPLEX, CFG_SERIAL_PORT_MUX);
+
+       return 0;
+}
+
+/* various things to do after relocation */
+
+int misc_init_r (void)
+{
+       icache_enable();
+#ifdef CFG_L2
+       l2cache_enable();
+#endif
+
+#ifdef CONFIG_MPSC
+       mpsc_init2();
+#endif
+
+#ifdef CONFIG_ZUMA_V2
+       zuma_mbox_init();
+#endif
+       return (0);
+}
+
+void
+after_reloc(gd_t *gd, ulong dest_addr)
+{
+       /* check to see if we booted from the sram.  If so, move things
+        * back to the way they should be. (we're running from main
+        * memory at this point now */
+
+       if (memoryGetDeviceBaseAddress(DEVICE0) == CFG_MONITOR_BASE) {
+               memoryMapDeviceSpace(DEVICE0, CFG_DEV0_SPACE, CFG_DEV0_SIZE);
+               memoryMapDeviceSpace(BOOT_DEVICE, CFG_FLASH_BASE, _1M);
+       }
+
+       /* now, jump to the main U-Boot board init code */
+       board_init_r (gd, dest_addr);
+
+       /* NOTREACHED */
+}
+
+/* ------------------------------------------------------------------------- */
+
+/*
+ * Check Board Identity:
+ */
+
+int
+checkboard (void)
+{
+       puts ("Board: " CFG_BOARD_NAME "\n");
+       return (0);
+}
+
+/* utility functions */
+void
+debug_led(int led, int mode)
+{
+#ifndef CONFIG_ZUMA_V2
+        volatile int *addr = NULL;
+        int dummy;
+
+        if (mode == 1) {
+                switch (led) {
+                case 0:
+                        addr = (int *)((unsigned int)CFG_DEV1_SPACE | 0x08000);
+                        break;
+
+                case 1:
+                        addr = (int *)((unsigned int)CFG_DEV1_SPACE | 0x0c000);
+                        break;
+
+                case 2:
+                        addr = (int *)((unsigned int)CFG_DEV1_SPACE | 0x10000);
+                        break;
+                }
+        } else if (mode == 0) {
+                switch (led) {
+                case 0:
+                        addr = (int *)((unsigned int)CFG_DEV1_SPACE | 0x14000);
+                        break;
+
+                case 1:
+                        addr = (int *)((unsigned int)CFG_DEV1_SPACE | 0x18000);
+                        break;
+
+                case 2:
+                        addr = (int *)((unsigned int)CFG_DEV1_SPACE | 0x1c000);
+                        break;
+                }
+        }
+       WRITE_CHAR(addr, 0);
+        dummy = *addr;
+#endif /* CONFIG_ZUMA_V2 */
+}
+
+void
+display_mem_map(void)
+{
+    int i,j;
+    unsigned int base,size,width;
+    /* SDRAM */
+    printf("SDRAM\n");
+    for(i=0;i<=BANK3;i++) {
+       base = memoryGetBankBaseAddress(i);
+       size = memoryGetBankSize(i);
+       if(size !=0)
+       {
+           printf("BANK%d: base - 0x%08x\tsize - %dM bytes\n",i,base,size>>20);
+       }
+    }
+
+    /* CPU's PCI windows */
+    for(i=0;i<=PCI_HOST1;i++) {
+       printf("\nCPU's PCI %d windows\n", i);
+       base=pciGetSpaceBase(i,PCI_IO);
+       size=pciGetSpaceSize(i,PCI_IO);
+       printf("      IO: base - 0x%08x\tsize - %dM bytes\n",base,size>>20);
+       for(j=0;j<=PCI_REGION3;j++) {
+           base = pciGetSpaceBase(i,j);
+           size = pciGetSpaceSize(i,j);
+           printf("MEMORY %d: base - 0x%08x\tsize - %dM bytes\n",j,base,
+                   size>>20);
+       }
+    }
+
+    /* Devices */
+    printf("\nDEVICES\n");
+       for(i=0;i<=DEVICE3;i++) {
+       base = memoryGetDeviceBaseAddress(i);
+       size = memoryGetDeviceSize(i);
+       width= memoryGetDeviceWidth(i) * 8;
+       printf("DEV %d:  base - 0x%08x\tsize - %dM bytes\twidth - %d bits\n",
+              i, base, size>>20, width);
+    }
+
+    /* Bootrom */
+    base = memoryGetDeviceBaseAddress(BOOT_DEVICE); /* Boot */
+    size = memoryGetDeviceSize(BOOT_DEVICE);
+    width= memoryGetDeviceWidth(BOOT_DEVICE) * 8;
+    printf(" BOOT:  base - 0x%08x\tsize - %dM bytes\twidth - %d bits\n",
+          base, size>>20, width);
+}
+
diff --git a/board/evb64260/flash.c b/board/evb64260/flash.c
new file mode 100644 (file)
index 0000000..2d2bf1c
--- /dev/null
@@ -0,0 +1,805 @@
+/*
+ * (C) Copyright 2001
+ * Josh Huber <huber@mclx.com>, Mission Critical Linux, 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
+ */
+
+/*
+ * flash.c - flash support for the 512k, 8bit boot flash on the GEVB
+ *           most of this file was based on the existing U-Boot
+ *           flash drivers.
+ */
+
+#include <common.h>
+#include <mpc8xx.h>
+#include <galileo/gt64260R.h>
+#include <galileo/memory.h>
+#include "intel_flash.h"
+
+#define FLASH_ROM       0xFFFD       /* unknown flash type                   */
+#define FLASH_RAM       0xFFFE       /* unknown flash type                   */
+#define FLASH_MAN_UNKNOWN 0xFFFF0000
+
+/* #define DEBUG */
+/* #define FLASH_ID_OVERRIDE */        /* Hack to set type to 040B if ROM emulator is installed.
+                                * Can be used to program a ROM in circuit if a programmer
+                                * is not available by swapping the rom out. */
+
+/* Intel flash commands */
+int flash_erase_intel(flash_info_t *info, int s_first, int s_last);
+int write_word_intel(bank_addr_t addr, bank_word_t value);
+
+flash_info_t   flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
+
+/*-----------------------------------------------------------------------
+ * Functions
+ */
+static ulong flash_get_size (int portwidth, vu_long *addr, flash_info_t *info);
+static int write_word (flash_info_t *info, ulong dest, ulong data);
+static void flash_get_offsets (ulong base, flash_info_t *info);
+
+/*-----------------------------------------------------------------------
+ */
+
+unsigned long
+flash_init (void)
+{
+       unsigned int i;
+       unsigned long size_b0 = 0, size_b1 = 0;
+       unsigned long base, flash_size;
+
+       /* Init: no FLASHes known */
+       for (i=0; i<CFG_MAX_FLASH_BANKS; ++i) {
+               flash_info[i].flash_id = FLASH_UNKNOWN;
+       }
+
+       /* the boot flash */
+       base = CFG_FLASH_BASE;
+       size_b0 = flash_get_size(1, (vu_long *)base, &flash_info[0]);
+
+       printf("[%ldkB@%lx] ", size_b0/1024, base);
+
+       if (flash_info[0].flash_id == FLASH_UNKNOWN) {
+               printf ("## Unknown FLASH at %08lx: Size = 0x%08lx = %ld MB\n",
+                       base, size_b0, size_b0<<20);
+       }
+
+       base = memoryGetDeviceBaseAddress(CFG_EXTRA_FLASH_DEVICE);
+       for(i=1;i<CFG_MAX_FLASH_BANKS;i++) {
+           unsigned long size = flash_get_size(CFG_EXTRA_FLASH_WIDTH, (vu_long *)base, &flash_info[i]);
+
+           printf("[%ldMB@%lx] ", size>>20, base);
+
+           if (flash_info[i].flash_id == FLASH_UNKNOWN) {
+               if(i==1) {
+                   printf ("## Unknown FLASH at %08lx: Size = 0x%08lx = %ld MB\n",
+                           base, size_b1, size_b1<<20);
+               }
+               break;
+           }
+           size_b1+=size;
+           base+=size;
+       }
+
+       flash_size = size_b0 + size_b1;
+       return flash_size;
+}
+
+/*-----------------------------------------------------------------------
+ */
+static void
+flash_get_offsets (ulong base, flash_info_t *info)
+{
+       int i;
+       int sector_size;
+
+       if(!info->sector_count) return;
+
+       /* set up sector start address table */
+       switch(info->flash_id & FLASH_TYPEMASK) {
+           case FLASH_AM040:
+           case FLASH_28F128J3A:
+           case FLASH_28F640J3A:
+           case FLASH_RAM:
+               /* this chip has uniformly spaced sectors */
+               sector_size=info->size/info->sector_count;
+               for (i = 0; i < info->sector_count; i++)
+                       info->start[i] = base + (i * sector_size);
+               break;
+           default:
+               if (info->flash_id & FLASH_BTYPE) {
+                   /* set sector offsets for bottom boot block type    */
+                   info->start[0] = base + 0x00000000;
+                   info->start[1] = base + 0x00008000;
+                   info->start[2] = base + 0x0000C000;
+                   info->start[3] = base + 0x00010000;
+                   for (i = 4; i < info->sector_count; i++) {
+                           info->start[i] = base + (i * 0x00020000) - 0x00060000;
+                   }
+               } else {
+                   /* set sector offsets for top boot block type               */
+                   i = info->sector_count - 1;
+                   info->start[i--] = base + info->size - 0x00008000;
+                   info->start[i--] = base + info->size - 0x0000C000;
+                   info->start[i--] = base + info->size - 0x00010000;
+                   for (; i >= 0; i--) {
+                           info->start[i] = base + i * 0x00020000;
+                   }
+               }
+       }
+}
+
+/*-----------------------------------------------------------------------
+ */
+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_AMD:     printf ("AMD ");                break;
+       case FLASH_MAN_FUJ:     printf ("FUJITSU ");            break;
+       case FLASH_MAN_INTEL:   printf ("INTEL ");              break;
+       default:                printf ("Unknown Vendor ");     break;
+       }
+
+       switch (info->flash_id & FLASH_TYPEMASK) {
+       case FLASH_AM040:
+               printf ("AM29LV040B (4 Mbit, bottom boot sect)\n");
+               break;
+       case FLASH_AM400B:
+               printf ("AM29LV400B (4 Mbit, bottom boot sect)\n");
+               break;
+       case FLASH_AM400T:
+               printf ("AM29LV400T (4 Mbit, top boot sector)\n");
+               break;
+       case FLASH_AM800B:
+               printf ("AM29LV800B (8 Mbit, bottom boot sect)\n");
+               break;
+       case FLASH_AM800T:
+               printf ("AM29LV800T (8 Mbit, top boot sector)\n");
+               break;
+       case FLASH_AM160B:
+               printf ("AM29LV160B (16 Mbit, bottom boot sect)\n");
+               break;
+       case FLASH_AM160T:
+               printf ("AM29LV160T (16 Mbit, top boot sector)\n");
+               break;
+       case FLASH_AM320B:
+               printf ("AM29LV320B (32 Mbit, bottom boot sect)\n");
+               break;
+       case FLASH_AM320T:
+               printf ("AM29LV320T (32 Mbit, top boot sector)\n");
+               break;
+       case FLASH_28F640J3A:
+               printf ("28F640J3A (64 Mbit)\n");
+               break;
+       case FLASH_28F128J3A:
+               printf ("28F128J3A (128 Mbit)\n");
+               break;
+       case FLASH_ROM:
+               printf ("ROM\n");
+               break;
+       case FLASH_RAM:
+               printf ("RAM\n");
+               break;
+       default:
+               printf ("Unknown Chip Type\n");
+               break;
+       }
+
+       puts ("  Size: ");
+       print_size (info->size, "");
+       printf (" in %d Sectors\n", 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 inline void flash_cmd(int width, volatile unsigned char *addr, int offset, unsigned char cmd)
+{
+        /* supports 1x8, 1x16, and 2x16 */
+        /* 2x8 and 4x8 are not supported */
+       if(width==4) {
+           /* assuming chips are in 16 bit mode */
+           /* 2x16 */
+           unsigned long cmd32=(cmd<<16)|cmd;
+           *(volatile unsigned long *)(addr+offset*2)=cmd32;
+       } else {
+           /* 1x16 or 1x8 */
+           *(volatile unsigned char *)(addr+offset)=cmd;
+       }
+}
+
+static ulong
+flash_get_size (int portwidth, vu_long *addr, flash_info_t *info)
+{
+       short i;
+       volatile unsigned char *caddr = (unsigned char *)addr;
+       volatile unsigned short *saddr = (unsigned short *)addr;
+       volatile unsigned long *laddr = (unsigned long *)addr;
+       char old[2], save;
+       ulong id, manu, base = (ulong)addr;
+
+       info->portwidth=portwidth;
+
+       save = *caddr;
+
+       flash_cmd(portwidth,caddr,0,0xf0);
+       flash_cmd(portwidth,caddr,0,0xf0);
+
+       udelay(10);
+
+       old[0] = caddr[0];
+       old[1] = caddr[1];
+
+
+       if(old[0]!=0xf0) {
+           flash_cmd(portwidth,caddr,0,0xf0);
+           flash_cmd(portwidth,caddr,0,0xf0);
+
+           udelay(10);
+
+           if(*caddr==0xf0) {
+               /* this area is ROM */
+               *caddr=save;
+#ifndef FLASH_ID_OVERRIDE
+               info->flash_id = FLASH_ROM + FLASH_MAN_UNKNOWN;
+               info->sector_count = 8;
+               info->size = 0x80000;
+#else
+               info->flash_id = FLASH_MAN_AMD + FLASH_AM040;
+               info->sector_count = 8;
+               info->size = 0x80000;
+               info->chipwidth=1;
+#endif
+               flash_get_offsets(base, info);
+               return info->size;
+           }
+       } else {
+           *caddr=0;
+
+           udelay(10);
+
+           if(*caddr==0) {
+               /* this area is RAM */
+               *caddr=save;
+               info->flash_id = FLASH_RAM + FLASH_MAN_UNKNOWN;
+               info->sector_count = 8;
+               info->size = 0x80000;
+               flash_get_offsets(base, info);
+               return info->size;
+           }
+           flash_cmd(portwidth,caddr,0,0xf0);
+
+           udelay(10);
+       }
+
+       /* Write auto select command: read Manufacturer ID */
+       flash_cmd(portwidth,caddr,0x555,0xAA);
+       flash_cmd(portwidth,caddr,0x2AA,0x55);
+       flash_cmd(portwidth,caddr,0x555,0x90);
+
+       udelay(10);
+
+       if ((caddr[0] == old[0]) &&
+           (caddr[1] == old[1])) {
+
+           /* this area is ROM */
+#ifndef FLASH_ID_OVERRIDE
+           info->flash_id = FLASH_ROM + FLASH_MAN_UNKNOWN;
+           info->sector_count = 8;
+           info->size = 0x80000;
+#else
+               info->flash_id = FLASH_MAN_AMD + FLASH_AM040;
+               info->sector_count = 8;
+               info->size = 0x80000;
+               info->chipwidth=1;
+#endif
+           flash_get_offsets(base, info);
+           return info->size;
+#ifdef DEBUG
+       } else {
+           printf("%px%d: %02x:%02x -> %02x:%02x\n",
+                   caddr, portwidth, old[0], old[1],
+                   caddr[0], caddr[1]);
+#endif
+       }
+
+       switch(portwidth) {
+           case 1:
+               manu = caddr[0];
+               manu |= manu<<16;
+               id = caddr[1];
+               break;
+           case 2:
+               manu = saddr[0];
+               manu |= manu<<16;
+               id = saddr[1];
+               id |= id<<16;
+               break;
+           case 4:
+               manu = laddr[0];
+               id = laddr[1];
+               break;
+       default:
+               id = manu = -1;
+               break;
+       }
+
+#ifdef DEBUG
+       printf("\n%08lx:%08lx:%08lx\n", base, manu, id);
+       printf("%08lx %08lx %08lx %08lx\n",
+               laddr[0],laddr[1],laddr[2],laddr[3]);
+#endif
+
+       switch (manu) {
+           case AMD_MANUFACT:
+                   info->flash_id = FLASH_MAN_AMD;
+                   break;
+           case FUJ_MANUFACT:
+                   info->flash_id = FLASH_MAN_FUJ;
+                   break;
+           case INTEL_MANUFACT:
+                   info->flash_id = FLASH_MAN_INTEL;
+                   break;
+           default:
+                   printf("Unknown Mfr [%08lx]:%08lx\n", manu, id);
+                   info->flash_id = FLASH_UNKNOWN;
+                   info->sector_count = 0;
+                   info->size = 0;
+                   return (0);                 /* no or unknown flash  */
+       }
+
+       switch (id) {
+           case AMD_ID_LV400T:
+                   info->flash_id += FLASH_AM400T;
+                   info->sector_count = 11;
+                   info->size = 0x00100000;
+                   info->chipwidth=1;
+                   break;                              /* => 1 MB      */
+
+           case AMD_ID_LV400B:
+                   info->flash_id += FLASH_AM400B;
+                   info->sector_count = 11;
+                   info->size = 0x00100000;
+                   info->chipwidth=1;
+                   break;                              /* => 1 MB      */
+
+           case AMD_ID_LV800T:
+                   info->flash_id += FLASH_AM800T;
+                   info->sector_count = 19;
+                   info->size = 0x00200000;
+                   info->chipwidth=1;
+                   break;                              /* => 2 MB      */
+
+           case AMD_ID_LV800B:
+                   info->flash_id += FLASH_AM800B;
+                   info->sector_count = 19;
+                   info->size = 0x00200000;
+                   info->chipwidth=1;
+                   break;                              /* => 2 MB      */
+
+           case AMD_ID_LV160T:
+                   info->flash_id += FLASH_AM160T;
+                   info->sector_count = 35;
+                   info->size = 0x00400000;
+                   info->chipwidth=1;
+                   break;                              /* => 4 MB      */
+
+           case AMD_ID_LV160B:
+                   info->flash_id += FLASH_AM160B;
+                   info->sector_count = 35;
+                   info->size = 0x00400000;
+                   info->chipwidth=1;
+                   break;                              /* => 4 MB      */
+#if 0  /* enable when device IDs are available */
+           case AMD_ID_LV320T:
+                   info->flash_id += FLASH_AM320T;
+                   info->sector_count = 67;
+                   info->size = 0x00800000;
+                   break;                              /* => 8 MB      */
+
+           case AMD_ID_LV320B:
+                   info->flash_id += FLASH_AM320B;
+                   info->sector_count = 67;
+                   info->size = 0x00800000;
+                   break;                              /* => 8 MB      */
+#endif
+           case AMD_ID_LV040B:
+                   info->flash_id += FLASH_AM040;
+                   info->sector_count = 8;
+                   info->size = 0x80000;
+                   info->chipwidth=1;
+                   break;
+
+           case INTEL_ID_28F640J3A:
+                   info->flash_id += FLASH_28F640J3A;
+                   info->sector_count = 64;
+                   info->size = 128*1024 * 64; /* 128kbytes x 64 blocks */
+                   info->chipwidth=2;
+                   if(portwidth==4) info->size*=2;     /* 2x16 */
+                   break;
+
+           case INTEL_ID_28F128J3A:
+                   info->flash_id += FLASH_28F128J3A;
+                   info->sector_count = 128;
+                   info->size = 128*1024 * 128; /* 128kbytes x 128 blocks */
+                   info->chipwidth=2;
+                   if(portwidth==4) info->size*=2;     /* 2x16 */
+                   break;
+
+           default:
+                   printf("Unknown id %lx:[%lx]\n", manu, id);
+                   info->flash_id = FLASH_UNKNOWN;
+                   info->chipwidth=1;
+                   return (0);                 /* => no or unknown flash */
+
+       }
+
+       flash_get_offsets(base, info);
+
+#if 0
+       /* set up sector start address table */
+       if (info->flash_id & FLASH_AM040) {
+               /* this chip has uniformly spaced sectors */
+               for (i = 0; i < info->sector_count; i++)
+                       info->start[i] = base + (i * 0x00010000);
+
+       } else if (info->flash_id & FLASH_BTYPE) {
+               /* set sector offsets for bottom boot block type        */
+               info->start[0] = base + 0x00000000;
+               info->start[1] = base + 0x00008000;
+               info->start[2] = base + 0x0000C000;
+               info->start[3] = base + 0x00010000;
+               for (i = 4; i < info->sector_count; i++) {
+                       info->start[i] = base + (i * 0x00020000) - 0x00060000;
+               }
+       } else {
+               /* set sector offsets for top boot block type           */
+               i = info->sector_count - 1;
+               info->start[i--] = base + info->size - 0x00008000;
+               info->start[i--] = base + info->size - 0x0000C000;
+               info->start[i--] = base + info->size - 0x00010000;
+               for (; i >= 0; i--) {
+                       info->start[i] = base + i * 0x00020000;
+               }
+       }
+#endif
+
+       /* check for protected sectors */
+       for (i = 0; i < info->sector_count; i++) {
+               /* read sector protection at sector address, (A7 .. A0)=0x02 */
+               /* D0 = 1 if protected */
+               caddr = (volatile unsigned char *)(info->start[i]);
+               saddr = (volatile unsigned short *)(info->start[i]);
+               laddr = (volatile unsigned long *)(info->start[i]);
+               if(portwidth==1)
+                   info->protect[i] = caddr[2] & 1;
+               else if(portwidth==2)
+                   info->protect[i] = saddr[2] & 1;
+               else
+                   info->protect[i] = laddr[2] & 1;
+       }
+
+       /*
+        * Prevent writes to uninitialized FLASH.
+        */
+       if (info->flash_id != FLASH_UNKNOWN) {
+               caddr = (volatile unsigned char *)info->start[0];
+
+               flash_cmd(portwidth,caddr,0,0xF0);      /* reset bank */
+       }
+
+       return (info->size);
+}
+
+/* TODO: 2x16 unsupported */
+int
+flash_erase (flash_info_t *info, int s_first, int s_last)
+{
+       volatile unsigned char *addr = (char *)(info->start[0]);
+       int flag, prot, sect, l_sect;
+       ulong start, now, last;
+
+       /* TODO: 2x16 unsupported */
+       if(info->portwidth==4) return 1;
+
+       if((info->flash_id & FLASH_TYPEMASK) == FLASH_ROM) return 1;
+       if((info->flash_id & FLASH_TYPEMASK) == FLASH_RAM) {
+           for (sect = s_first; sect<=s_last; sect++) {
+               int sector_size=info->size/info->sector_count;
+               addr = (char *)(info->start[sect]);
+               memset((void *)addr, 0, sector_size);
+           }
+           return 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;
+       }
+
+       if ((info->flash_id&FLASH_VENDMASK) == FLASH_MAN_INTEL)  {
+               return flash_erase_intel(info,
+                               (unsigned short)s_first,
+                               (unsigned short)s_last);
+       }
+
+#if 0
+       if ((info->flash_id == FLASH_UNKNOWN) ||
+           (info->flash_id > FLASH_AMD_COMP)) {
+               printf ("Can't erase unknown flash type %08lx - aborted\n",
+                       info->flash_id);
+               return 1;
+       }
+#endif
+
+       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");
+       }
+
+       l_sect = -1;
+
+       /* Disable interrupts which might cause a timeout here */
+       flag = disable_interrupts();
+
+       flash_cmd(info->portwidth,addr,0x555,0xAA);
+       flash_cmd(info->portwidth,addr,0x2AA,0x55);
+       flash_cmd(info->portwidth,addr,0x555,0x80);
+       flash_cmd(info->portwidth,addr,0x555,0xAA);
+       flash_cmd(info->portwidth,addr,0x2AA,0x55);
+
+       /* Start erase on unprotected sectors */
+       for (sect = s_first; sect<=s_last; sect++) {
+               if (info->protect[sect] == 0) { /* not protected */
+                       addr = (char *)(info->start[sect]);
+                       flash_cmd(info->portwidth,addr,0,0x30);
+                       l_sect = sect;
+               }
+       }
+
+       /* re-enable interrupts if necessary */
+       if (flag)
+               enable_interrupts();
+
+       /* wait at least 80us - let's wait 1 ms */
+       udelay (1000);
+
+       /*
+        * We wait for the last triggered sector
+        */
+       if (l_sect < 0)
+               goto DONE;
+
+       start = get_timer (0);
+       last  = start;
+       addr = (volatile unsigned char *)(info->start[l_sect]);
+       /* broken for 2x16: TODO */
+       while ((addr[0] & 0x80) != 0x80) {
+               if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) {
+                       printf ("Timeout\n");
+                       return 1;
+               }
+               /* show that we're waiting */
+               if ((now - last) > 1000) {      /* every second */
+                       putc ('.');
+                       last = now;
+               }
+       }
+
+DONE:
+       /* reset to read mode */
+       addr = (volatile unsigned char *)info->start[0];
+       flash_cmd(info->portwidth,addr,0,0xf0);
+       flash_cmd(info->portwidth,addr,0,0xf0);
+
+       printf (" done\n");
+       return 0;
+}
+
+/*-----------------------------------------------------------------------
+ * Copy memory to flash, returns:
+ * 0 - OK
+ * 1 - write timeout
+ * 2 - Flash not erased
+ */
+
+/* broken for 2x16: TODO */
+int
+write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
+{
+       ulong cp, wp, data;
+       int i, l, rc;
+
+       if(info->portwidth==4) return 1;
+
+       if((info->flash_id & FLASH_TYPEMASK) == FLASH_ROM) return 0;
+       if((info->flash_id & FLASH_TYPEMASK) == FLASH_RAM) {
+           memcpy((void *)addr, src, cnt);
+           return 0;
+       }
+
+       wp = (addr & ~3);       /* get lower word aligned address */
+
+       /*
+        * 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<4 && cnt>0; ++i) {
+                       data = (data << 8) | *src++;
+                       --cnt;
+                       ++cp;
+               }
+               for (; cnt==0 && i<4; ++i, ++cp) {
+                       data = (data << 8) | (*(uchar *)cp);
+               }
+
+               if ((rc = write_word(info, wp, data)) != 0) {
+                       return (rc);
+               }
+               wp += 4;
+       }
+
+       /*
+        * handle word aligned part
+        */
+       while (cnt >= 4) {
+               data = 0;
+               for (i=0; i<4; ++i) {
+                       data = (data << 8) | *src++;
+               }
+               if ((rc = write_word(info, wp, data)) != 0) {
+                       return (rc);
+               }
+               wp  += 4;
+               cnt -= 4;
+       }
+
+       if (cnt == 0) {
+               return (0);
+       }
+
+       /*
+        * handle unaligned tail bytes
+        */
+       data = 0;
+       for (i=0, cp=wp; i<4 && cnt>0; ++i, ++cp) {
+               data = (data << 8) | *src++;
+               --cnt;
+       }
+       for (; i<4; ++i, ++cp) {
+               data = (data << 8) | (*(uchar *)cp);
+       }
+
+       return (write_word(info, wp, data));
+}
+
+/*-----------------------------------------------------------------------
+ * Write a word to Flash, returns:
+ * 0 - OK
+ * 1 - write timeout
+ * 2 - Flash not erased
+ */
+/* broken for 2x16: TODO */
+static int
+write_word (flash_info_t *info, ulong dest, ulong data)
+{
+       volatile unsigned char *addr = (char *)(info->start[0]);
+       ulong start;
+       int flag, i;
+
+       if(info->portwidth==4) return 1;
+
+       if((info->flash_id & FLASH_TYPEMASK) == FLASH_ROM) return 1;
+       if((info->flash_id & FLASH_TYPEMASK) == FLASH_RAM) {
+           *(unsigned long *)dest=data;
+           return 0;
+       }
+       if ((info->flash_id & FLASH_VENDMASK) == FLASH_MAN_INTEL)  {
+               unsigned short low = data & 0xffff;
+               unsigned short hi  = (data >> 16) & 0xffff;
+               int ret = write_word_intel((bank_addr_t)dest, hi);
+
+               if (!ret) ret = write_word_intel((bank_addr_t)(dest+2), low);
+
+               return ret;
+       }
+
+       /* Check if Flash is (sufficiently) erased */
+       if ((*((vu_long *)dest) & data) != data) {
+               return (2);
+       }
+       /* Disable interrupts which might cause a timeout here */
+       flag = disable_interrupts();
+
+       /* first, perform an unlock bypass command to speed up flash writes */
+       addr[0x555] = 0xAA;
+       addr[0x2AA] = 0x55;
+       addr[0x555] = 0x20;
+
+       /* write each byte out */
+       for (i = 0; i < 4; i++) {
+               char *data_ch = (char *)&data;
+               addr[0] = 0xA0;
+               *(((char *)dest)+i) = data_ch[i];
+               udelay(10); /* XXX */
+       }
+
+       /* we're done, now do an unlock bypass reset */
+       addr[0] = 0x90;
+       addr[0] = 0x00;
+
+       /* re-enable interrupts if necessary */
+       if (flag)
+               enable_interrupts();
+
+       /* data polling for D7 */
+       start = get_timer (0);
+       while ((*((vu_long *)dest) & 0x00800080) != (data & 0x00800080)) {
+               if (get_timer(start) > CFG_FLASH_WRITE_TOUT) {
+                       return (1);
+               }
+       }
+       return (0);
+}
diff --git a/board/evb64260/memory.c b/board/evb64260/memory.c
new file mode 100644 (file)
index 0000000..9d301f8
--- /dev/null
@@ -0,0 +1,457 @@
+/* Memory.c - Memory mappings and remapping functions */
+
+/* Copyright - Galileo technology. */
+
+/* modified by Josh Huber to clean some things up, and
+ * fit it into the U-Boot framework */
+
+#include <galileo/core.h>
+#include <galileo/memory.h>
+
+/********************************************************************
+* memoryGetBankBaseAddress - Gets the base address of a memory bank
+*      - If the memory bank size is 0 then this base address has no meaning!!!
+*
+*
+* INPUTS:   MEMORY_BANK bank - The bank we ask for its base Address.
+* OUTPUT:   N/A
+* RETURNS: Memory bank base address.
+*********************************************************************/
+static unsigned long memoryGetBankRegOffset(MEMORY_BANK bank)
+{
+    switch (bank)
+    {
+       case BANK0:
+           return SCS_0_LOW_DECODE_ADDRESS;
+       case BANK1:
+           return SCS_1_LOW_DECODE_ADDRESS;
+       case BANK2:
+           return SCS_2_LOW_DECODE_ADDRESS;
+       case BANK3:
+           return SCS_3_LOW_DECODE_ADDRESS;
+    }
+    return SCS_0_LOW_DECODE_ADDRESS; /* default value */
+}
+
+unsigned int memoryGetBankBaseAddress(MEMORY_BANK bank)
+{
+    unsigned int base;
+    unsigned int regOffset=memoryGetBankRegOffset(bank);
+
+    GT_REG_READ(regOffset,&base);
+    base = base << 20;
+    return base;
+}
+
+/********************************************************************
+* memoryGetDeviceBaseAddress - Gets the base address of a device.
+*           - If the device size is 0 then this base address has no meaning!!!
+*
+*
+* INPUT:   DEVICE device - The device we ask for its base address.
+* OUTPUT:   N/A
+* RETURNS: Device base address.
+*********************************************************************/
+static unsigned int memoryGetDeviceRegOffset(DEVICE device)
+{
+    switch (device)
+    {
+       case DEVICE0:
+           return CS_0_LOW_DECODE_ADDRESS;
+       case DEVICE1:
+           return CS_1_LOW_DECODE_ADDRESS;
+       case DEVICE2:
+           return CS_2_LOW_DECODE_ADDRESS;
+       case DEVICE3:
+           return CS_3_LOW_DECODE_ADDRESS;
+       case BOOT_DEVICE:
+           return BOOTCS_LOW_DECODE_ADDRESS;
+    }
+    return CS_0_LOW_DECODE_ADDRESS; /* default value */
+}
+
+unsigned int memoryGetDeviceBaseAddress(DEVICE device)
+{
+    unsigned int regBase;
+    unsigned int regEnd;
+    unsigned int regOffset=memoryGetDeviceRegOffset(device);
+
+    GT_REG_READ(regOffset, &regBase);
+    GT_REG_READ(regOffset+8, &regEnd);
+
+    if(regEnd<=regBase) return 0xffffffff;     /* ERROR !!! */
+
+    regBase = regBase << 20;
+    return regBase;
+}
+
+/********************************************************************
+* memoryGetBankSize - Returns the size of a memory bank.
+*
+*
+* INPUT:    MEMORY_BANK bank - The bank we ask for its size.
+* OUTPUT:   N/A
+* RETURNS: Memory bank size.
+*********************************************************************/
+unsigned int memoryGetBankSize(MEMORY_BANK bank)
+{
+    unsigned int size,base;
+    unsigned int highValue;
+    unsigned int highAddress=memoryGetBankRegOffset(bank)+8;
+
+    base = memoryGetBankBaseAddress(bank);
+    GT_REG_READ(highAddress,&highValue);
+    highValue = (highValue + 1) << 20;
+    if(base > highValue)
+        size=0;
+    else
+        size = highValue - base;
+    return size;
+}
+
+/********************************************************************
+* memoryGetDeviceSize - Returns the size of a device memory space
+*
+*
+* INPUT:    DEVICE device - The device we ask for its base address.
+* OUTPUT:   N/A
+* RETURNS:  Size of a device memory space.
+*********************************************************************/
+unsigned int memoryGetDeviceSize(DEVICE device)
+{
+    unsigned int size,base;
+    unsigned int highValue;
+    unsigned int highAddress=memoryGetDeviceRegOffset(device)+8;
+
+    base = memoryGetDeviceBaseAddress(device);
+    GT_REG_READ(highAddress,&highValue);
+    if (highValue == 0xfff)
+    {
+        size = (~base) + 1;    /* what the heck is this? */
+        return size;
+    }
+    else
+        highValue = (highValue + 1) << 20;
+
+    if(base > highValue)
+        size=0;
+    else
+        size = highValue - base;
+    return size;
+}
+
+/********************************************************************
+* memoryGetDeviceWidth - A device can be with: 1,2,4 or 8 Bytes data width.
+*                  The width is determine in registers: 'Device Parameters'
+*                  registers (0x45c, 0x460, 0x464, 0x468, 0x46c - for each device.
+*                  at bits: [21:20].
+*
+* INPUT:    DEVICE device - Device number
+* OUTPUT:   N/A
+* RETURNS:  Device width in Bytes (1,2,4 or 8), 0 if error had occurred.
+*********************************************************************/
+unsigned int memoryGetDeviceWidth(DEVICE device)
+{
+    unsigned int width;
+    unsigned int regValue;
+
+    GT_REG_READ(DEVICE_BANK0PARAMETERS + device*4,&regValue);
+    width =  (regValue & 0x00300000) >> 20;
+    switch (width)
+    {
+        case 0:
+            return 1;
+        case 1:
+            return 2;
+        case 2:
+            return 4;
+        case 3:
+            return 8;
+        default:
+            return 0;
+    }
+}
+
+bool memoryMapBank(MEMORY_BANK bank, unsigned int bankBase,unsigned int bankLength)
+{
+    unsigned int low=0xfff;
+    unsigned int high=0x0;
+    unsigned int regOffset=memoryGetBankRegOffset(bank);
+
+    if(bankLength!=0) {
+       low = (bankBase >> 20) & 0xffff;
+       high=((bankBase+bankLength)>>20)-1;
+    }
+
+#ifdef DEBUG
+    {
+       unsigned int oldLow, oldHigh;
+       GT_REG_READ(regOffset,&oldLow);
+       GT_REG_READ(regOffset+8,&oldHigh);
+
+       printf("b%d %x-%x->%x-%x\n", bank, oldLow, oldHigh, low, high);
+    }
+#endif
+
+    GT_REG_WRITE(regOffset,low);
+    GT_REG_WRITE(regOffset+8,high);
+
+    return true;
+}
+bool memoryMapDeviceSpace(DEVICE device, unsigned int deviceBase,unsigned int deviceLength)
+{
+    /* TODO: what are appropriate "unmapped" values? */
+    unsigned int low=0xfff;
+    unsigned int high=0x0;
+    unsigned int regOffset=memoryGetDeviceRegOffset(device);
+
+    if(deviceLength != 0) {
+       low=deviceBase>>20;
+       high=((deviceBase+deviceLength)>>20)-1;
+    } else {
+       /* big problems in here... */
+       /* this will HANG */
+    }
+
+    GT_REG_WRITE(regOffset,low);
+    GT_REG_WRITE(regOffset+8,high);
+
+    return true;
+}
+
+
+/********************************************************************
+* memoryMapInternalRegistersSpace - Sets new base address for the internals
+*                                   registers.
+*
+* INPUTS:  unsigned int internalRegBase - The new base address.
+* RETURNS: true on success, false on failure
+*********************************************************************/
+bool memoryMapInternalRegistersSpace(unsigned int internalRegBase)
+{
+    unsigned int currentValue;
+    unsigned int internalValue = internalRegBase;
+
+    internalRegBase = (internalRegBase >> 20);
+    GT_REG_READ(INTERNAL_SPACE_DECODE,&currentValue);
+    internalRegBase = (currentValue & 0xffff0000) | internalRegBase;
+    GT_REG_WRITE(INTERNAL_SPACE_DECODE,internalRegBase);
+    INTERNAL_REG_BASE_ADDR = internalValue;
+    return true;
+}
+
+/********************************************************************
+* memoryGetInternalRegistersSpace - Gets internal registers Base Address.
+*
+* INPUTS:  unsigned int internalRegBase - The new base address.
+* RETURNS: true on success, false on failure
+*********************************************************************/
+unsigned int memoryGetInternalRegistersSpace(void)
+{
+    return INTERNAL_REG_BASE_ADDR;
+}
+
+/********************************************************************
+* memorySetProtectRegion - This function modifys one of the 8 regions with
+*                          one of the three protection mode.
+*                        - Be advised to check the spec before modifying them.
+*
+*
+* Inputs: CPU_PROTECT_REGION - one of the eight regions.
+*         CPU_ACCESS - general access.
+*         CPU_WRITE - read only access.
+*         CPU_CACHE_PROTECT - chache access.
+*      we defining CPU because there is another protect from the pci SIDE.
+* Returns: false if one of the parameters is wrong and true else
+*********************************************************************/
+bool memorySetProtectRegion(MEMORY_PROTECT_REGION region,
+                            MEMORY_ACCESS memAccess,
+                            MEMORY_ACCESS_WRITE memWrite,
+                            MEMORY_CACHE_PROTECT cacheProtection,
+                            unsigned int baseAddress,
+                            unsigned int regionLength)
+{
+    unsigned int protectHigh = baseAddress + regionLength;
+
+    if(regionLength == 0) /* closing the region */
+    {
+        GT_REG_WRITE(CPU_LOW_PROTECT_ADDRESS_0 + 0x10*region,0x0000ffff);
+        GT_REG_WRITE(CPU_HIGH_PROTECT_ADDRESS_0 + 0x10*region,0);
+        return true;
+    }
+    baseAddress =  (baseAddress & 0xfff00000) >> 20;
+    baseAddress = baseAddress | memAccess << 16 |  memWrite << 17
+                     | cacheProtection << 18;
+    GT_REG_WRITE(CPU_LOW_PROTECT_ADDRESS_0 + 0x10*region,baseAddress);
+    protectHigh = (protectHigh & 0xfff00000) >> 20;
+    GT_REG_WRITE(CPU_HIGH_PROTECT_ADDRESS_0 + 0x10*region,protectHigh - 1);
+    return true;
+}
+
+/********************************************************************
+* memorySetRegionSnoopMode - This function modifys one of the 4 regions which
+*                            supports Cache Coherency.
+*
+*
+* Inputs: SNOOP_REGION region - One of the four regions.
+*         SNOOP_TYPE snoopType - There is four optional Types:
+*                               1. No Snoop.
+*                               2. Snoop to WT region.
+*                               3. Snoop to WB region.
+*                               4. Snoop & Invalidate to WB region.
+*         unsigned int baseAddress - Base Address of this region.
+*         unsigned int topAddress - Top Address of this region.
+* Returns: false if one of the parameters is wrong and true else
+*********************************************************************/
+bool memorySetRegionSnoopMode(MEMORY_SNOOP_REGION region,
+                              MEMORY_SNOOP_TYPE snoopType,
+                              unsigned int baseAddress,
+                              unsigned int regionLength)
+{
+    unsigned int snoopXbaseAddress;
+    unsigned int snoopXtopAddress;
+    unsigned int data;
+    unsigned int snoopHigh = baseAddress + regionLength;
+
+    if( (region > MEM_SNOOP_REGION3) || (snoopType > MEM_SNOOP_WB) )
+        return false;
+    snoopXbaseAddress = SNOOP_BASE_ADDRESS_0 + 0x10 * region;
+    snoopXtopAddress = SNOOP_TOP_ADDRESS_0 + 0x10 * region;
+    if(regionLength == 0) /* closing the region */
+    {
+        GT_REG_WRITE(snoopXbaseAddress,0x0000ffff);
+        GT_REG_WRITE(snoopXtopAddress,0);
+        return true;
+    }
+    baseAddress = baseAddress & 0xffff0000;
+    data = (baseAddress >> 16) | snoopType << 16;
+    GT_REG_WRITE(snoopXbaseAddress,data);
+    snoopHigh = (snoopHigh & 0xfff00000) >> 20;
+    GT_REG_WRITE(snoopXtopAddress,snoopHigh - 1);
+    return true;
+}
+
+/********************************************************************
+* memoryRemapAddress - This fubction used for address remapping.
+*
+*
+* Inputs: regOffset: remap register
+*         remapValue :
+* Returns: false if one of the parameters is erroneous,true otherwise.
+*********************************************************************/
+bool memoryRemapAddress(unsigned int remapReg, unsigned int remapValue)
+{
+    unsigned int valueForReg;
+    valueForReg = (remapValue & 0xfff00000) >> 20;
+    GT_REG_WRITE(remapReg, valueForReg);
+    return true;
+}
+
+/********************************************************************
+* memoryGetDeviceParam - This function used for getting device parameters from
+*                        DEVICE BANK PARAMETERS REGISTER
+*
+*
+* Inputs:        - deviceParam: STRUCT with paramiters for DEVICE BANK
+*                  PARAMETERS REGISTER
+*                - deviceNum : number of device
+* Returns: false if one of the parameters is erroneous,true otherwise.
+*********************************************************************/
+bool memoryGetDeviceParam(DEVICE_PARAM *deviceParam, DEVICE deviceNum)
+{
+    unsigned int valueOfReg;
+    unsigned int calcData;
+
+    GT_REG_READ(DEVICE_BANK0PARAMETERS + 4 * deviceNum, &valueOfReg);
+    calcData = (0x7 & valueOfReg) + ((0x400000 & valueOfReg) >> 19);
+    deviceParam -> turnOff = calcData;          /* Turn Off */
+
+    calcData = ((0x78 & valueOfReg) >> 3) + ((0x800000 & valueOfReg) >> 19);
+    deviceParam -> acc2First = calcData;        /* Access To First */
+
+    calcData = ((0x780 & valueOfReg) >> 7) + ((0x1000000 & valueOfReg) >> 20);
+    deviceParam -> acc2Next = calcData;         /* Access To Next */
+
+    calcData = ((0x3800 & valueOfReg) >> 11) + ((0x2000000 & valueOfReg) >> 22);
+    deviceParam -> ale2Wr = calcData;           /* Ale To Write */
+
+    calcData = ((0x1c000 & valueOfReg) >> 14) + ((0x4000000 & valueOfReg) >> 23);
+    deviceParam -> wrLow = calcData;            /* Write Active */
+
+    calcData = ((0xe0000 & valueOfReg) >> 17) + ((0x8000000 & valueOfReg) >> 24);
+    deviceParam -> wrHigh = calcData;           /* Write High */
+
+    calcData = ((0x300000 & valueOfReg) >> 20);
+    switch (calcData)
+    {
+    case 0:
+        deviceParam -> deviceWidth = 1;         /* one Byte - 8-bit */
+        break;
+    case 1:
+        deviceParam -> deviceWidth = 2;         /* two Bytes - 16-bit */
+        break;
+    case 2:
+        deviceParam -> deviceWidth = 4;         /* four Bytes - 32-bit */
+        break;
+    case 3:
+        deviceParam -> deviceWidth = 8;         /* eight Bytes - 64-bit */
+        break;
+    default:
+        deviceParam -> deviceWidth = 1;
+        break;
+    }
+    return true;
+}
+
+/********************************************************************
+* memorySetDeviceParam - This function used for setting device parameters to
+*                        DEVICE BANK PARAMETERS REGISTER
+*
+*
+* Inputs:        - deviceParam: STRUCT for store paramiters from DEVICE BANK
+*                  PARAMETERS REGISTER
+*                - deviceNum : number of device
+* Returns: false if one of the parameters is erroneous,true otherwise.
+*********************************************************************/
+bool memorySetDeviceParam(DEVICE_PARAM *deviceParam, DEVICE deviceNum)
+{
+    unsigned int valueForReg;
+
+    if((deviceParam -> turnOff >= 0xf) || (deviceParam -> acc2First >= 0x1f) ||
+       (deviceParam -> acc2Next >= 0x1f) || (deviceParam -> ale2Wr >= 0xf) ||
+        (deviceParam -> wrLow >= 0xf) || (deviceParam -> wrHigh >= 0xf))
+        return false;
+    valueForReg = (((deviceParam -> turnOff) & 0x7) |
+                   (((deviceParam -> turnOff) & 0x8) << 19) |
+                   (((deviceParam -> acc2First) & 0xf) << 3) |
+                   (((deviceParam -> acc2First) & 0x10) << 19) |
+                   (((deviceParam -> acc2Next) & 0xf) << 7) |
+                   (((deviceParam -> acc2Next) & 0x10) << 20) |
+                   (((deviceParam -> ale2Wr) & 0x7) << 11) |
+                   (((deviceParam -> ale2Wr) & 0xf) << 22) |
+                   (((deviceParam -> wrLow) & 0x7) << 14) |
+                   (((deviceParam -> wrLow) & 0xf) << 23) |
+                   (((deviceParam -> wrHigh) & 0x7) << 17) |
+                   (((deviceParam -> wrHigh) & 0xf) << 24));
+    /* insert the device width: */
+    switch(deviceParam->deviceWidth)
+    {
+    case 1:
+        valueForReg = valueForReg | _8BIT;
+        break;
+    case 2:
+        valueForReg = valueForReg | _16BIT;
+        break;
+    case 4:
+        valueForReg = valueForReg | _32BIT;
+        break;
+    case 8:
+        valueForReg = valueForReg | _64BIT;
+        break;
+    default:
+        valueForReg = valueForReg | _8BIT;
+        break;
+    }
+    GT_REG_WRITE(DEVICE_BANK0PARAMETERS + 4 * deviceNum, valueForReg);
+    return true;
+}
diff --git a/board/evb64260/u-boot.lds b/board/evb64260/u-boot.lds
new file mode 100644 (file)
index 0000000..7b10c0d
--- /dev/null
@@ -0,0 +1,129 @@
+/*
+ * (C) Copyright 2001
+ * Josh Huber <huber@mclx.com>, Mission Critical Linux, 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
+ */
+
+/*
+ * u-boot.lds - linker script for U-Boot on the Galileo Eval Board.
+ */
+
+OUTPUT_ARCH(powerpc)
+SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
+/* Do we need any of these for elf?
+   __DYNAMIC = 0;    */
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = + SIZEOF_HEADERS;
+  .interp : { *(.interp) }
+  .hash          : { *(.hash)          }
+  .dynsym        : { *(.dynsym)                }
+  .dynstr        : { *(.dynstr)                }
+  .rel.text      : { *(.rel.text)              }
+  .rela.text     : { *(.rela.text)     }
+  .rel.data      : { *(.rel.data)              }
+  .rela.data     : { *(.rela.data)     }
+  .rel.rodata    : { *(.rel.rodata)    }
+  .rela.rodata   : { *(.rela.rodata)   }
+  .rel.got       : { *(.rel.got)               }
+  .rela.got      : { *(.rela.got)              }
+  .rel.ctors     : { *(.rel.ctors)     }
+  .rela.ctors    : { *(.rela.ctors)    }
+  .rel.dtors     : { *(.rel.dtors)     }
+  .rela.dtors    : { *(.rela.dtors)    }
+  .rel.bss       : { *(.rel.bss)               }
+  .rela.bss      : { *(.rela.bss)              }
+  .rel.plt       : { *(.rel.plt)               }
+  .rela.plt      : { *(.rela.plt)              }
+  .init          : { *(.init)  }
+  .plt : { *(.plt) }
+  .text      :
+  {
+    cpu/74xx_7xx/start.o       (.text)
+
+/* store the environment in a seperate sector in the boot flash */
+/*    . = env_offset; */
+/*    common/environment.o(.text) */
+
+    *(.text)
+    *(.fixup)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x00FF) & 0xFFFFFF00;
+  _erotext = .;
+  PROVIDE (erotext = .);
+  .reloc   :
+  {
+    *(.got)
+    _GOT2_TABLE_ = .;
+    *(.got2)
+    _FIXUP_TABLE_ = .;
+    *(.fixup)
+  }
+  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2;
+  __fixup_entries = (. - _FIXUP_TABLE_)>>2;
+
+  .data    :
+  {
+    *(.data)
+    *(.data1)
+    *(.sdata)
+    *(.sdata2)
+    *(.dynamic)
+    CONSTRUCTORS
+  }
+  _edata  =  .;
+  PROVIDE (edata = .);
+
+  __start___ex_table = .;
+  __ex_table : { *(__ex_table) }
+  __stop___ex_table = .;
+
+  . = ALIGN(256);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(256);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
diff --git a/board/gth/README b/board/gth/README
new file mode 100644 (file)
index 0000000..44caf3a
--- /dev/null
@@ -0,0 +1,20 @@
+Written by Thomas.Lange@corelatus.com 010805
+
+To make a system for gth that actually works ;-)
+the variable TBASE needs to be set to 0,1 or 2
+depending on location where image is supposed to
+be started from.
+E.g. make TBASE=1
+
+0: Start from RAM, base 0
+
+1: Start from flash_base + 0x10070
+
+2: Start from flash_base + 0x30070
+
+When using 1 or 2, the image is supposed to be launched
+from miniboot that boots the first U-Boot image found in
+flash.
+For miniboot code, description, see www.opensource.se
+
+
diff --git a/mkconfig b/mkconfig
new file mode 100644 (file)
index 0000000..5d2eb1e
--- /dev/null
+++ b/mkconfig
@@ -0,0 +1,57 @@
+#!/bin/sh -e
+
+# Script to create header files and links to configure
+# U-Boot for a specific board.
+#
+# Parameters:  Target  Architecture  CPU  Board
+#
+# (C) 2002 DENX Software Engineering, Wolfgang Denk <wd@denx.de>
+#
+
+APPEND=no      # Default: Create new config file
+
+while [ $# -gt 0 ] ; do
+       case "$1" in
+       --) shift ; break ;;
+       -a) shift ; APPEND=yes ;;
+       *)  break ;;
+       esac
+done
+
+[ $# -lt 4 ] && exit 1
+[ $# -gt 5 ] && exit 1
+
+echo "Configuring for $1 board..."
+
+cd ./include
+
+#
+# Create link to architecture specific headers
+#
+rm -f asm
+ln -s asm-$2 asm
+rm -f asm-$2/arch
+ln -s arch-$3 asm-$2/arch
+
+#
+# Create include file for Make
+#
+echo "ARCH  = $2" >  config.mk
+echo "CPU   = $3" >> config.mk
+echo "BOARD = $4" >> config.mk
+
+[ "$5" ] && echo "VENDOR = $5" >> config.mk
+
+#
+# Create board specific header file
+#
+if [ "$APPEND" = "yes" ]       # Append to existing config file
+then
+       echo >> config.h
+else
+       > config.h              # Create new config file
+fi
+echo "/* Automatically generated - do not edit */" >>config.h
+echo "#include <configs/$1.h>" >>config.h
+
+exit 0