]> git.sur5r.net Git - u-boot/commitdiff
Merge branch 'master' of git://www.denx.de/git/u-boot-ixp
authorWolfgang Denk <wd@denx.de>
Wed, 23 Jan 2008 13:39:26 +0000 (14:39 +0100)
committerWolfgang Denk <wd@denx.de>
Wed, 23 Jan 2008 13:39:26 +0000 (14:39 +0100)
263 files changed:
CREDITS
MAINTAINERS
MAKEALL
Makefile
README
board/amcc/kilauea/cmd_pll.c
board/amcc/makalu/cmd_pll.c
board/amcc/sequoia/init.S
board/amcc/sequoia/sequoia.c
board/atmel/atngw100/Makefile [new file with mode: 0644]
board/atmel/atngw100/atngw100.c [new file with mode: 0644]
board/atmel/atngw100/config.mk [new file with mode: 0644]
board/atmel/atngw100/eth.c [new file with mode: 0644]
board/atmel/atngw100/u-boot.lds [new file with mode: 0644]
board/atum8548/Makefile
board/atum8548/init.S [deleted file]
board/atum8548/law.c [new file with mode: 0644]
board/atum8548/tlb.c [new file with mode: 0644]
board/atum8548/u-boot.lds
board/bf537-stamp/bf537-stamp.c
board/bf537-stamp/ether_bf537.h
board/esd/du440/Makefile [new file with mode: 0644]
board/esd/du440/config.mk [new file with mode: 0644]
board/esd/du440/du440.c [new file with mode: 0644]
board/esd/du440/du440.h [new file with mode: 0644]
board/esd/du440/init.S [new file with mode: 0644]
board/esd/du440/u-boot.lds [new file with mode: 0644]
board/freescale/common/sys_eeprom.c
board/freescale/m52277evb/Makefile [new file with mode: 0644]
board/freescale/m52277evb/config.mk [new file with mode: 0644]
board/freescale/m52277evb/m52277evb.c [new file with mode: 0644]
board/freescale/m52277evb/u-boot.lds [new file with mode: 0644]
board/freescale/m5329evb/nand.c
board/freescale/m5373evb/Makefile [new file with mode: 0644]
board/freescale/m5373evb/config.mk [new file with mode: 0644]
board/freescale/m5373evb/m5373evb.c [new file with mode: 0644]
board/freescale/m5373evb/mii.c [new file with mode: 0644]
board/freescale/m5373evb/nand.c [new file with mode: 0644]
board/freescale/m5373evb/u-boot.lds [new file with mode: 0644]
board/freescale/m547xevb/Makefile [new file with mode: 0644]
board/freescale/m547xevb/config.mk [new file with mode: 0644]
board/freescale/m547xevb/m547xevb.c [new file with mode: 0644]
board/freescale/m547xevb/mii.c [new file with mode: 0644]
board/freescale/m547xevb/u-boot.lds [new file with mode: 0644]
board/freescale/m548xevb/Makefile [new file with mode: 0644]
board/freescale/m548xevb/config.mk [new file with mode: 0644]
board/freescale/m548xevb/m548xevb.c [new file with mode: 0644]
board/freescale/m548xevb/mii.c [new file with mode: 0644]
board/freescale/m548xevb/u-boot.lds [new file with mode: 0644]
board/freescale/mpc8349emds/mpc8349emds.c
board/freescale/mpc8540ads/Makefile
board/freescale/mpc8540ads/init.S [deleted file]
board/freescale/mpc8540ads/law.c [new file with mode: 0644]
board/freescale/mpc8540ads/tlb.c [new file with mode: 0644]
board/freescale/mpc8540ads/u-boot.lds
board/freescale/mpc8541cds/Makefile
board/freescale/mpc8541cds/init.S [deleted file]
board/freescale/mpc8541cds/law.c [new file with mode: 0644]
board/freescale/mpc8541cds/tlb.c [new file with mode: 0644]
board/freescale/mpc8541cds/u-boot.lds
board/freescale/mpc8544ds/Makefile
board/freescale/mpc8544ds/init.S [deleted file]
board/freescale/mpc8544ds/law.c [new file with mode: 0644]
board/freescale/mpc8544ds/tlb.c [new file with mode: 0644]
board/freescale/mpc8544ds/u-boot.lds
board/freescale/mpc8548cds/Makefile
board/freescale/mpc8548cds/init.S [deleted file]
board/freescale/mpc8548cds/law.c [new file with mode: 0644]
board/freescale/mpc8548cds/tlb.c [new file with mode: 0644]
board/freescale/mpc8548cds/u-boot.lds
board/freescale/mpc8555cds/Makefile
board/freescale/mpc8555cds/init.S [deleted file]
board/freescale/mpc8555cds/law.c [new file with mode: 0644]
board/freescale/mpc8555cds/tlb.c [new file with mode: 0644]
board/freescale/mpc8555cds/u-boot.lds
board/freescale/mpc8560ads/Makefile
board/freescale/mpc8560ads/init.S [deleted file]
board/freescale/mpc8560ads/law.c [new file with mode: 0644]
board/freescale/mpc8560ads/tlb.c [new file with mode: 0644]
board/freescale/mpc8560ads/u-boot.lds
board/freescale/mpc8568mds/Makefile
board/freescale/mpc8568mds/init.S [deleted file]
board/freescale/mpc8568mds/law.c [new file with mode: 0644]
board/freescale/mpc8568mds/tlb.c [new file with mode: 0644]
board/freescale/mpc8568mds/u-boot.lds
board/korat/korat.c
board/mpc8540eval/Makefile
board/mpc8540eval/init.S [deleted file]
board/mpc8540eval/law.c [new file with mode: 0644]
board/mpc8540eval/tlb.c [new file with mode: 0644]
board/mpc8540eval/u-boot.lds
board/netstal/common/fixed_sdram.c [new file with mode: 0644]
board/netstal/common/nm.h [new file with mode: 0644]
board/netstal/common/nm_bsp.c
board/netstal/hcu4/Makefile
board/netstal/hcu4/config.mk
board/netstal/hcu4/hcu4.c
board/netstal/hcu5/Makefile
board/netstal/hcu5/README.txt
board/netstal/hcu5/config.mk
board/netstal/hcu5/hcu5.c
board/netstal/hcu5/init.S
board/netstal/hcu5/sdram.c
board/netstal/hcu5/u-boot.lds
board/pm854/Makefile
board/pm854/init.S [deleted file]
board/pm854/law.c [new file with mode: 0644]
board/pm854/tlb.c [new file with mode: 0644]
board/pm854/u-boot.lds
board/pm856/Makefile
board/pm856/init.S [deleted file]
board/pm856/law.c [new file with mode: 0644]
board/pm856/tlb.c [new file with mode: 0644]
board/pm856/u-boot.lds
board/qemu-mips/Makefile [new file with mode: 0644]
board/qemu-mips/README [new file with mode: 0644]
board/qemu-mips/config.mk [new file with mode: 0644]
board/qemu-mips/flash.c [new file with mode: 0644]
board/qemu-mips/lowlevel_init.S [new file with mode: 0644]
board/qemu-mips/qemu-mips.c [new file with mode: 0644]
board/qemu-mips/u-boot.lds [new file with mode: 0644]
board/sbc8548/Makefile
board/sbc8548/init.S [deleted file]
board/sbc8548/law.c [new file with mode: 0644]
board/sbc8548/tlb.c [new file with mode: 0644]
board/sbc8548/u-boot.lds
board/sbc8560/Makefile
board/sbc8560/init.S [deleted file]
board/sbc8560/law.c [new file with mode: 0644]
board/sbc8560/tlb.c [new file with mode: 0644]
board/sbc8560/u-boot.lds
board/stxgp3/Makefile
board/stxgp3/init.S [deleted file]
board/stxgp3/law.c [new file with mode: 0644]
board/stxgp3/tlb.c [new file with mode: 0644]
board/stxgp3/u-boot.lds
board/stxssa/Makefile
board/stxssa/init.S [deleted file]
board/stxssa/law.c [new file with mode: 0644]
board/stxssa/tlb.c [new file with mode: 0644]
board/stxssa/u-boot.lds
board/tqm85xx/Makefile
board/tqm85xx/init.S [deleted file]
board/tqm85xx/law.c [new file with mode: 0644]
board/tqm85xx/tlb.c [new file with mode: 0644]
board/tqm85xx/u-boot.lds
common/cmd_mac.c
common/cmd_net.c
cpu/mcf5227x/Makefile [new file with mode: 0644]
cpu/mcf5227x/config.mk [new file with mode: 0644]
cpu/mcf5227x/cpu.c [new file with mode: 0644]
cpu/mcf5227x/cpu_init.c [new file with mode: 0644]
cpu/mcf5227x/interrupts.c [new file with mode: 0644]
cpu/mcf5227x/speed.c [new file with mode: 0644]
cpu/mcf5227x/start.S [new file with mode: 0644]
cpu/mcf532x/cpu.c
cpu/mcf5445x/cpu_init.c
cpu/mcf5445x/pci.c
cpu/mcf5445x/start.S
cpu/mcf547x_8x/Makefile [new file with mode: 0644]
cpu/mcf547x_8x/config.mk [new file with mode: 0644]
cpu/mcf547x_8x/cpu.c [new file with mode: 0644]
cpu/mcf547x_8x/cpu_init.c [new file with mode: 0644]
cpu/mcf547x_8x/interrupts.c [new file with mode: 0644]
cpu/mcf547x_8x/pci.c [new file with mode: 0644]
cpu/mcf547x_8x/slicetimer.c [new file with mode: 0644]
cpu/mcf547x_8x/speed.c [new file with mode: 0644]
cpu/mcf547x_8x/start.S [new file with mode: 0644]
cpu/mpc83xx/cpu_init.c
cpu/mpc83xx/speed.c
cpu/mpc85xx/Makefile
cpu/mpc85xx/cpu_init.c
cpu/mpc85xx/spd_sdram.c
cpu/mpc85xx/start.S
cpu/mpc85xx/tlb.c [new file with mode: 0644]
cpu/ppc4xx/44x_spd_ddr2.c
doc/README.m52277evb [new file with mode: 0644]
doc/README.m5373evb [new file with mode: 0644]
doc/README.m5475evb [new file with mode: 0644]
drivers/dma/MCD_dmaApi.c [new file with mode: 0644]
drivers/dma/MCD_tasks.c [new file with mode: 0644]
drivers/dma/MCD_tasksInit.c [new file with mode: 0644]
drivers/dma/Makefile [new file with mode: 0644]
drivers/misc/Makefile
drivers/misc/fsl_law.c [new file with mode: 0644]
drivers/net/Makefile
drivers/net/fsl_mcdmafec.c [new file with mode: 0644]
drivers/net/rtl8139.c
drivers/net/tsec.c
drivers/net/tsec.h
drivers/qe/uec.c
drivers/qe/uec_phy.c
drivers/serial/serial_sh.c
drivers/spi/Makefile [new file with mode: 0644]
drivers/spi/mpc8xxx_spi.c [new file with mode: 0644]
include/MCD_dma.h [new file with mode: 0644]
include/MCD_progCheck.h [new file with mode: 0644]
include/MCD_tasksInit.h [new file with mode: 0644]
include/asm-m68k/coldfire/crossbar.h [new file with mode: 0644]
include/asm-m68k/coldfire/dspi.h [new file with mode: 0644]
include/asm-m68k/coldfire/edma.h [new file with mode: 0644]
include/asm-m68k/coldfire/flexbus.h [new file with mode: 0644]
include/asm-m68k/coldfire/lcd.h [new file with mode: 0644]
include/asm-m68k/coldfire/ssi.h [new file with mode: 0644]
include/asm-m68k/fec.h
include/asm-m68k/fsl_mcdmafec.h [new file with mode: 0644]
include/asm-m68k/global_data.h
include/asm-m68k/immap.h
include/asm-m68k/immap_5227x.h [new file with mode: 0644]
include/asm-m68k/immap_5329.h
include/asm-m68k/immap_5445x.h
include/asm-m68k/immap_547x_8x.h [new file with mode: 0644]
include/asm-m68k/io.h
include/asm-m68k/m5227x.h [new file with mode: 0644]
include/asm-m68k/m5329.h
include/asm-m68k/m5445x.h
include/asm-m68k/m547x_8x.h [new file with mode: 0644]
include/asm-ppc/fsl_law.h [new file with mode: 0644]
include/asm-ppc/immap_83xx.h
include/asm-ppc/mmu.h
include/asm-ppc/mpc8xxx_spi.h [new file with mode: 0644]
include/configs/ATUM8548.h
include/configs/DU440.h [new file with mode: 0644]
include/configs/M52277EVB.h [new file with mode: 0644]
include/configs/M5329EVB.h
include/configs/M5373EVB.h [new file with mode: 0644]
include/configs/M54455EVB.h
include/configs/M5475EVB.h [new file with mode: 0644]
include/configs/M5485EVB.h [new file with mode: 0644]
include/configs/MPC8349EMDS.h
include/configs/MPC8540ADS.h
include/configs/MPC8540EVAL.h
include/configs/MPC8541CDS.h
include/configs/MPC8544DS.h
include/configs/MPC8548CDS.h
include/configs/MPC8555CDS.h
include/configs/MPC8560ADS.h
include/configs/MPC8568MDS.h
include/configs/MPC8610HPCD.h
include/configs/MPC8641HPCN.h
include/configs/PM854.h
include/configs/PM856.h
include/configs/PMC440.h
include/configs/SBC8540.h
include/configs/TQM85xx.h
include/configs/atngw100.h [new file with mode: 0644]
include/configs/hcu4.h
include/configs/hcu5.h
include/configs/kilauea.h
include/configs/makalu.h
include/configs/ms7720se.h
include/configs/qemu-mips.h [new file with mode: 0644]
include/configs/sbc8548.h
include/configs/sbc8560.h
include/configs/stxgp3.h
include/configs/stxssa.h
include/mpc83xx.h
lib_avr32/board.c
lib_m68k/board.c
lib_ppc/board.c
net/eth.c
post/cpu/ppc4xx/denali_ecc.c
post/cpu/ppc4xx/spr.c

diff --git a/CREDITS b/CREDITS
index edf825c70ea08bf9a4ce3ec28f43f9ad9d2f1081..57a82d2dc26ff578d68063447a031f3983a6b85e 100644 (file)
--- a/CREDITS
+++ b/CREDITS
@@ -290,7 +290,7 @@ W: http://www.leox.org
 
 N: TsiChung Liew
 E: Tsi-Chung.Liew@freescale.com
-D: Support for ColdFire MCF523x, MCF532x, MCF5445x
+D: Support for ColdFire MCF523x, MCF532x, MCF5445x, MCF547x_8x
 W: www.freescale.com
 
 N: Leif Lindholm
index cf302e0e759ada15428b9898df6278955e6707b9..273bfacf211ed6527fc14232414fcfd8bdabf3ae 100644 (file)
@@ -154,6 +154,7 @@ Matthias Fuchs <matthias.fuchs@esd-electronics.com>
        DASA_SIM                IOP480 (PPC401)
        DP405                   PPC405EP
        DU405                   PPC405GP
+       DU440                   PPC440EPx
        G2000                   PPC405EP
        HH405                   PPC405EP
        HUB405                  PPC405EP
@@ -590,6 +591,9 @@ Thomas Lange <thomas@corelatus.se>
        dbau1x00                MIPS32 Au1000
        gth2                    MIPS32 Au1000
 
+Vlad Lungu <vlad@comsys.ro>
+       qemu_mips               MIPS32
+
 #########################################################################
 # Nios-32 Systems:                                                     #
 #                                                                      #
@@ -654,9 +658,13 @@ Zachary P. Landau <zachary.landau@labxtechnologies.com>
 
 TsiChung Liew <Tsi-Chung.Liew@freescale.com>
 
+       M52277EVB               mcf5227x
        M5235EVB                mcf52x2
        M5329EVB                mcf532x
+       M5373EVB                mcf532x
        M54455EVB               mcf5445x
+       M5475EVB                mcf547x_8x
+       M5485EVB                mcf547x_8x
 
 Hayden Fraser <Hayden.Fraser@freescale.com>
 
@@ -675,6 +683,7 @@ Haavard Skinnemoen <hskinnemoen@atmel.com>
        ATSTK1002               AT32AP7000
        ATSTK1003               AT32AP7001
        ATSTK1004               AT32AP7002
+       ATNGW100                AT32AP7000
 
 #########################################################################
 # SuperH Systems:                                                      #
diff --git a/MAKEALL b/MAKEALL
index c4731eae4b7cebc5f57e351b71b4cf8b9b3eac23..d66a5fa1aad9566a9e31515e4f3afde9f0d4ead5 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -178,6 +178,7 @@ LIST_4xx="          \
        DASA_SIM        \
        DP405           \
        DU405           \
+       DU440           \
        ebony           \
        ERIC            \
        EXBITGEN        \
@@ -547,6 +548,7 @@ LIST_arm="          \
 
 LIST_mips4kc="         \
        incaip          \
+       qemu_mips       \
 "
 
 LIST_mips5kc="         \
@@ -647,14 +649,18 @@ LIST_coldfire="                   \
        EB+MCF-EV123            \
        EB+MCF-EV123_internal   \
        idmr                    \
+       M52277EVB               \
        M5235EVB                \
        M5249EVB                \
        M5253EVB                \
        M5271EVB                \
        M5272C3                 \
        M5282EVB                \
-       M5329EVB                \
+       M5329AFEE               \
+       M5373EVB                \
        M54455EVB               \
+       M5475AFE                \
+       M5485AFE                \
        r5200                   \
        TASREG                  \
 "
@@ -667,6 +673,7 @@ LIST_avr32="                \
        atstk1002       \
        atstk1003       \
        atstk1004       \
+       atngw100        \
 "
 
 #########################################################################
index a241b7946f854cff109b83e7994745e5d1f98473..0f6cc59aeeba4ff3fe36bcd0be5308b08f881804 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -218,6 +218,7 @@ LIBS += net/libnet.a
 LIBS += disk/libdisk.a
 LIBS += drivers/bios_emulator/libatibiosemu.a
 LIBS += drivers/block/libblock.a
+LIBS += drivers/dma/libdma.a
 LIBS += drivers/hwmon/libhwmon.a
 LIBS += drivers/i2c/libi2c.a
 LIBS += drivers/input/libinput.a
@@ -230,6 +231,7 @@ LIBS += drivers/net/libnet.a
 LIBS += drivers/net/sk98lin/libsk98lin.a
 LIBS += drivers/pci/libpci.a
 LIBS += drivers/pcmcia/libpcmcia.a
+LIBS += drivers/spi/libspi.a
 ifeq ($(CPU),mpc83xx)
 LIBS += drivers/qe/qe.a
 endif
@@ -377,6 +379,7 @@ TAG_SUBDIRS += drivers/pcmcia
 TAG_SUBDIRS += drivers/qe
 TAG_SUBDIRS += drivers/rtc
 TAG_SUBDIRS += drivers/serial
+TAG_SUBDIRS += drivers/spi
 TAG_SUBDIRS += drivers/usb
 TAG_SUBDIRS += drivers/video
 
@@ -1206,6 +1209,9 @@ DP405_config:     unconfig
 DU405_config:  unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx du405 esd
 
+DU440_config:  unconfig
+       @$(MKCONFIG) $(@:_config=) ppc ppc4xx du440 esd
+
 ebony_config:  unconfig
        @$(MKCONFIG) $(@:_config=) ppc ppc4xx ebony amcc
 
@@ -1739,6 +1745,9 @@ ZPC1900_config: unconfig
 ## Coldfire
 #########################################################################
 
+M52277EVB_config:      unconfig
+       @$(MKCONFIG) -a M52277EVB m68k mcf5227x m52277evb freescale
+
 M5235EVB_config \
 M5235EVB_Flash16_config \
 M5235EVB_Flash32_config:       unconfig
@@ -1811,6 +1820,16 @@ M5329BFEE_config :       unconfig
        fi
        @$(MKCONFIG) -a M5329EVB m68k mcf532x m5329evb freescale
 
+M5373EVB_config :      unconfig
+       @case "$@" in \
+       M5373EVB_config)        NAND=16;; \
+       esac; \
+       >include/config.h ; \
+       if [ "$${NAND}" != "0" ] ; then \
+               echo "#define NANDFLASH_SIZE    $${NAND}" > $(obj)include/config.h ; \
+       fi
+       @$(MKCONFIG) -a M5373EVB m68k mcf532x m5373evb freescale
+
 M54455EVB_config \
 M54455EVB_atmel_config \
 M54455EVB_intel_config \
@@ -1843,6 +1862,76 @@ M54455EVB_i66_config :   unconfig
        $(XECHO) "... with $${FREQ}Hz input clock"
        @$(MKCONFIG) -a M54455EVB m68k mcf5445x m54455evb freescale
 
+M5475AFE_config \
+M5475BFE_config \
+M5475CFE_config \
+M5475DFE_config \
+M5475EFE_config \
+M5475FFE_config \
+M5475GFE_config :      unconfig
+       @case "$@" in \
+       M5475AFE_config)        BOOT=2;CODE=0;VID=0;USB=0;RAM=64;RAM1=0;; \
+       M5475BFE_config)        BOOT=2;CODE=16;VID=0;USB=0;RAM=64;RAM1=0;; \
+       M5475CFE_config)        BOOT=2;CODE=16;VID=1;USB=1;RAM=64;RAM1=0;; \
+       M5475DFE_config)        BOOT=2;CODE=0;VID=0;USB=1;RAM=64;RAM1=0;; \
+       M5475EFE_config)        BOOT=2;CODE=0;VID=1;USB=1;RAM=64;RAM1=0;; \
+       M5475FFE_config)        BOOT=2;CODE=32;VID=1;USB=1;RAM=64;RAM1=64;; \
+       M5475GFE_config)        BOOT=4;CODE=0;VID=0;USB=0;RAM=64;RAM1=0;; \
+       esac; \
+       >include/config.h ; \
+       echo "#define CFG_BUSCLK        133333333" > $(obj)include/config.h ; \
+       echo "#define CFG_BOOTSZ        $${BOOT}" >> $(obj)include/config.h ; \
+       echo "#define CFG_DRAMSZ        $${RAM}" >> $(obj)include/config.h ; \
+       if [ "$${RAM1}" != "0" ] ; then \
+               echo "#define CFG_DRAMSZ1       $${RAM1}" >> $(obj)include/config.h ; \
+       fi; \
+       if [ "$${CODE}" != "0" ] ; then \
+               echo "#define CFG_NOR1SZ        $${CODE}" >> $(obj)include/config.h ; \
+       fi; \
+       if [ "$${VID}" == "1" ] ; then \
+               echo "#define CFG_VIDEO" >> $(obj)include/config.h ; \
+       fi; \
+       if [ "$${USB}" == "1" ] ; then \
+               echo "#define CFG_USBCTRL" >> $(obj)include/config.h ; \
+       fi
+       @$(MKCONFIG) -a M5475EVB m68k mcf547x_8x m547xevb freescale
+
+M5485AFE_config \
+M5485BFE_config \
+M5485CFE_config \
+M5485DFE_config \
+M5485EFE_config \
+M5485FFE_config \
+M5485GFE_config \
+M5485HFE_config :      unconfig
+       @case "$@" in \
+       M5485AFE_config)        BOOT=2;CODE=0;VID=0;USB=0;RAM=64;RAM1=0;; \
+       M5485BFE_config)        BOOT=2;CODE=16;VID=0;USB=0;RAM=64;RAM1=0;; \
+       M5485CFE_config)        BOOT=2;CODE=16;VID=1;USB=1;RAM=64;RAM1=0;; \
+       M5485DFE_config)        BOOT=2;CODE=0;VID=0;USB=1;RAM=64;RAM1=0;; \
+       M5485EFE_config)        BOOT=2;CODE=0;VID=1;USB=1;RAM=64;RAM1=0;; \
+       M5485FFE_config)        BOOT=2;CODE=32;VID=1;USB=1;RAM=64;RAM1=64;; \
+       M5485GFE_config)        BOOT=4;CODE=0;VID=0;USB=0;RAM=64;RAM1=0;; \
+       M5485HFE_config)        BOOT=2;CODE=;VID=1;USB=0;RAM=64;RAM1=0;; \
+       esac; \
+       >include/config.h ; \
+       echo "#define CFG_BUSCLK        100000000" > $(obj)include/config.h ; \
+       echo "#define CFG_BOOTSZ        $${BOOT}" >> $(obj)include/config.h ; \
+       echo "#define CFG_DRAMSZ        $${RAM}" >> $(obj)include/config.h ; \
+       if [ "$${RAM1}" != "0" ] ; then \
+               echo "#define CFG_DRAMSZ1       $${RAM1}" >> $(obj)include/config.h ; \
+       fi; \
+       if [ "$${CODE}" != "0" ] ; then \
+               echo "#define CFG_NOR1SZ        $${CODE}" >> $(obj)include/config.h ; \
+       fi; \
+       if [ "$${VID}" == "1" ] ; then \
+               echo "#define CFG_VIDEO" >> $(obj)include/config.h ; \
+       fi; \
+       if [ "$${USB}" == "1" ] ; then \
+               echo "#define CFG_USBCTRL" >> $(obj)include/config.h ; \
+       fi
+       @$(MKCONFIG) -a M5485EVB m68k mcf547x_8x m548xevb freescale
+
 #########################################################################
 ## MPC83xx Systems
 #########################################################################
@@ -2613,6 +2702,12 @@ pb1000_config            :       unconfig
        @echo "#define CONFIG_PB1000 1" >>$(obj)include/config.h
        @$(MKCONFIG) -a pb1x00 mips mips pb1x00
 
+qemu_mips_config: unconfig
+       @mkdir -p $(obj)include
+       @ >$(obj)include/config.h
+       @echo "#define CONFIG_QEMU_MIPS 1" >>$(obj)include/config.h
+       @$(MKCONFIG) -a qemu-mips mips mips qemu-mips
+
 #########################################################################
 ## MIPS64 5Kc
 #########################################################################
@@ -2763,6 +2858,9 @@ atstk1003_config  :       unconfig
 atstk1004_config       :       unconfig
        @$(MKCONFIG) $(@:_config=) avr32 at32ap atstk1000 atmel at32ap700x
 
+atngw100_config        :       unconfig
+       @$(MKCONFIG) $(@:_config=) avr32 at32ap atngw100 atmel at32ap700x
+
 #########################################################################
 #########################################################################
 #########################################################################
diff --git a/README b/README
index cc5527452c229d8c5a2766dd0617806e258318e0..a5ffbb5ad15cad1cf5faef53566562b0b5cabaf4 100644 (file)
--- a/README
+++ b/README
@@ -136,8 +136,10 @@ Directory Hierarchy:
   - i386       Files specific to i386 CPUs
   - ixp                Files specific to Intel XScale IXP CPUs
   - mcf52x2    Files specific to Freescale ColdFire MCF52x2 CPUs
+  - mcf5227x   Files specific to Freescale ColdFire MCF5227x CPUs
   - mcf532x    Files specific to Freescale ColdFire MCF5329 CPUs
   - mcf5445x   Files specific to Freescale ColdFire MCF5445x CPUs
+  - mcf547x_8x Files specific to Freescale ColdFire MCF547x_8x CPUs
   - mips       Files specific to MIPS CPUs
   - mpc5xx     Files specific to Freescale MPC5xx  CPUs
   - mpc5xxx    Files specific to Freescale MPC5xxx CPUs
@@ -1377,6 +1379,14 @@ The following options need to be configured:
                SPI configuration items (port pins to use, etc). For
                an example, see include/configs/sacsng.h.
 
+               CONFIG_HARD_SPI
+
+               Enables a hardware SPI driver for general-purpose reads
+               and writes.  As with CONFIG_SOFT_SPI, the board configuration
+               must define a list of chip-select function pointers.
+               Currently supported on some MPC8xxx processors.  For an
+               example, see include/configs/mpc8349emds.h.
+
 - FPGA Support: CONFIG_FPGA
 
                Enables FPGA subsystem.
@@ -2691,6 +2701,10 @@ Some configuration options can be set using Environment Variables:
                  => setenv ethact SCC ETHERNET
                  => ping 10.0.0.1 # traffic sent on SCC ETHERNET
 
+  ethrotate    - When set to "no" U-Boot does not go through all
+                 available network interfaces.
+                 It just stays at the currently selected interface.
+
    netretry    - When set to "no" each network operation will
                  either succeed or fail without retrying.
                  When set to "once" the network operation will
index b2666dd83b015d481da191ab31273de008700158..0d2f27fe520eb74df6132f003c0ff224ae2178f7 100644 (file)
@@ -294,4 +294,4 @@ U_BOOT_CMD(
        -----------------------------------------------\n"
        );
 
-#endif /* (CONFIG_COMMANDS & CFG_CMD_EEPROM) */
+#endif /* CONFIG_CMD_EEPROM */
index b2666dd83b015d481da191ab31273de008700158..0d2f27fe520eb74df6132f003c0ff224ae2178f7 100644 (file)
@@ -294,4 +294,4 @@ U_BOOT_CMD(
        -----------------------------------------------\n"
        );
 
-#endif /* (CONFIG_COMMANDS & CFG_CMD_EEPROM) */
+#endif /* CONFIG_CMD_EEPROM */
index 306c92c157ed8c3406e0c2bffc2b2cf7f3a5d990..46a37c6a20175acc01c1273ef528f7147d18b06c 100644 (file)
@@ -1,4 +1,6 @@
 /*
+ * (C) Copyright 2008
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -23,7 +25,7 @@
 #include <asm-ppc/mmu.h>
 #include <config.h>
 
-/**************************************************************************
+/*
  * TLB TABLE
  *
  * This table is used by the cpu boot code to setup the initial tlb
@@ -31,8 +33,7 @@
  * this table lets each board set things up however they like.
  *
  *  Pointer to the table is returned in r1
- *
- *************************************************************************/
+ */
     .section .bootpg,"ax"
     .globl tlbtab
 
index e46efef10a725b5e81ad60dd684090bff59a1fb8..ce0537f220684b97f4ddb360a81377ca4076418f 100644 (file)
@@ -4,7 +4,7 @@
  *
  * (C) Copyright 2006
  * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com
- * Alain Saurel,           AMCC/IBM, alain.saurel@fr.ibm.com
+ * Alain Saurel,            AMCC/IBM, alain.saurel@fr.ibm.com
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
 #include <asm/gpio.h>
 #include <asm/processor.h>
 #include <asm/io.h>
+#include <asm/bitops.h>
 #include <asm/ppc4xx-intvec.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips   */
+extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
 
 ulong flash_get_size (ulong base, int banknum);
 
@@ -46,9 +47,9 @@ int board_early_init_f(void)
        mtdcr(ebccfga, xbcfg);
        mtdcr(ebccfgd, 0xb8400000);
 
-       /*--------------------------------------------------------------------
+       /*
         * Setup the interrupt controller polarities, triggers, etc.
-        *-------------------------------------------------------------------*/
+        */
        mtdcr(uic0sr, 0xffffffff);      /* clear all */
        mtdcr(uic0er, 0x00000000);      /* disable all */
        mtdcr(uic0cr, 0x00000005);      /* ATI & UIC1 crit are critical */
@@ -87,9 +88,11 @@ int board_early_init_f(void)
 
        /* select Ethernet pins */
        mfsdr(SDR0_PFC1, sdr0_pfc1);
-       sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SELECT_MASK) | SDR0_PFC1_SELECT_CONFIG_4;
+       sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SELECT_MASK) |
+               SDR0_PFC1_SELECT_CONFIG_4;
        mfsdr(SDR0_PFC2, sdr0_pfc2);
-       sdr0_pfc2 = (sdr0_pfc2 & ~SDR0_PFC2_SELECT_MASK) | SDR0_PFC2_SELECT_CONFIG_4;
+       sdr0_pfc2 = (sdr0_pfc2 & ~SDR0_PFC2_SELECT_MASK) |
+               SDR0_PFC2_SELECT_CONFIG_4;
        mtsdr(SDR0_PFC2, sdr0_pfc2);
        mtsdr(SDR0_PFC1, sdr0_pfc1);
 
@@ -109,9 +112,6 @@ int board_early_init_f(void)
        return 0;
 }
 
-/*---------------------------------------------------------------------------+
-  | misc_init_r.
-  +---------------------------------------------------------------------------*/
 int misc_init_r(void)
 {
        uint pbcr;
@@ -124,11 +124,7 @@ int misc_init_r(void)
        char *act = getenv("usbact");
 #endif
 
-       /*
-        * FLASH stuff...
-        */
-
-       /* Re-do sizing to get full correct info */
+       /* Re-do flash sizing to get full correct info */
 
        /* adjust flash start and offset */
        gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
@@ -140,32 +136,7 @@ int misc_init_r(void)
        mtdcr(ebccfga, pb0cr);
 #endif
        pbcr = mfdcr(ebccfgd);
-       switch (gd->bd->bi_flashsize) {
-       case 1 << 20:
-               size_val = 0;
-               break;
-       case 2 << 20:
-               size_val = 1;
-               break;
-       case 4 << 20:
-               size_val = 2;
-               break;
-       case 8 << 20:
-               size_val = 3;
-               break;
-       case 16 << 20:
-               size_val = 4;
-               break;
-       case 32 << 20:
-               size_val = 5;
-               break;
-       case 64 << 20:
-               size_val = 6;
-               break;
-       case 128 << 20:
-               size_val = 7;
-               break;
-       }
+        size_val = ffs(gd->bd->bi_flashsize) - 21;
        pbcr = (pbcr & 0x0001ffff) | gd->bd->bi_flashstart | (size_val << 17);
 #if defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL)
        mtdcr(ebccfga, pb3cr);
@@ -197,7 +168,7 @@ int misc_init_r(void)
         * USB suff...
         */
 #ifdef CONFIG_440EPX
-       if (act == NULL || strcmp(act, "hostdev") == 0) {
+       if (act == NULL || strcmp(act, "hostdev") == 0) {
                /* SDR Setting */
                mfsdr(SDR0_PFC1, sdr0_pfc1);
                mfsdr(SDR0_USB2D0CR, usb2d0cr);
@@ -205,27 +176,32 @@ int misc_init_r(void)
                mfsdr(SDR0_USB2H0CR, usb2h0cr);
 
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;       /*0*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_WDINT_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_16BIT_30MHZ;    /*1*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_16BIT_30MHZ;
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS;         /*0*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS;
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;          /*1*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;          /*1*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;
 
-               /* An 8-bit/60MHz interface is the only possible alternative
-                  when connecting the Device to the PHY */
+               /*
+                * An 8-bit/60MHz interface is the only possible alternative
+                * when connecting the Device to the PHY
+                */
                usb2h0cr   = usb2h0cr &~SDR0_USB2H0CR_WDINT_MASK;
-               usb2h0cr   = usb2h0cr | SDR0_USB2H0CR_WDINT_16BIT_30MHZ;        /*1*/
+               usb2h0cr   = usb2h0cr | SDR0_USB2H0CR_WDINT_16BIT_30MHZ;
 
-               /* To enable the USB 2.0 Device function through the UTMI interface */
+               /*
+                * To enable the USB 2.0 Device function
+                * through the UTMI interface
+                */
                usb2d0cr = usb2d0cr &~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK;
-               usb2d0cr = usb2d0cr | SDR0_USB2D0CR_USB2DEV_SELECTION;          /*1*/
+               usb2d0cr = usb2d0cr | SDR0_USB2D0CR_USB2DEV_SELECTION;
 
                sdr0_pfc1 = sdr0_pfc1 &~SDR0_PFC1_UES_MASK;
-               sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_USB2D_SEL;                /*0*/
+               sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_USB2D_SEL;
 
                mtsdr(SDR0_PFC1, sdr0_pfc1);
                mtsdr(SDR0_USB2D0CR, usb2d0cr);
@@ -245,13 +221,13 @@ int misc_init_r(void)
                mfsdr(SDR0_USB2PHY0CR, usb2phy0cr);
 
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;       /*0*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS;         /*0*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS;
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;          /*1*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;          /*1*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;
                mtsdr(SDR0_USB2PHY0CR, usb2phy0cr);
 
                udelay (1000);
@@ -276,31 +252,31 @@ int misc_init_r(void)
                mfsdr(SDR0_PFC1, sdr0_pfc1);
 
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;       /*0*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_WDINT_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_8BIT_60MHZ;     /*0*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_8BIT_60MHZ;
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PUREN;          /*1*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PUREN;
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_DEV;           /*0*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_DEV;
                usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_DEV;           /*0*/
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_DEV;
 
                usb2h0cr   = usb2h0cr &~SDR0_USB2H0CR_WDINT_MASK;
-               usb2h0cr   = usb2h0cr | SDR0_USB2H0CR_WDINT_8BIT_60MHZ;         /*0*/
+               usb2h0cr   = usb2h0cr | SDR0_USB2H0CR_WDINT_8BIT_60MHZ;
 
                usb2d0cr = usb2d0cr &~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK;
-               usb2d0cr = usb2d0cr | SDR0_USB2D0CR_EBC_SELECTION;              /*0*/
+               usb2d0cr = usb2d0cr | SDR0_USB2D0CR_EBC_SELECTION;
 
                sdr0_pfc1 = sdr0_pfc1 &~SDR0_PFC1_UES_MASK;
-               sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_EBCHR_SEL;                /*1*/
+               sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_EBCHR_SEL;
 
                mtsdr(SDR0_USB2H0CR, usb2h0cr);
                mtsdr(SDR0_USB2PHY0CR, usb2phy0cr);
                mtsdr(SDR0_USB2D0CR, usb2d0cr);
                mtsdr(SDR0_PFC1, sdr0_pfc1);
 
-               /*clear resets*/
+               /* clear resets */
                udelay (1000);
                mtsdr(SDR0_SRST1, 0x00000000);
                udelay (1000);
@@ -398,43 +374,42 @@ void sequoia_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev)
 }
 #endif
 
-/*************************************************************************
- *  pci_pre_init
- *
- *  This routine is called just prior to registering the hose and gives
- *  the board the opportunity to check things. Returning a value of zero
- *  indicates that things are bad & PCI initialization should be aborted.
+/*
+ * pci_pre_init
  *
- *     Different boards may wish to customize the pci controller structure
- *     (add regions, override default access routines, etc) or perform
- *     certain pre-initialization actions.
+ * This routine is called just prior to registering the hose and gives
+ * the board the opportunity to check things. Returning a value of zero
+ * indicates that things are bad & PCI initialization should be aborted.
  *
- ************************************************************************/
+ * Different boards may wish to customize the pci controller structure
+ * (add regions, override default access routines, etc) or perform
+ * certain pre-initialization actions.
+ */
 #if defined(CONFIG_PCI)
 int pci_pre_init(struct pci_controller *hose)
 {
        unsigned long addr;
 
-       /*-------------------------------------------------------------------------+
-         | Set priority for all PLB3 devices to 0.
-         | Set PLB3 arbiter to fair mode.
-         +-------------------------------------------------------------------------*/
+       /*
+        * Set priority for all PLB3 devices to 0.
+        * Set PLB3 arbiter to fair mode.
+        */
        mfsdr(sdr_amp1, addr);
        mtsdr(sdr_amp1, (addr & 0x000000FF) | 0x0000FF00);
        addr = mfdcr(plb3_acr);
        mtdcr(plb3_acr, addr | 0x80000000);
 
-       /*-------------------------------------------------------------------------+
-         | Set priority for all PLB4 devices to 0.
-         +-------------------------------------------------------------------------*/
+       /*
+        * Set priority for all PLB4 devices to 0.
+        */
        mfsdr(sdr_amp0, addr);
        mtsdr(sdr_amp0, (addr & 0x000000FF) | 0x0000FF00);
        addr = mfdcr(plb4_acr) | 0xa0000000;    /* Was 0x8---- */
        mtdcr(plb4_acr, addr);
 
-       /*-------------------------------------------------------------------------+
-         | Set Nebula PLB4 arbiter to fair mode.
-         +-------------------------------------------------------------------------*/
+       /*
+        * Set Nebula PLB4 arbiter to fair mode.
+        */
        /* Segment0 */
        addr = (mfdcr(plb0_acr) & ~plb0_acr_ppm_mask) | plb0_acr_ppm_fair;
        addr = (addr & ~plb0_acr_hbu_mask) | plb0_acr_hbu_enabled;
@@ -456,47 +431,51 @@ int pci_pre_init(struct pci_controller *hose)
 }
 #endif /* defined(CONFIG_PCI) */
 
-/*************************************************************************
- *  pci_target_init
- *
- *     The bootstrap configuration provides default settings for the pci
- *     inbound map (PIM). But the bootstrap config choices are limited and
- *     may not be sufficient for a given board.
+/*
+ * pci_target_init
  *
- ************************************************************************/
+ * The bootstrap configuration provides default settings for the pci
+ * inbound map (PIM). But the bootstrap config choices are limited and
+ * may not be sufficient for a given board.
+ */
 #if defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT)
 void pci_target_init(struct pci_controller *hose)
 {
-       /*--------------------------------------------------------------------------+
+       /*
         * Set up Direct MMIO registers
-        *--------------------------------------------------------------------------*/
-       /*--------------------------------------------------------------------------+
-         | PowerPC440EPX PCI Master configuration.
-         | Map one 1Gig range of PLB/processor addresses to PCI memory space.
-         |   PLB address 0xA0000000-0xDFFFFFFF ==> PCI address 0xA0000000-0xDFFFFFFF
-         |   Use byte reversed out routines to handle endianess.
-         | Make this region non-prefetchable.
-         +--------------------------------------------------------------------------*/
-       out32r(PCIX0_PMM0MA, 0x00000000);       /* PMM0 Mask/Attribute - disabled b4 setting */
+        */
+       /*
+        * PowerPC440EPX PCI Master configuration.
+        * Map one 1Gig range of PLB/processor addresses to PCI memory space.
+        * PLB address 0xA0000000-0xDFFFFFFF
+        *     ==> PCI address 0xA0000000-0xDFFFFFFF
+        * Use byte reversed out routines to handle endianess.
+        * Make this region non-prefetchable.
+        */
+       out32r(PCIX0_PMM0MA, 0x00000000);       /* PMM0 Mask/Attribute */
+                                               /* - disabled b4 setting */
        out32r(PCIX0_PMM0LA, CFG_PCI_MEMBASE);  /* PMM0 Local Address */
-       out32r(PCIX0_PMM0PCILA, CFG_PCI_MEMBASE);       /* PMM0 PCI Low Address */
+       out32r(PCIX0_PMM0PCILA, CFG_PCI_MEMBASE); /* PMM0 PCI Low Address */
        out32r(PCIX0_PMM0PCIHA, 0x00000000);    /* PMM0 PCI High Address */
-       out32r(PCIX0_PMM0MA, 0xE0000001);       /* 512M + No prefetching, and enable region */
+       out32r(PCIX0_PMM0MA, 0xE0000001);       /* 512M + No prefetching, */
+                                               /* and enable region */
 
-       out32r(PCIX0_PMM1MA, 0x00000000);       /* PMM0 Mask/Attribute - disabled b4 setting */
+       out32r(PCIX0_PMM1MA, 0x00000000);       /* PMM0 Mask/Attribute */
+                                               /* - disabled b4 setting */
        out32r(PCIX0_PMM1LA, CFG_PCI_MEMBASE2); /* PMM0 Local Address */
-       out32r(PCIX0_PMM1PCILA, CFG_PCI_MEMBASE2);      /* PMM0 PCI Low Address */
+       out32r(PCIX0_PMM1PCILA, CFG_PCI_MEMBASE2); /* PMM0 PCI Low Address */
        out32r(PCIX0_PMM1PCIHA, 0x00000000);    /* PMM0 PCI High Address */
-       out32r(PCIX0_PMM1MA, 0xE0000001);       /* 512M + No prefetching, and enable region */
+       out32r(PCIX0_PMM1MA, 0xE0000001);       /* 512M + No prefetching, */
+                                               /* and enable region */
 
        out32r(PCIX0_PTM1MS, 0x00000001);       /* Memory Size/Attribute */
-       out32r(PCIX0_PTM1LA, 0);        /* Local Addr. Reg */
-       out32r(PCIX0_PTM2MS, 0);        /* Memory Size/Attribute */
-       out32r(PCIX0_PTM2LA, 0);        /* Local Addr. Reg */
+       out32r(PCIX0_PTM1LA, 0);                /* Local Addr. Reg */
+       out32r(PCIX0_PTM2MS, 0);                /* Memory Size/Attribute */
+       out32r(PCIX0_PTM2LA, 0);                /* Local Addr. Reg */
 
-       /*--------------------------------------------------------------------------+
+       /*
         * Set up Configuration registers
-        *--------------------------------------------------------------------------*/
+        */
 
        /* Program the board's subsystem id/vendor id */
        pci_write_config_word(0, PCI_SUBSYSTEM_VENDOR_ID,
@@ -515,51 +494,46 @@ void pci_target_init(struct pci_controller *hose)
        pci_write_config_dword(0, PCI_BRDGOPT2, 0x00000101);
 
 }
-#endif                         /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */
+#endif /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */
 
-/*************************************************************************
- *  pci_master_init
- *
- ************************************************************************/
 #if defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT)
 void pci_master_init(struct pci_controller *hose)
 {
        unsigned short temp_short;
 
-       /*--------------------------------------------------------------------------+
-         | Write the PowerPC440 EP PCI Configuration regs.
-         |   Enable PowerPC440 EP to be a master on the PCI bus (PMM).
-         |   Enable PowerPC440 EP to act as a PCI memory target (PTM).
-         +--------------------------------------------------------------------------*/
+       /*
+        * Write the PowerPC440 EP PCI Configuration regs.
+        * Enable PowerPC440 EP to be a master on the PCI bus (PMM).
+        * Enable PowerPC440 EP to act as a PCI memory target (PTM).
+        */
        pci_read_config_word(0, PCI_COMMAND, &temp_short);
        pci_write_config_word(0, PCI_COMMAND,
                              temp_short | PCI_COMMAND_MASTER |
                              PCI_COMMAND_MEMORY);
 }
-#endif                         /* defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT) */
+#endif /* defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT) */
 
-/*************************************************************************
- *  is_pci_host
- *
- *     This routine is called to determine if a pci scan should be
- *     performed. With various hardware environments (especially cPCI and
- *     PPMC) it's insufficient to depend on the state of the arbiter enable
- *     bit in the strap register, or generic host/adapter assumptions.
- *
- *     Rather than hard-code a bad assumption in the general 440 code, the
- *     440 pci code requires the board to decide at runtime.
+/*
+ * is_pci_host
  *
- *     Return 0 for adapter mode, non-zero for host (monarch) mode.
+ * This routine is called to determine if a pci scan should be
+ * performed. With various hardware environments (especially cPCI and
+ * PPMC) it's insufficient to depend on the state of the arbiter enable
+ * bit in the strap register, or generic host/adapter assumptions.
  *
+ * Rather than hard-code a bad assumption in the general 440 code, the
+ * 440 pci code requires the board to decide at runtime.
  *
- ************************************************************************/
+ * Return 0 for adapter mode, non-zero for host (monarch) mode.
+ */
 #if defined(CONFIG_PCI)
 int is_pci_host(struct pci_controller *hose)
 {
        /* Cactus is always configured as host. */
        return (1);
 }
-#endif                         /* defined(CONFIG_PCI) */
+#endif /* defined(CONFIG_PCI) */
+
 #if defined(CONFIG_POST)
 /*
  * Returns 1 if keys pressed to start the power-on long-running tests
diff --git a/board/atmel/atngw100/Makefile b/board/atmel/atngw100/Makefile
new file mode 100644 (file)
index 0000000..1b5c635
--- /dev/null
@@ -0,0 +1,40 @@
+#
+# Copyright (C) 2005-2006 Atmel Corporation
+#
+# See file CREDITS for list of people who contributed to this project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+
+include $(TOPDIR)/config.mk
+
+LIB    := $(obj)lib$(BOARD).a
+
+COBJS  := $(BOARD).o eth.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+
+$(LIB): $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/atmel/atngw100/atngw100.c b/board/atmel/atngw100/atngw100.c
new file mode 100644 (file)
index 0000000..bd4b6b4
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2006 Atmel Corporation
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#include <common.h>
+
+#include <asm/io.h>
+#include <asm/sdram.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/hmatrix2.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static const struct sdram_info sdram = {
+       .phys_addr      = CFG_SDRAM_BASE,
+       .row_bits       = 13,
+       .col_bits       = 9,
+       .bank_bits      = 2,
+       .cas            = 3,
+       .twr            = 2,
+       .trc            = 7,
+       .trp            = 2,
+       .trcd           = 2,
+       .tras           = 5,
+       .txsr           = 5,
+};
+
+int board_early_init_f(void)
+{
+       /* Set the SDRAM_ENABLE bit in the HEBI SFR */
+       hmatrix2_writel(SFR4, 1 << 1);
+
+       gpio_enable_ebi();
+       gpio_enable_usart1();
+
+#if defined(CONFIG_MACB)
+       gpio_enable_macb0();
+       gpio_enable_macb1();
+#endif
+#if defined(CONFIG_MMC)
+       gpio_enable_mmci();
+#endif
+
+       return 0;
+}
+
+long int initdram(int board_type)
+{
+       return sdram_init(&sdram);
+}
+
+void board_init_info(void)
+{
+       gd->bd->bi_phy_id[0] = 0x01;
+       gd->bd->bi_phy_id[1] = 0x03;
+}
diff --git a/board/atmel/atngw100/config.mk b/board/atmel/atngw100/config.mk
new file mode 100644 (file)
index 0000000..9a794e5
--- /dev/null
@@ -0,0 +1,3 @@
+TEXT_BASE              = 0x00000000
+PLATFORM_RELFLAGS      += -ffunction-sections -fdata-sections
+PLATFORM_LDFLAGS       += --gc-sections
diff --git a/board/atmel/atngw100/eth.c b/board/atmel/atngw100/eth.c
new file mode 100644 (file)
index 0000000..d1d57bb
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2006 Atmel Corporation
+ *
+ * Ethernet initialization for the AVR32 Network Gateway
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#include <common.h>
+
+#include <asm/arch/memory-map.h>
+
+extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr);
+
+#ifdef CONFIG_CMD_NET
+void atngw100_eth_initialize(bd_t *bi)
+{
+       macb_eth_initialize(0, (void *)MACB0_BASE, bi->bi_phy_id[0]);
+       macb_eth_initialize(1, (void *)MACB1_BASE, bi->bi_phy_id[1]);
+}
+#endif
diff --git a/board/atmel/atngw100/u-boot.lds b/board/atmel/atngw100/u-boot.lds
new file mode 100644 (file)
index 0000000..34e347a
--- /dev/null
@@ -0,0 +1,80 @@
+/* -*- Fundamental -*-
+ *
+ * Copyright (C) 2005-2006 Atmel Corporation
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+OUTPUT_FORMAT("elf32-avr32", "elf32-avr32", "elf32-avr32")
+OUTPUT_ARCH(avr32)
+ENTRY(_start)
+
+SECTIONS
+{
+       . = 0;
+       _text = .;
+       .text : {
+               *(.text)
+               *(.text.*)
+       }
+
+       . = ALIGN(32);
+       __flashprog_start = .;
+       .flashprog : {
+               *(.flashprog)
+       }
+       . = ALIGN(32);
+       __flashprog_end = .;
+       _etext = .;
+
+       .rodata : {
+               *(.rodata)
+               *(.rodata.*)
+       }
+
+       . = ALIGN(8);
+       _data = .;
+       .data : {
+               *(.data)
+               *(.data.*)
+       }
+
+       . = ALIGN(4);
+       __u_boot_cmd_start = .;
+       .u_boot_cmd : {
+               KEEP(*(.u_boot_cmd))
+       }
+       __u_boot_cmd_end = .;
+
+       . = ALIGN(4);
+       _got = .;
+       .got : {
+               *(.got)
+       }
+       _egot = .;
+
+       . = ALIGN(8);
+       _edata = .;
+
+       .bss : {
+               *(.bss)
+               *(.bss.*)
+       }
+       . = ALIGN(8);
+       _end = .;
+}
index e198062fb576ffda60fc4f50d934bfa6328e9b69..ac4e5838557b5b959cfe158b0c284f0be8630b1d 100644 (file)
@@ -29,9 +29,7 @@ endif
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o
-
-SOBJS  := init.o
+COBJS  := $(BOARD).o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/atum8548/init.S b/board/atum8548/init.S
deleted file mode 100644 (file)
index 654a569..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Copyright 2007
- * Robert Lazarski, Instituto Atlantico, robertlazarski@gmail.com
- * Copyright 2004, 2007 Freescale Semiconductor.
- * Copyright 2002,2003, Motorola Inc.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-#define LAWAR_TRGT_PCI1                0x00000000
-#define LAWAR_TRGT_PCI2                0x00100000
-#define LAWAR_TRGT_PCIE                0x00200000
-#define LAWAR_TRGT_DDR         0x00f00000
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long (2f-1f)/16
-
-1:
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-#error("Update the number of table entries in tlb1_entry")
-#endif
-
-       /*
-        * TLB0         16K     Cacheable, guarded
-        * Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, MAS2_G)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, MAS2_G)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0,
-                       (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, MAS2_G)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0,
-                       (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, MAS2_G)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0,
-                       (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /* TLB 1 Initializations */
-       /*
-        * TLB 0, 1:    128M    Non-cacheable, guarded
-        * 0xf8000000   128M    FLASH
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE + 0x4000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE + 0x4000000, 0,
-                       (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 2:       1G      Non-cacheable, guarded
-        * 0x80000000   1G      PCI1/PCIE  8,9,a,b
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G)
-       .long FSL_BOOKE_MAS2(CFG_PCI_PHYS, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI_PHYS, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3, 4:    512M    Non-cacheable, guarded
-        * 0xc0000000   1G      PCI2
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_PHYS, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_PHYS, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_PHYS + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_PHYS + 0x10000000, 0,
-                       (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 5:       64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  1M      PCI1 IO
-        * 0xe210_0000  1M      PCI2 IO
-        * 0xe300_0000  1M      PCIe IO
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-2:
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000    0x7fff_ffff     DDR                     2G
- * 0x8000_0000    0x9fff_ffff     PCI1 MEM                512M
- * 0xa000_0000    0xbfff_ffff     PCIe MEM                512M
- * 0xc000_0000    0xdfff_ffff     PCI2 MEM                512M
- * 0xe000_0000    0xe000_ffff     CCSR                    1M
- * 0xe200_0000    0xe10f_ffff     PCI1 IO                 1M
- * 0xe280_0000    0xe20f_ffff     PCI2 IO                 1M
- * 0xe300_0000    0xe30f_ffff     PCIe IO                 1M
- * 0xf800_0000    0xffff_ffff     FLASH (boot bank)       128M
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- *
- * LAW 0 is reserved for boot mapping
- */
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-
-       .long (4f-3f)/8
-3:
-       .long  0
-       .long  (LAWAR_TRGT_DDR | (LAWAR_SIZE & LAWAR_SIZE_1G)) & ~LAWAR_EN
-
-       .long   (CFG_PCI1_MEM_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M)
-
-       .long   (CFG_PCI1_IO_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_1M)
-
-       .long   (CFG_PCI2_MEM_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M)
-
-       .long   (CFG_PCI2_IO_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_1M)
-
-       .long   (CFG_PCIE1_MEM_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_PCIE | (LAWAR_SIZE & LAWAR_SIZE_512M)
-
-       .long   (CFG_PCIE1_IO_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_PCIE | (LAWAR_SIZE & LAWAR_SIZE_1M)
-
-       /* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
-       .long   (CFG_LBC_CACHE_BASE>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M)
-
-4:
-       entry_end
diff --git a/board/atum8548/law.c b/board/atum8548/law.c
new file mode 100644 (file)
index 0000000..3606cbb
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000    0x7fff_ffff     DDR                     2G
+ * 0x8000_0000    0x9fff_ffff     PCI1 MEM                512M
+ * 0xa000_0000    0xbfff_ffff     PCIe MEM                512M
+ * 0xc000_0000    0xdfff_ffff     PCI2 MEM                512M
+ * 0xe000_0000    0xe000_ffff     CCSR                    1M
+ * 0xe200_0000    0xe10f_ffff     PCI1 IO                 1M
+ * 0xe280_0000    0xe20f_ffff     PCI2 IO                 1M
+ * 0xe300_0000    0xe30f_ffff     PCIe IO                 1M
+ * 0xf800_0000    0xffff_ffff     FLASH (boot bank)       128M
+ *
+ * Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ *
+ * LAW 0 is reserved for boot mapping
+ */
+
+struct law_entry law_table[] = {
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI_1),
+       SET_LAW_ENTRY(3, CFG_PCI1_IO_PHYS, LAWAR_SIZE_1M, LAW_TRGT_IF_PCI_1),
+       SET_LAW_ENTRY(4, CFG_PCI2_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI_2),
+       SET_LAW_ENTRY(5, CFG_PCI2_IO_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_PCI_2),
+       SET_LAW_ENTRY(6, CFG_PCIE1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCIE_1),
+       SET_LAW_ENTRY(7, CFG_PCIE1_IO_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_PCIE_1),
+       /* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
+       SET_LAW_ENTRY(8, CFG_LBC_CACHE_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/atum8548/tlb.c b/board/atum8548/tlb.c
new file mode 100644 (file)
index 0000000..bb6ce76
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /* TLB 1 Initializations */
+       /*
+        * TLB 0, 1:    128M    Non-cacheable, guarded
+        * 0xf8000000   128M    FLASH
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE + 0x4000000, CFG_FLASH_BASE + 0x4000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_64M, 1),
+
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 2:       1G      Non-cacheable, guarded
+        * 0x80000000   1G      PCI1/PCIE  8,9,a,b
+        */
+       SET_TLB_ENTRY(1, CFG_PCI_PHYS, CFG_PCI_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_1G, 1),
+
+       /*
+        * TLB 3, 4:    512M    Non-cacheable, guarded
+        * 0xc0000000   1G      PCI2
+        */
+       SET_TLB_ENTRY(1, CFG_PCI2_MEM_PHYS, CFG_PCI2_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+
+       SET_TLB_ENTRY(1, CFG_PCI2_MEM_PHYS + 0x10000000, CFG_PCI2_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 5:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  1M      PCI1 IO
+        * 0xe210_0000  1M      PCI2 IO
+        * 0xe300_0000  1M      PCIe IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 0d1c21766b5c5f476db6d62418ca9510a11b3ae0..3f04cae3deb3270345ba5f8fe69042654f195b2d 100644 (file)
@@ -34,7 +34,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/atum8548/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -64,7 +63,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/atum8548/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
index b3d8bda9bf6ac57a183a48a26b7c8562050f0170..6954b3003d27fb616392f91141b2492c87351ecc 100644 (file)
 #include <command.h>
 #include <asm/blackfin.h>
 #include <asm/io.h>
+#include <net.h>
 #include "ether_bf537.h"
 
+/**
+ * is_valid_ether_addr - Determine if the given Ethernet address is valid
+ * @addr: Pointer to a six-byte array containing the Ethernet address
+ *
+ * Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not
+ * a multicast address, and is not FF:FF:FF:FF:FF:FF.
+ *
+ * Return true if the address is valid.
+ */
+static inline int is_valid_ether_addr(const u8 * addr)
+{
+       /* FF:FF:FF:FF:FF:FF is a multicast address so we don't need to
+        * explicitly check for it here. */
+       return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
+}
+
 DECLARE_GLOBAL_DATA_PTR;
 
 #define POST_WORD_ADDR 0xFF903FFC
index 64240ba01b55ab531b53fcfe57b879a7fa14ad9c..22fc392ddca9214cad377c5e5c7c383d9db7f336 100644 (file)
@@ -69,42 +69,3 @@ void SoftResetPHY(void);
 void DumpPHYRegs(void);
 
 int SetupSystemRegs(int *opmode);
-
-/**
- * is_zero_ether_addr - Determine if give Ethernet address is all zeros.
- * @addr: Pointer to a six-byte array containing the Ethernet address
- *
- * Return true if the address is all zeroes.
- */
-static inline int is_zero_ether_addr(const u8 * addr)
-{
-       return !(addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5]);
-}
-
-/**
- * is_multicast_ether_addr - Determine if the Ethernet address is a multicast.
- * @addr: Pointer to a six-byte array containing the Ethernet address
- *
- * Return true if the address is a multicast address.
- * By definition the broadcast address is also a multicast address.
- */
-static inline int is_multicast_ether_addr(const u8 * addr)
-{
-       return (0x01 & addr[0]);
-}
-
-/**
- * is_valid_ether_addr - Determine if the given Ethernet address is valid
- * @addr: Pointer to a six-byte array containing the Ethernet address
- *
- * Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not
- * a multicast address, and is not FF:FF:FF:FF:FF:FF.
- *
- * Return true if the address is valid.
- */
-static inline int is_valid_ether_addr(const u8 * addr)
-{
-       /* FF:FF:FF:FF:FF:FF is a multicast address so we don't need to
-        * explicitly check for it here. */
-       return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
-}
diff --git a/board/esd/du440/Makefile b/board/esd/du440/Makefile
new file mode 100644 (file)
index 0000000..e996a0a
--- /dev/null
@@ -0,0 +1,51 @@
+#
+# (C) Copyright 2002-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  = $(BOARD).o
+SOBJS  = init.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(OBJS) $(SOBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/esd/du440/config.mk b/board/esd/du440/config.mk
new file mode 100644 (file)
index 0000000..5164334
--- /dev/null
@@ -0,0 +1,37 @@
+#
+# (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
+#
+sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp
+
+ifndef TEXT_BASE
+TEXT_BASE = 0xFFFA0000
+endif
+
+PLATFORM_CPPFLAGS += -DCONFIG_440=1
+
+ifeq ($(debug),1)
+PLATFORM_CPPFLAGS += -DDEBUG
+endif
+
+ifeq ($(dbcr),1)
+PLATFORM_CPPFLAGS += -DCFG_INIT_DBCR=0x8cff0000
+endif
diff --git a/board/esd/du440/du440.c b/board/esd/du440/du440.c
new file mode 100644 (file)
index 0000000..ceb128c
--- /dev/null
@@ -0,0 +1,1018 @@
+/*
+ * (C) Copyright 2008
+ * Matthias Fuchs, esd gmbh, matthias.fuchs@esd-electronics.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+#include <asm/bitops.h>
+#include <command.h>
+#include <i2c.h>
+#include <ppc440.h>
+#include "du440.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
+extern ulong flash_get_size (ulong base, int banknum);
+
+int usbhub_init(void);
+int dvi_init(void);
+int eeprom_write_enable (unsigned dev_addr, int state);
+int board_revision(void);
+
+static int du440_post_errors;
+
+int board_early_init_f(void)
+{
+       u32 sdr0_cust0;
+       u32 sdr0_pfc1, sdr0_pfc2;
+       u32 reg;
+
+       mtdcr(ebccfga, xbcfg);
+       mtdcr(ebccfgd, 0xb8400000);
+
+       /*
+        * Setup the GPIO pins
+        */
+       out_be32((void*)GPIO0_OR, 0x00000000 | CFG_GPIO0_EP_EEP);
+       out_be32((void*)GPIO0_TCR, 0x0000000f | CFG_GPIO0_EP_EEP);
+       out_be32((void*)GPIO0_OSRL, 0x50055400);
+       out_be32((void*)GPIO0_OSRH, 0x550050aa);
+       out_be32((void*)GPIO0_TSRL, 0x50055400);
+       out_be32((void*)GPIO0_TSRH, 0x55005000);
+       out_be32((void*)GPIO0_ISR1L, 0x50000000);
+       out_be32((void*)GPIO0_ISR1H, 0x00000000);
+       out_be32((void*)GPIO0_ISR2L, 0x00000000);
+       out_be32((void*)GPIO0_ISR2H, 0x00000100);
+       out_be32((void*)GPIO0_ISR3L, 0x00000000);
+       out_be32((void*)GPIO0_ISR3H, 0x00000000);
+
+       out_be32((void*)GPIO1_OR, 0x00000000);
+       out_be32((void*)GPIO1_TCR, 0xc2000000 |
+                CFG_GPIO1_IORSTN |
+                CFG_GPIO1_LEDUSR1 |
+                CFG_GPIO1_LEDUSR2 |
+                CFG_GPIO1_LEDPOST |
+                CFG_GPIO1_LEDDU);
+       out_be32((void*)GPIO1_ODR, CFG_GPIO1_LEDDU);
+
+       out_be32((void*)GPIO1_OSRL, 0x5c280000);
+       out_be32((void*)GPIO1_OSRH, 0x00000000);
+       out_be32((void*)GPIO1_TSRL, 0x0c000000);
+       out_be32((void*)GPIO1_TSRH, 0x00000000);
+       out_be32((void*)GPIO1_ISR1L, 0x00005550);
+       out_be32((void*)GPIO1_ISR1H, 0x00000000);
+       out_be32((void*)GPIO1_ISR2L, 0x00050000);
+       out_be32((void*)GPIO1_ISR2H, 0x00000000);
+       out_be32((void*)GPIO1_ISR3L, 0x01400000);
+       out_be32((void*)GPIO1_ISR3H, 0x00000000);
+
+       /*
+        * Setup the interrupt controller polarities, triggers, etc.
+        */
+       mtdcr(uic0sr, 0xffffffff);      /* clear all */
+       mtdcr(uic0er, 0x00000000);      /* disable all */
+       mtdcr(uic0cr, 0x00000005);      /* ATI & UIC1 crit are critical */
+       mtdcr(uic0pr, 0xfffff7ff);      /* per ref-board manual */
+       mtdcr(uic0tr, 0x00000000);      /* per ref-board manual */
+       mtdcr(uic0vr, 0x00000000);      /* int31 highest, base=0x000 */
+       mtdcr(uic0sr, 0xffffffff);      /* clear all */
+
+       /*
+        * UIC1:
+        *  bit30: ext. Irq 1: PLD : int 32+30
+        */
+       mtdcr(uic1sr, 0xffffffff);      /* clear all */
+       mtdcr(uic1er, 0x00000000);      /* disable all */
+       mtdcr(uic1cr, 0x00000000);      /* all non-critical */
+       mtdcr(uic1pr, 0xfffffffd);
+       mtdcr(uic1tr, 0x00000000);
+       mtdcr(uic1vr, 0x00000000);      /* int31 highest, base=0x000 */
+       mtdcr(uic1sr, 0xffffffff);      /* clear all */
+
+       /*
+        * UIC2
+        *  bit3: ext. Irq 2: DCF77 : int 64+3
+        */
+       mtdcr(uic2sr, 0xffffffff);      /* clear all */
+       mtdcr(uic2er, 0x00000000);      /* disable all */
+       mtdcr(uic2cr, 0x00000000);      /* all non-critical */
+       mtdcr(uic2pr, 0xffffffff);      /* per ref-board manual */
+       mtdcr(uic2tr, 0x00000000);      /* per ref-board manual */
+       mtdcr(uic2vr, 0x00000000);      /* int31 highest, base=0x000 */
+       mtdcr(uic2sr, 0xffffffff);      /* clear all */
+
+       /* select Ethernet pins */
+       mfsdr(SDR0_PFC1, sdr0_pfc1);
+       mfsdr(SDR0_PFC2, sdr0_pfc2);
+
+       /* setup EMAC bridge interface */
+       if (board_revision() == 0) {
+               /* 1 x MII */
+               sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SELECT_MASK) |
+                       SDR0_PFC1_SELECT_CONFIG_1_2;
+               sdr0_pfc2 = (sdr0_pfc2 & ~SDR0_PFC2_SELECT_MASK) |
+                       SDR0_PFC2_SELECT_CONFIG_1_2;
+       } else {
+               /* 2 x SMII */
+               sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SELECT_MASK) |
+                       SDR0_PFC1_SELECT_CONFIG_6;
+               sdr0_pfc2 = (sdr0_pfc2 & ~SDR0_PFC2_SELECT_MASK) |
+                       SDR0_PFC2_SELECT_CONFIG_6;
+       }
+
+       /* enable 2nd IIC */
+       sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SIS_MASK) | SDR0_PFC1_SIS_IIC1_SEL;
+
+       mtsdr(SDR0_PFC2, sdr0_pfc2);
+       mtsdr(SDR0_PFC1, sdr0_pfc1);
+
+       /* PCI arbiter enabled */
+       mfsdr(sdr_pci0, reg);
+       mtsdr(sdr_pci0, 0x80000000 | reg);
+
+       /* setup NAND FLASH */
+       mfsdr(SDR0_CUST0, sdr0_cust0);
+       sdr0_cust0 = SDR0_CUST0_MUX_NDFC_SEL    |
+               SDR0_CUST0_NDFC_ENABLE          |
+               SDR0_CUST0_NDFC_BW_8_BIT        |
+               SDR0_CUST0_NDFC_ARE_MASK        |
+               (0x80000000 >> (28 + CFG_NAND0_CS)) |
+               (0x80000000 >> (28 + CFG_NAND1_CS));
+       mtsdr(SDR0_CUST0, sdr0_cust0);
+
+       return 0;
+}
+
+int misc_init_r(void)
+{
+       uint pbcr;
+       int size_val = 0;
+       u32 reg;
+       unsigned long usb2d0cr = 0;
+       unsigned long usb2phy0cr, usb2h0cr = 0;
+       unsigned long sdr0_pfc1;
+       int i, j;
+
+       /* adjust flash start and offset */
+       gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
+       gd->bd->bi_flashoffset = 0;
+
+       mtdcr(ebccfga, pb0cr);
+       pbcr = mfdcr(ebccfgd);
+       size_val = ffs(gd->bd->bi_flashsize) - 21;
+       pbcr = (pbcr & 0x0001ffff) | gd->bd->bi_flashstart | (size_val << 17);
+       mtdcr(ebccfga, pb0cr);
+       mtdcr(ebccfgd, pbcr);
+
+       /*
+        * Re-check to get correct base address
+        */
+       flash_get_size(gd->bd->bi_flashstart, 0);
+
+       /*
+        * USB suff...
+        */
+       /* SDR Setting */
+       mfsdr(SDR0_PFC1, sdr0_pfc1);
+       mfsdr(SDR0_USB0, usb2d0cr);
+       mfsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+       mfsdr(SDR0_USB2H0CR, usb2h0cr);
+
+       usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK;
+       usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;
+       usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_WDINT_MASK;
+       usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_16BIT_30MHZ;
+       usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK;
+       usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS;
+       usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK;
+       usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;
+       usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK;
+       usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;
+
+       /* An 8-bit/60MHz interface is the only possible alternative
+          when connecting the Device to the PHY */
+       usb2h0cr   = usb2h0cr &~SDR0_USB2H0CR_WDINT_MASK;
+       usb2h0cr   = usb2h0cr | SDR0_USB2H0CR_WDINT_16BIT_30MHZ;
+
+       /* To enable the USB 2.0 Device function through the UTMI interface */
+       usb2d0cr = usb2d0cr &~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK;
+
+       sdr0_pfc1 = sdr0_pfc1 &~SDR0_PFC1_UES_MASK;
+       sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_EBCHR_SEL;
+
+       mtsdr(SDR0_PFC1, sdr0_pfc1);
+       mtsdr(SDR0_USB0, usb2d0cr);
+       mtsdr(SDR0_USB2PHY0CR, usb2phy0cr);
+       mtsdr(SDR0_USB2H0CR, usb2h0cr);
+
+       /* clear resets */
+       udelay (1000);
+       mtsdr(SDR0_SRST1, 0x00000000);
+       udelay (1000);
+       mtsdr(SDR0_SRST0, 0x00000000);
+
+       printf("USB:   Host(int phy)\n");
+
+       /*
+        * Clear PLB4A0_ACR[WRP]
+        * This fix will make the MAL burst disabling patch for the Linux
+        * EMAC driver obsolete.
+        */
+       reg = mfdcr(plb4_acr) & ~PLB4_ACR_WRP;
+       mtdcr(plb4_acr, reg);
+
+       /*
+        * release IO-RST#
+        * We have to wait at least 560ms until we may call usbhub_init
+        */
+       out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | CFG_GPIO1_IORSTN);
+
+       /*
+        * flash USR1/2 LEDs (600ms)
+        * This results in the necessary delay from IORST# until
+        * calling usbhub_init will succeed
+        */
+       for (j = 0; j < 3; j++) {
+               out_be32((void*)GPIO1_OR,
+                        (in_be32((void*)GPIO1_OR) & ~CFG_GPIO1_LEDUSR2) |
+                        CFG_GPIO1_LEDUSR1);
+
+               for (i = 0; i < 100; i++)
+                       udelay(1000);
+
+               out_be32((void*)GPIO1_OR,
+                        (in_be32((void*)GPIO1_OR) & ~CFG_GPIO1_LEDUSR1) |
+                        CFG_GPIO1_LEDUSR2);
+
+               for (i = 0; i < 100; i++)
+                       udelay(1000);
+       }
+
+       out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) &
+                ~(CFG_GPIO1_LEDUSR1 | CFG_GPIO1_LEDUSR2));
+
+       if (usbhub_init())
+               du440_post_errors++;
+
+       if (dvi_init())
+               du440_post_errors++;
+
+       return 0;
+}
+
+int pld_revision(void)
+{
+       out8(CFG_CPLD_BASE, 0x00);
+       return (int)(in8(CFG_CPLD_BASE) & CPLD_VERSION_MASK);
+}
+
+int board_revision(void)
+{
+       int rpins = (int)((in_be32((void*)GPIO1_IR) & CFG_GPIO1_HWVER_MASK)
+                         >> CFG_GPIO1_HWVER_SHIFT);
+
+       return ((rpins & 1) << 3) | ((rpins & 2) << 1) |
+               ((rpins & 4) >> 1) | ((rpins & 8) >> 3);
+}
+
+#if defined(CONFIG_SHOW_ACTIVITY)
+void board_show_activity (ulong timestamp)
+{
+       if ((timestamp % 100) == 0)
+               out_be32((void*)GPIO1_OR,
+                        in_be32((void*)GPIO1_OR) ^ CFG_GPIO1_LEDUSR1);
+}
+
+void show_activity(int arg)
+{
+}
+#endif /* CONFIG_SHOW_ACTIVITY */
+
+int du440_phy_addr(int devnum)
+{
+       if (board_revision() == 0)
+               return devnum;
+
+       return devnum + 1;
+}
+
+int checkboard(void)
+{
+       char serno[32];
+
+       puts("Board: DU440");
+
+       if (getenv_r("serial#", serno, sizeof(serno)) > 0) {
+               puts(", serial# ");
+               puts(serno);
+       }
+
+       printf(", HW-Rev. 1.%d, CPLD-Rev. 1.%d\n",
+              board_revision(), pld_revision());
+       return (0);
+}
+
+/*
+ * pci_pre_init
+ *
+ * This routine is called just prior to registering the hose and gives
+ * the board the opportunity to check things. Returning a value of zero
+ * indicates that things are bad & PCI initialization should be aborted.
+ *
+ * Different boards may wish to customize the pci controller structure
+ * (add regions, override default access routines, etc) or perform
+ * certain pre-initialization actions.
+ */
+#if defined(CONFIG_PCI)
+int pci_pre_init(struct pci_controller *hose)
+{
+       unsigned long addr;
+
+       /*
+        * Set priority for all PLB3 devices to 0.
+        * Set PLB3 arbiter to fair mode.
+        */
+       mfsdr(sdr_amp1, addr);
+       mtsdr(sdr_amp1, (addr & 0x000000FF) | 0x0000FF00);
+       addr = mfdcr(plb3_acr);
+       mtdcr(plb3_acr, addr | 0x80000000);
+
+       /*
+        * Set priority for all PLB4 devices to 0.
+        */
+       mfsdr(sdr_amp0, addr);
+       mtsdr(sdr_amp0, (addr & 0x000000FF) | 0x0000FF00);
+       addr = mfdcr(plb4_acr) | 0xa0000000; /* Was 0x8---- */
+       mtdcr(plb4_acr, addr);
+
+       /*
+        * Set Nebula PLB4 arbiter to fair mode.
+        */
+       /* Segment0 */
+       addr = (mfdcr(plb0_acr) & ~plb0_acr_ppm_mask) | plb0_acr_ppm_fair;
+       addr = (addr & ~plb0_acr_hbu_mask) | plb0_acr_hbu_enabled;
+       addr = (addr & ~plb0_acr_rdp_mask) | plb0_acr_rdp_4deep;
+       addr = (addr & ~plb0_acr_wrp_mask) | plb0_acr_wrp_2deep;
+       mtdcr(plb0_acr, addr);
+
+       /* Segment1 */
+       addr = (mfdcr(plb1_acr) & ~plb1_acr_ppm_mask) | plb1_acr_ppm_fair;
+       addr = (addr & ~plb1_acr_hbu_mask) | plb1_acr_hbu_enabled;
+       addr = (addr & ~plb1_acr_rdp_mask) | plb1_acr_rdp_4deep;
+       addr = (addr & ~plb1_acr_wrp_mask) | plb1_acr_wrp_2deep;
+       mtdcr(plb1_acr, addr);
+
+       return 1;
+}
+#endif /* defined(CONFIG_PCI) */
+
+/*
+ * pci_target_init
+ *
+ * The bootstrap configuration provides default settings for the pci
+ * inbound map (PIM). But the bootstrap config choices are limited and
+ * may not be sufficient for a given board.
+ */
+#if defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT)
+void pci_target_init(struct pci_controller *hose)
+{
+       /*
+        * Set up Direct MMIO registers
+        */
+       /*
+        * PowerPC440EPX PCI Master configuration.
+        * Map one 1Gig range of PLB/processor addresses to PCI memory space.
+        * PLB address 0xA0000000-0xDFFFFFFF
+        *     ==> PCI address 0xA0000000-0xDFFFFFFF
+        * Use byte reversed out routines to handle endianess.
+        * Make this region non-prefetchable.
+        */
+       out32r(PCIX0_PMM0MA, 0x00000000);       /* PMM0 Mask/Attribute */
+                                               /* - disabled b4 setting */
+       out32r(PCIX0_PMM0LA, CFG_PCI_MEMBASE);  /* PMM0 Local Address */
+       out32r(PCIX0_PMM0PCILA, CFG_PCI_MEMBASE); /* PMM0 PCI Low Address */
+       out32r(PCIX0_PMM0PCIHA, 0x00000000);    /* PMM0 PCI High Address */
+       out32r(PCIX0_PMM0MA, 0xE0000001);       /* 512M + No prefetching, */
+                                               /* and enable region */
+
+       out32r(PCIX0_PMM1MA, 0x00000000);       /* PMM0 Mask/Attribute */
+                                               /* - disabled b4 setting */
+       out32r(PCIX0_PMM1LA, CFG_PCI_MEMBASE2); /* PMM0 Local Address */
+       out32r(PCIX0_PMM1PCILA, CFG_PCI_MEMBASE2); /* PMM0 PCI Low Address */
+       out32r(PCIX0_PMM1PCIHA, 0x00000000);    /* PMM0 PCI High Address */
+       out32r(PCIX0_PMM1MA, 0xE0000001);       /* 512M + No prefetching, */
+                                               /* and enable region */
+
+       out32r(PCIX0_PTM1MS, 0x00000001);       /* Memory Size/Attribute */
+       out32r(PCIX0_PTM1LA, 0);                /* Local Addr. Reg */
+       out32r(PCIX0_PTM2MS, 0);                /* Memory Size/Attribute */
+       out32r(PCIX0_PTM2LA, 0);                /* Local Addr. Reg */
+
+       /*
+        * Set up Configuration registers
+        */
+
+       /* Program the board's subsystem id/vendor id */
+       pci_write_config_word(0, PCI_SUBSYSTEM_VENDOR_ID,
+                             PCI_VENDOR_ID_ESDGMBH);
+       pci_write_config_word(0, PCI_SUBSYSTEM_ID, PCI_DEVICE_ID_DU440);
+
+       pci_write_config_word(0, PCI_CLASS_SUB_CODE, PCI_CLASS_BRIDGE_HOST);
+
+       /* Configure command register as bus master */
+       pci_write_config_word(0, PCI_COMMAND, PCI_COMMAND_MASTER);
+
+       /* 240nS PCI clock */
+       pci_write_config_word(0, PCI_LATENCY_TIMER, 1);
+
+       /* No error reporting */
+       pci_write_config_word(0, PCI_ERREN, 0);
+
+       pci_write_config_dword(0, PCI_BRDGOPT2, 0x00000101);
+
+}
+#endif /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */
+
+#if defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT)
+void pci_master_init(struct pci_controller *hose)
+{
+       unsigned short temp_short;
+
+       /*
+        * Write the PowerPC440 EP PCI Configuration regs.
+        * Enable PowerPC440 EP to be a master on the PCI bus (PMM).
+        * Enable PowerPC440 EP to act as a PCI memory target (PTM).
+        */
+       pci_read_config_word(0, PCI_COMMAND, &temp_short);
+       pci_write_config_word(0, PCI_COMMAND,
+                             temp_short | PCI_COMMAND_MASTER |
+                             PCI_COMMAND_MEMORY);
+}
+#endif /* defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT) */
+
+/*
+ * is_pci_host
+ *
+ * This routine is called to determine if a pci scan should be
+ * performed. With various hardware environments (especially cPCI and
+ * PPMC) it's insufficient to depend on the state of the arbiter enable
+ * bit in the strap register, or generic host/adapter assumptions.
+ *
+ * Rather than hard-code a bad assumption in the general 440 code, the
+ * 440 pci code requires the board to decide at runtime.
+ *
+ * Return 0 for adapter mode, non-zero for host (monarch) mode.
+ */
+#if defined(CONFIG_PCI)
+int is_pci_host(struct pci_controller *hose)
+{
+       /* always configured as host. */
+       return (1);
+}
+#endif /* defined(CONFIG_PCI) */
+
+int last_stage_init(void)
+{
+       int e, i;
+
+       /* everyting is ok: turn on POST-LED */
+       out_be32((void*)GPIO1_OR, in_be32((void*)GPIO1_OR) | CFG_GPIO1_LEDPOST);
+
+       /* slowly blink on errors and finally keep LED off */
+       for (e = 0; e < du440_post_errors; e++) {
+               out_be32((void*)GPIO1_OR,
+                        in_be32((void*)GPIO1_OR) | CFG_GPIO1_LEDPOST);
+
+               for (i = 0; i < 500; i++)
+                       udelay(1000);
+
+               out_be32((void*)GPIO1_OR,
+                        in_be32((void*)GPIO1_OR) & ~CFG_GPIO1_LEDPOST);
+
+               for (i = 0; i < 500; i++)
+                       udelay(1000);
+       }
+
+       return 0;
+}
+
+#if defined(CONFIG_I2C_MULTI_BUS)
+/*
+ * read field strength from I2C ADC
+ */
+int dcf77_status(void)
+{
+       unsigned int oldbus;
+       uchar u[2];
+       int mv;
+
+       oldbus = I2C_GET_BUS();
+       I2C_SET_BUS(1);
+
+       if (i2c_read (IIC1_MCP3021_ADDR, 0, 0, u, 2)) {
+               I2C_SET_BUS(oldbus);
+               return -1;
+       }
+
+       mv = (int)(((u[0] << 8) | u[1]) >> 2) * 3300 / 1024;
+
+       I2C_SET_BUS(oldbus);
+       return mv;
+}
+
+int do_dcf77(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       int mv;
+       u32 pin, pinold;
+       unsigned long long t1, t2;
+       bd_t *bd = gd->bd;
+
+       printf("DCF77: ");
+       mv = dcf77_status();
+       if (mv > 0)
+               printf("signal=%d mV\n", mv);
+       else
+               printf("ERROR - no signal\n");
+
+       t1 = t2 = 0;
+       pinold = in_be32((void*)GPIO1_IR) & CFG_GPIO1_DCF77;
+       while (!ctrlc()) {
+               pin = in_be32((void*)GPIO1_IR) & CFG_GPIO1_DCF77;
+               if (pin && !pinold) { /* bit start */
+                       t1 = get_ticks();
+                       if (t2 && ((unsigned int)(t1 - t2) /
+                                  (bd->bi_procfreq / 1000) >= 1800))
+                               printf("Start of minute\n");
+
+                       t2 = t1;
+               }
+               if (t1 && !pin && pinold) { /* bit end */
+                       printf("%5d\n", (unsigned int)(get_ticks() - t1) /
+                              (bd->bi_procfreq / 1000));
+               }
+               pinold = pin;
+       }
+
+       printf("Abort\n");
+       return 0;
+}
+U_BOOT_CMD(
+       dcf77, 1, 1, do_dcf77,
+       "dcf77   - Check DCF77 receiver\n",
+       NULL
+       );
+
+/*
+ * initialize USB hub via I2C1
+ */
+int usbhub_init(void)
+{
+       int reg;
+       int ret = 0;
+       unsigned int oldbus;
+       uchar u[] = {0x04, 0x24, 0x04, 0x07, 0x25, 0x00, 0x00, 0xd3,
+                    0x18, 0xe0, 0x00, 0x00, 0x01, 0x64, 0x01, 0x64,
+                    0x32};
+       uchar stcd;
+
+       printf("Hub:   ");
+
+       oldbus = I2C_GET_BUS();
+       I2C_SET_BUS(1);
+
+       for (reg = 0; reg < sizeof(u); reg++)
+               if (i2c_write (IIC1_USB2507_ADDR, reg, 1, &u[reg], 1)) {
+                       ret = -1;
+                       break;
+               }
+
+       if (ret == 0) {
+               stcd = 0x03;
+               if (i2c_write (IIC1_USB2507_ADDR, 0, 1, &stcd, 1))
+                       ret = -1;
+       }
+
+       if (ret == 0)
+               printf("initialized\n");
+       else
+               printf("failed - cannot initialize USB hub\n");
+
+       I2C_SET_BUS(oldbus);
+       return ret;
+}
+
+int do_hubinit(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       usbhub_init();
+       return 0;
+}
+U_BOOT_CMD(
+       hubinit, 1, 1, do_hubinit,
+       "hubinit - Initialize USB hub\n",
+       NULL
+       );
+#endif /* CONFIG_I2C_MULTI_BUS */
+
+#define CFG_BOOT_EEPROM_PAGE_WRITE_BITS 3
+int boot_eeprom_write (unsigned dev_addr,
+                      unsigned offset,
+                      uchar *buffer,
+                      unsigned cnt)
+{
+       unsigned end = offset + cnt;
+       unsigned blk_off;
+       int rcode = 0;
+
+#if defined(CFG_EEPROM_WREN)
+       eeprom_write_enable(dev_addr, 1);
+#endif
+       /*
+        * Write data until done or would cross a write page boundary.
+        * We must write the address again when changing pages
+        * because the address counter only increments within a page.
+        */
+
+       while (offset < end) {
+               unsigned alen, len;
+               unsigned maxlen;
+
+               uchar addr[2];
+
+               blk_off = offset & 0xFF;        /* block offset */
+
+               addr[0] = offset >> 8;          /* block number */
+               addr[1] = blk_off;              /* block offset */
+               alen = 2;
+               addr[0] |= dev_addr;            /* insert device address */
+
+               len = end - offset;
+
+               /*
+                * For a FRAM device there is no limit on the number of the
+                * bytes that can be ccessed with the single read or write
+                * operation.
+                */
+#if defined(CFG_BOOT_EEPROM_PAGE_WRITE_BITS)
+
+#define        BOOT_EEPROM_PAGE_SIZE (1 << CFG_BOOT_EEPROM_PAGE_WRITE_BITS)
+#define BOOT_EEPROM_PAGE_OFFSET(x) ((x) & (BOOT_EEPROM_PAGE_SIZE - 1))
+
+               maxlen = BOOT_EEPROM_PAGE_SIZE -
+                       BOOT_EEPROM_PAGE_OFFSET(blk_off);
+#else
+               maxlen = 0x100 - blk_off;
+#endif
+               if (maxlen > I2C_RXTX_LEN)
+                       maxlen = I2C_RXTX_LEN;
+
+               if (len > maxlen)
+                       len = maxlen;
+
+               if (i2c_write (addr[0], offset, alen - 1, buffer, len) != 0)
+                       rcode = 1;
+
+               buffer += len;
+               offset += len;
+
+#if defined(CFG_EEPROM_PAGE_WRITE_DELAY_MS)
+               udelay(CFG_EEPROM_PAGE_WRITE_DELAY_MS * 1000);
+#endif
+       }
+#if defined(CFG_EEPROM_WREN)
+       eeprom_write_enable(dev_addr, 0);
+#endif
+       return rcode;
+}
+
+int do_setup_boot_eeprom(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       ulong sdsdp[4];
+
+       if (argc > 1) {
+               if (!strcmp(argv[1], "533")) {
+                       printf("Bootstrapping for 533MHz\n");
+                       sdsdp[0] = 0x87788252;
+                       /* PLB-PCI-divider = 3 : sync PCI clock=44MHz */
+                       sdsdp[1] = 0x095fa030;
+                       sdsdp[2] = 0x40082350;
+                       sdsdp[3] = 0x0d050000;
+               } else if (!strcmp(argv[1], "533-66")) {
+                       printf("Bootstrapping for 533MHz (66MHz PCI)\n");
+                       sdsdp[0] = 0x87788252;
+                       /* PLB-PCI-divider = 2 : sync PCI clock=66MHz */
+                       sdsdp[1] = 0x0957a030;
+                       sdsdp[2] = 0x40082350;
+                       sdsdp[3] = 0x0d050000;
+               } else if (!strcmp(argv[1], "667")) {
+                       printf("Bootstrapping for 667MHz\n");
+                       sdsdp[0] = 0x8778a256;
+                       /* PLB-PCI-divider = 4 : sync PCI clock=33MHz */
+                       sdsdp[1] = 0x0947a030;
+                       /* PLB-PCI-divider = 3 : sync PCI clock=44MHz
+                        * -> not working when overclocking 533MHz chips
+                        * -> untested on 667MHz chips */
+                       /* sdsdp[1]=0x095fa030; */
+                       sdsdp[2] = 0x40082350;
+                       sdsdp[3] = 0x0d050000;
+               }
+       } else {
+               printf("Bootstrapping for 533MHz (default)\n");
+               sdsdp[0] = 0x87788252;
+               /* PLB-PCI-divider = 3 : sync PCI clock=44MHz */
+               sdsdp[1] = 0x095fa030;
+               sdsdp[2] = 0x40082350;
+               sdsdp[3] = 0x0d050000;
+       }
+
+       printf("Writing boot EEPROM ...\n");
+       if (boot_eeprom_write(CFG_I2C_BOOT_EEPROM_ADDR,
+                             0, (uchar*)sdsdp, 16) != 0)
+               printf("boot_eeprom_write failed\n");
+       else
+               printf("done (dump via 'i2c md 52 0.1 10')\n");
+
+       return 0;
+}
+U_BOOT_CMD(
+       sbe, 2, 0, do_setup_boot_eeprom,
+       "sbe     - setup boot eeprom\n",
+       NULL
+       );
+
+#if defined(CFG_EEPROM_WREN)
+/*
+ * Input: <dev_addr>  I2C address of EEPROM device to enable.
+ *         <state>     -1: deliver current state
+ *                      0: disable write
+ *                      1: enable write
+ * Returns:            -1: wrong device address
+ *                      0: dis-/en- able done
+ *                    0/1: current state if <state> was -1.
+ */
+int eeprom_write_enable (unsigned dev_addr, int state)
+{
+       if ((CFG_I2C_EEPROM_ADDR != dev_addr) &&
+           (CFG_I2C_BOOT_EEPROM_ADDR != dev_addr))
+               return -1;
+       else {
+               switch (state) {
+               case 1:
+                       /* Enable write access, clear bit GPIO_SINT2. */
+                       out_be32((void*)GPIO0_OR,
+                                in_be32((void*)GPIO0_OR) & ~CFG_GPIO0_EP_EEP);
+                       state = 0;
+                       break;
+               case 0:
+                       /* Disable write access, set bit GPIO_SINT2. */
+                       out_be32((void*)GPIO0_OR,
+                                in_be32((void*)GPIO0_OR) | CFG_GPIO0_EP_EEP);
+                       state = 0;
+                       break;
+               default:
+                       /* Read current status back. */
+                       state = (0 == (in_be32((void*)GPIO0_OR) &
+                                      CFG_GPIO0_EP_EEP));
+                       break;
+               }
+       }
+       return state;
+}
+
+int do_eep_wren (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       int query = argc == 1;
+       int state = 0;
+
+       if (query) {
+               /* Query write access state. */
+               state = eeprom_write_enable(CFG_I2C_EEPROM_ADDR, -1);
+               if (state < 0)
+                       puts ("Query of write access state failed.\n");
+               else {
+                       printf ("Write access for device 0x%0x is %sabled.\n",
+                               CFG_I2C_EEPROM_ADDR, state ? "en" : "dis");
+                       state = 0;
+               }
+       } else {
+               if ('0' == argv[1][0]) {
+                       /* Disable write access. */
+                       state = eeprom_write_enable(CFG_I2C_EEPROM_ADDR, 0);
+               } else {
+                       /* Enable write access. */
+                       state = eeprom_write_enable(CFG_I2C_EEPROM_ADDR, 1);
+               }
+               if (state < 0)
+                       puts ("Setup of write access state failed.\n");
+       }
+
+       return state;
+}
+
+U_BOOT_CMD(eepwren, 2, 0, do_eep_wren,
+          "eepwren - Enable / disable / query EEPROM write access\n",
+          NULL);
+#endif /* #if defined(CFG_EEPROM_WREN) */
+
+static int got_pldirq;
+
+static int pld_interrupt(u32 arg)
+{
+       int rc = -1; /* not for us */
+       u8 status = in8(CFG_CPLD_BASE);
+
+       /* check for PLD interrupt */
+       if (status & PWR_INT_FLAG) {
+               /* reset this int */
+               out8(CFG_CPLD_BASE, 0);
+               rc = 0;
+               got_pldirq = 1; /* trigger backend */
+       }
+
+       return rc;
+}
+
+int do_waitpwrirq(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       got_pldirq = 0;
+
+       /* clear any pending interrupt */
+       out8(CFG_CPLD_BASE, 0);
+
+       irq_install_handler(CPLD_IRQ,
+                           (interrupt_handler_t *)pld_interrupt, 0);
+
+       printf("Waiting ...\n");
+       while(!got_pldirq) {
+               /* Abort if ctrl-c was pressed */
+               if (ctrlc()) {
+                       puts("\nAbort\n");
+                       break;
+               }
+       }
+       if (got_pldirq) {
+               printf("Got interrupt!\n");
+               printf("Power %sready!\n",
+                      in8(CFG_CPLD_BASE) & PWR_RDY ? "":"NOT ");
+       }
+
+       irq_free_handler(CPLD_IRQ);
+       return 0;
+}
+U_BOOT_CMD(
+       wpi,    1,      1,      do_waitpwrirq,
+       "wpi     - Wait for power change interrupt\n",
+       NULL
+       );
+
+/*
+ * initialize DVI panellink transmitter
+ */
+int dvi_init(void)
+{
+       int i;
+       int ret = 0;
+       unsigned int oldbus;
+       uchar u[] = {0x08, 0x34,
+                    0x09, 0x20,
+                    0x0a, 0x90,
+                    0x0c, 0x89,
+                    0x08, 0x35};
+
+       printf("DVI:   ");
+
+       oldbus = I2C_GET_BUS();
+       I2C_SET_BUS(0);
+
+       for (i = 0; i < sizeof(u); i += 2)
+               if (i2c_write (0x38, u[i], 1, &u[i + 1], 1)) {
+                       ret = -1;
+                       break;
+               }
+
+       if (ret == 0)
+               printf("initialized\n");
+       else
+               printf("failed - cannot initialize DVI transmitter\n");
+
+       I2C_SET_BUS(oldbus);
+       return ret;
+}
+
+int do_dviinit(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       dvi_init();
+       return 0;
+}
+U_BOOT_CMD(
+       dviinit, 1, 1, do_dviinit,
+       "dviinit - Initialize DVI Panellink transmitter\n",
+       NULL
+       );
+
+/*
+ * TODO: 'time' command might be useful for others as well.
+ *       Move to 'common' directory.
+ */
+int do_time(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned long long start, end;
+       char c, cmd[CFG_CBSIZE];
+       char *p, *d = cmd;
+       int ret, i;
+       ulong us;
+
+       for (i = 1; i < argc; i++) {
+               p = argv[i];
+
+               if (i > 1)
+                       *d++ = ' ';
+
+               while ((c = *p++) != '\0') {
+                       *d++ = c;
+               }
+       }
+       *d = '\0';
+
+       start = get_ticks();
+       ret = run_command (cmd, 0);
+       end = get_ticks();
+
+       printf("ticks=%d\n", (ulong)(end - start));
+       us = (ulong)((1000L * (end - start)) / (get_tbclk() / 1000));
+       printf("usec=%d\n", us);
+
+       return ret;
+}
+U_BOOT_CMD(
+       time,   CFG_MAXARGS,    1,      do_time,
+       "time    - run command and output execution time\n",
+       NULL
+       );
+
+extern void video_hw_rectfill (
+       unsigned int bpp,               /* bytes per pixel */
+       unsigned int dst_x,             /* dest pos x */
+       unsigned int dst_y,             /* dest pos y */
+       unsigned int dim_x,             /* frame width */
+       unsigned int dim_y,             /* frame height */
+       unsigned int color              /* fill color */
+       );
+
+/*
+ * graphics demo
+ * draw rectangles using pseudorandom number generator
+ * (see http://www.embedded.com/columns/technicalinsights/20900500)
+ */
+unsigned int rprime = 9972;
+static unsigned int r;
+static unsigned int Y;
+
+unsigned int prng(unsigned int max)
+{
+       if (r == 0 || r == 1 || r == -1)
+               r = rprime; /* keep from getting stuck */
+
+       r = (9973 * ~r) + ((Y) % 701); /* the actual algorithm */
+       Y = (r >> 16) % max; /* choose upper bits and reduce */
+       return Y;
+}
+
+int do_gfxdemo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned int color;
+       unsigned int x, y, dx, dy;
+
+       while (!ctrlc()) {
+               x = prng(1280 - 1);
+               y = prng(1024 - 1);
+               dx = prng(1280- x - 1);
+               dy = prng(1024 - y - 1);
+               color = prng(0x10000);
+               video_hw_rectfill(2, x, y, dx, dy, color);
+       }
+
+       return 0;
+}
+U_BOOT_CMD(
+       gfxdemo,        CFG_MAXARGS,    1,      do_gfxdemo,
+       "gfxdemo - demo\n",
+       NULL
+       );
diff --git a/board/esd/du440/du440.h b/board/esd/du440/du440.h
new file mode 100644 (file)
index 0000000..5c362e4
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * (C) Copyright 2008
+ * Matthias Fuchs, esd gmbh, matthias.fuchs@esd-electronics.com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#define SDR0_USB0              0x0320     /* USB Control Register */
+
+#define CFG_GPIO0_EP_EEP       (0x80000000 >> 23)       /* GPIO0_23 */
+#define CFG_GPIO1_DCF77                (0x80000000 >> (42-32))  /* GPIO1_42 */
+
+#define CFG_GPIO1_IORSTN       (0x80000000 >> (55-32))  /* GPIO1_55 */
+
+#define CFG_GPIO1_HWVER_MASK   0x000000f0 /* GPIO1_56-59 */
+#define CFG_GPIO1_HWVER_SHIFT  4
+#define CFG_GPIO1_LEDUSR1      0x00000008 /* GPIO1_60 */
+#define CFG_GPIO1_LEDUSR2      0x00000004 /* GPIO1_61 */
+#define CFG_GPIO1_LEDPOST      0x00000002 /* GPIO1_62 */
+#define CFG_GPIO1_LEDDU                0x00000001 /* GPIO1_63 */
+
+#define CPLD_VERSION_MASK      0x0f
+#define PWR_INT_FLAG           0x80
+#define PWR_RDY                        0x10
+
+#define CPLD_IRQ               (32+30)
+
+#define PCI_VENDOR_ID_ESDGMBH  0x12fe
+#define PCI_DEVICE_ID_DU440    0x0444
diff --git a/board/esd/du440/init.S b/board/esd/du440/init.S
new file mode 100644 (file)
index 0000000..4390b50
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * (C) Copyright 2008
+ * Matthias Fuchs, esd gmbh, matthias.fuchs@esd-electronics.com
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <ppc_asm.tmpl>
+#include <asm-ppc/mmu.h>
+#include <config.h>
+
+/*
+ * TLB TABLE
+ *
+ * This table is used by the cpu boot code to setup the initial tlb
+ * entries. Rather than make broad assumptions in the cpu source tree,
+ * this table lets each board set things up however they like.
+ *
+ * Pointer to the table is returned in r1
+ */
+    .section .bootpg,"ax"
+    .globl tlbtab
+
+tlbtab:
+       tlbtab_start
+
+       /*
+        * BOOT_CS (FLASH) must be first. Before relocation SA_I can be off to use the
+        * speed up boot process. It is patched after relocation to enable SA_I
+        */
+       tlbentry( CFG_BOOT_BASE_ADDR, SZ_256M, CFG_BOOT_BASE_ADDR, 1, AC_R|AC_W|AC_X|SA_G )
+
+#ifdef CFG_INIT_RAM_DCACHE
+       /* TLB-entry for init-ram in dcache (SA_I must be turned off!) */
+       tlbentry( CFG_INIT_RAM_ADDR, SZ_64K, CFG_INIT_RAM_ADDR, 0, AC_R|AC_W|AC_X|SA_G )
+#endif
+
+       /* TLB-entry for PCI Memory */
+       tlbentry( CFG_PCI_MEMBASE, SZ_256M,  CFG_PCI_MEMBASE, 1, AC_R|AC_W|SA_G|SA_I )
+       tlbentry( CFG_PCI_MEMBASE1, SZ_256M, CFG_PCI_MEMBASE1, 1, AC_R|AC_W|SA_G|SA_I )
+       tlbentry( CFG_PCI_MEMBASE2, SZ_256M, CFG_PCI_MEMBASE2, 1, AC_R|AC_W|SA_G|SA_I )
+       tlbentry( CFG_PCI_MEMBASE3, SZ_256M, CFG_PCI_MEMBASE3, 1, AC_R|AC_W|SA_G|SA_I )
+
+       /* TLB-entry for PCI IO */
+       tlbentry( CFG_PCI_IOBASE, SZ_64K, CFG_PCI_IOBASE, 1, AC_R|AC_W|SA_G|SA_I )
+
+       /* TLB-entries for EBC:  CPLD, DUMEM, DUIO */
+       tlbentry( CFG_CPLD_BASE, SZ_1K, CFG_CPLD_BASE, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
+       tlbentry( CFG_DUMEM_BASE, SZ_1M, CFG_DUMEM_BASE, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
+       tlbentry( CFG_DUIO_BASE, SZ_64K, CFG_DUIO_BASE, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
+
+       /* TLB-entry for NAND */
+       tlbentry( CFG_NAND0_ADDR, SZ_1K, CFG_NAND0_ADDR, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
+       tlbentry( CFG_NAND1_ADDR, SZ_1K, CFG_NAND1_ADDR, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
+
+       /* TLB-entry for Internal Registers & OCM */
+       tlbentry( 0xe0000000, SZ_16M, 0xe0000000, 0,  AC_R|AC_W|AC_X|SA_I )
+
+       /* TLB-entry PCI registers */
+       tlbentry( 0xEEC00000, SZ_1K, 0xEEC00000, 1,  AC_R|AC_W|AC_X|SA_G|SA_I )
+
+       /* TLB-entry for peripherals */
+       tlbentry( 0xEF000000, SZ_16M, 0xEF000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I)
+
+       tlbtab_end
diff --git a/board/esd/du440/u-boot.lds b/board/esd/du440/u-boot.lds
new file mode 100644 (file)
index 0000000..e140737
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * (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
+ */
+
+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
+{
+  .resetvec 0xFFFFFFFC :
+  {
+    *(.resetvec)
+  } = 0xffff
+
+  .bootpg 0xFFFFF000 :
+  {
+    cpu/ppc4xx/start.o (.bootpg)
+  } = 0xffff
+
+  /* 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      :
+  {
+    /* WARNING - the following is hand-optimized to fit within */
+    /* the sector layout of our flash chips!   XXX FIXME XXX   */
+
+    cpu/ppc4xx/start.o (.text)
+
+    *(.text)
+    *(.fixup)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+  }
+  .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 = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __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 (NOLOAD)       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+
+  ppcenv_assert = ASSERT(. < 0xFFFF8000, ".bss section too big, overlaps .ppcenv section. Please update your confguration: CFG_MONITOR_BASE, CFG_MONITOR_LEN and TEXT_BASE may need to be modified.");
+
+  _end = . ;
+  PROVIDE (end = .);
+}
index bb91e67262b0ab8c49d2f39893532f19f84b4a35..44c097867f3802c7e29f6ffba5fd345b3f73e94f 100644 (file)
 #include <linux/ctype.h>
 
 typedef struct {
-       unsigned char id[4];            /* 0x0000 - 0x0003 */
-       unsigned char sn[12];           /* 0x0004 - 0x000F */
-       unsigned char errata[5];        /* 0x0010 - 0x0014 */
-       unsigned char date[7];          /* 0x0015 - 0x001a */
-       unsigned char res_1[37];        /* 0x001b - 0x003f */
-       unsigned char tab_size;         /* 0x0040 */
-       unsigned char tab_flag;         /* 0x0041 */
-       unsigned char mac[8][6];        /* 0x0042 - 0x0071 */
-       unsigned char res_2[126];       /* 0x0072 - 0x00ef */
-       unsigned int crc;               /* 0x00f0 - 0x00f3 crc32 checksum */
+       u8 id[4];               /* 0x0000 - 0x0003 EEPROM Tag */
+       u8 sn[12];              /* 0x0004 - 0x000F Serial Number */
+       u8 errata[5];           /* 0x0010 - 0x0014 Errata Level */
+       u8 date[6];             /* 0x0015 - 0x001a Build Date */
+       u8 res_0;               /* 0x001b          Reserved */
+       u8 version[4];          /* 0x001c - 0x001f Version */
+       u8 tempcal[8];          /* 0x0020 - 0x0027 Temperature Calibration Factors*/
+       u8 tempcalsys[2];       /* 0x0028 - 0x0029 System Temperature Calibration Factors*/
+       u8 res_1[22];           /* 0x0020 - 0x003f Reserved */
+       u8 mac_size;            /* 0x0040          Mac table size */
+       u8 mac_flag;            /* 0x0041          Mac table flags */
+       u8 mac[8][6];           /* 0x0042 - 0x0071 Mac addresses */
+       u32 crc;                /* 0x0072          crc32 checksum */
 } EEPROM_data;
 
 static EEPROM_data mac_data;
@@ -45,28 +48,57 @@ static EEPROM_data mac_data;
 int mac_show(void)
 {
        int i;
+       u8 mac_size;
        unsigned char ethaddr[8][18];
+       unsigned char enetvar[32];
+
+       /* Show EEPROM tagID,
+        * always the four characters 'NXID'.
+        */
+       printf("ID ");
+       for (i = 0; i < 4; i++)
+               printf("%c", mac_data.id[i]);
+       printf("\n");
+
+       /* Show Serial number,
+        * 0 to 11 charaters of errata information.
+        */
+       printf("SN ");
+       for (i = 0; i < 12; i++)
+               printf("%c", mac_data.sn[i]);
+       printf("\n");
 
-       printf("ID %c%c%c%c\n",
-              mac_data.id[0],
-              mac_data.id[1],
-              mac_data.id[2],
-              mac_data.id[3]);
-       printf("Errata %c%c%c%c%c\n",
-              mac_data.errata[0],
-              mac_data.errata[1],
-              mac_data.errata[2],
-              mac_data.errata[3],
-              mac_data.errata[4]);
-       printf("Date %c%c%c%c%c%c%c\n",
+       /* Show Errata Level,
+        * 0 to 4 characters of errata information.
+        */
+       printf("Errata ");
+       for (i = 0; i < 5; i++)
+               printf("%c", mac_data.errata[i]);
+       printf("\n");
+
+       /* Show Build Date,
+        * BCD date values, as YYMMDDhhmmss.
+        */
+       printf("Date 20%02x\/%02x\/%02x %02x:%02x:%02x\n",
               mac_data.date[0],
               mac_data.date[1],
               mac_data.date[2],
               mac_data.date[3],
               mac_data.date[4],
-              mac_data.date[5],
-              mac_data.date[6]);
-       for (i = 0; i < 8; i++) {
+              mac_data.date[5]);
+
+       /* Show MAC table size,
+        * Value from 0 to 7 indicating how many MAC
+        * addresses are stored in the system EEPROM.
+        */
+       if((mac_data.mac_size > 0) && (mac_data.mac_size <= 8))
+               mac_size = mac_data.mac_size;
+       else
+               mac_size = 8; /* Set the max size */
+       printf("MACSIZE %x\n", mac_size);
+
+       /* Show Mac addresses */
+       for (i = 0; i < mac_size; i++) {
                sprintf((char *)ethaddr[i],
                        "%02x:%02x:%02x:%02x:%02x:%02x",
                        mac_data.mac[i][0],
@@ -76,12 +108,12 @@ int mac_show(void)
                        mac_data.mac[i][4],
                        mac_data.mac[i][5]);
                printf("MAC %d %s\n", i, ethaddr[i]);
-       }
 
-       setenv("ethaddr",  (char *)ethaddr[0]);
-       setenv("eth1addr", (char *)ethaddr[1]);
-       setenv("eth2addr", (char *)ethaddr[2]);
-       setenv("eth3addr", (char *)ethaddr[3]);
+               sprintf((char *)enetvar,
+                       i ? "eth%daddr" : "ethaddr", i);
+               setenv((char *)enetvar, (char *)ethaddr[i]);
+
+       }
 
        return 0;
 }
@@ -120,17 +152,14 @@ int mac_prog(void)
        unsigned char dev = ID_EEPROM_ADDR, *ptr;
        unsigned char *eeprom_data = (unsigned char *)(&mac_data);
 
-       for (i = 0; i < sizeof(mac_data.res_1); i++)
-               mac_data.res_1[i] = 0;
-       for (i = 0; i < sizeof(mac_data.res_2); i++)
-               mac_data.res_2[i] = 0;
+       mac_data.res_0 = 0;
+       memset((void *)mac_data.res_1, 0, sizeof(mac_data.res_1));
+
        length = sizeof(EEPROM_data);
        crc = crc32(crc, eeprom_data, length - 4);
        mac_data.crc = crc;
        for (i = 0, ptr = eeprom_data; i < length; i += 8, ptr += 8) {
-               ret =
-                   i2c_write(dev, i, 1, ptr,
-                             (length - i) < 8 ? (length - i) : 8);
+               ret = i2c_write(dev, i, 1, ptr, min((length - i),8));
                udelay(5000);   /* 5ms write cycle timing */
                if (ret)
                        break;
@@ -179,12 +208,13 @@ int do_mac(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
                        }
                        break;
                case 'd':       /* date */
-                       for (i = 0; i < 7; i++) {
-                               mac_data.date[i] = argv[2][i];
+                       mac_val = simple_strtoull(argv[2], NULL, 16);
+                       for (i = 0; i < 6; i++) {
+                               mac_data.date[i] = (mac_val >> (40 - 8 * i));
                        }
                        break;
-               case 'p':       /* number of ports */
-                       mac_data.tab_size =
+               case 'p':       /* mac table size */
+                       mac_data.mac_size =
                            (unsigned char)simple_strtoul(argv[2], NULL, 16);
                        break;
                case '0':       /* mac 0 */
diff --git a/board/freescale/m52277evb/Makefile b/board/freescale/m52277evb/Makefile
new file mode 100644 (file)
index 0000000..981763d
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# (C) Copyright 2000-2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  = $(BOARD).o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/freescale/m52277evb/config.mk b/board/freescale/m52277evb/config.mk
new file mode 100644 (file)
index 0000000..ce014ed
--- /dev/null
@@ -0,0 +1,25 @@
+#
+# (C) Copyright 2000-2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+# Coldfire contribution by Bernhard Kuhn <bkuhn@metrowerks.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+TEXT_BASE = 0
diff --git a/board/freescale/m52277evb/m52277evb.c b/board/freescale/m52277evb/m52277evb.c
new file mode 100644 (file)
index 0000000..98424c8
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * (C) Copyright 2000-2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/immap.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int checkboard(void)
+{
+       puts("Board: ");
+       puts("Freescale M52277 EVB\n");
+       return 0;
+};
+
+long int initdram(int board_type)
+{
+       volatile sdramc_t *sdram = (volatile sdramc_t *)(MMAP_SDRAM);
+       u32 dramsize, i;
+
+       dramsize = CFG_SDRAM_SIZE * 0x100000;
+
+       for (i = 0x13; i < 0x20; i++) {
+               if (dramsize == (1 << i))
+                       break;
+       }
+       i--;
+
+       sdram->sdcs0 = (CFG_SDRAM_BASE | i);
+
+       sdram->sdcfg1 = CFG_SDRAM_CFG1;
+       sdram->sdcfg2 = CFG_SDRAM_CFG2;
+
+       /* Issue PALL */
+       sdram->sdcr = CFG_SDRAM_CTRL | 2;
+
+       /* Issue LEMR */
+       /*sdram->sdmr = CFG_SDRAM_EMOD; */
+       sdram->sdmr = CFG_SDRAM_MODE;
+
+       udelay(1000);
+
+       /* Issue PALL */
+       sdram->sdcr = CFG_SDRAM_CTRL | 2;
+
+       /* Perform two refresh cycles */
+       sdram->sdcr = CFG_SDRAM_CTRL | 4;
+       sdram->sdcr = CFG_SDRAM_CTRL | 4;
+
+       sdram->sdcr = (CFG_SDRAM_CTRL & ~0x80000000) | 0x10000c00;
+
+       udelay(100);
+
+       return (dramsize);
+};
+
+int testdram(void)
+{
+       /* TODO: XXX XXX XXX */
+       printf("DRAM test not implemented!\n");
+
+       return (0);
+}
diff --git a/board/freescale/m52277evb/u-boot.lds b/board/freescale/m52277evb/u-boot.lds
new file mode 100644 (file)
index 0000000..9125bfc
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * (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
+ */
+
+OUTPUT_ARCH(m68k)
+SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/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      :
+  {
+    /* WARNING - the following is hand-optimized to fit within */
+    /* the sector layout of our flash chips!   XXX FIXME XXX   */
+
+    cpu/mcf5227x/start.o       (.text)
+    cpu/mcf5227x/libmcf5227x.a (.text)
+    lib_m68k/libm68k.a         (.text)
+    lib_generic/libgeneric.a   (.text)
+    common/cmd_mem.o           (.text)
+    common/main.o              (.text)
+
+    . = DEFINED(env_offset) ? 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_start = .;
+    *(.got)
+    __got_end = .;
+    _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 = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __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 = .;
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+   . = ALIGN(4);
+   _ebss = .;
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index fefb42e614c277caea5923a4bc58ae61e463be71..344a614895d62d843ccfcc6f8d2b57736398868e 100644 (file)
@@ -63,10 +63,10 @@ static void nand_hwcontrol(struct mtd_info *mtdinfo, int cmd)
                nand_baseaddr |= CLR_ALE;
                break;
        case NAND_CTL_SETWP:
-               fbcs->csmr2 |= CSMR_WP;
+               fbcs->csmr2 |= FBCS_CSMR_WP;
                break;
        case NAND_CTL_CLRWP:
-               fbcs->csmr2 &= ~CSMR_WP;
+               fbcs->csmr2 &= ~FBCS_CSMR_WP;
                break;
        }
        this->IO_ADDR_W = (void __iomem *)(nand_baseaddr);
diff --git a/board/freescale/m5373evb/Makefile b/board/freescale/m5373evb/Makefile
new file mode 100644 (file)
index 0000000..ab0f11e
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# (C) Copyright 2000-2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  = $(BOARD).o mii.o nand.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/freescale/m5373evb/config.mk b/board/freescale/m5373evb/config.mk
new file mode 100644 (file)
index 0000000..ce014ed
--- /dev/null
@@ -0,0 +1,25 @@
+#
+# (C) Copyright 2000-2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+# Coldfire contribution by Bernhard Kuhn <bkuhn@metrowerks.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+TEXT_BASE = 0
diff --git a/board/freescale/m5373evb/m5373evb.c b/board/freescale/m5373evb/m5373evb.c
new file mode 100644 (file)
index 0000000..26b87b9
--- /dev/null
@@ -0,0 +1,88 @@
+/*
+ * (C) Copyright 2000-2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <config.h>
+#include <common.h>
+#include <asm/immap.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int checkboard(void)
+{
+       puts("Board: ");
+       puts("Freescale FireEngine 5373 EVB\n");
+       return 0;
+};
+
+long int initdram(int board_type)
+{
+       volatile sdram_t *sdram = (volatile sdram_t *)(MMAP_SDRAM);
+       u32 dramsize, i;
+
+       dramsize = CFG_SDRAM_SIZE * 0x100000;
+
+       for (i = 0x13; i < 0x20; i++) {
+               if (dramsize == (1 << i))
+                       break;
+       }
+       i--;
+
+       sdram->cs0 = (CFG_SDRAM_BASE | i);
+       sdram->cfg1 = CFG_SDRAM_CFG1;
+       sdram->cfg2 = CFG_SDRAM_CFG2;
+
+       /* Issue PALL */
+       sdram->ctrl = CFG_SDRAM_CTRL | 2;
+
+       /* Issue LEMR */
+       sdram->mode = CFG_SDRAM_EMOD;
+       sdram->mode = (CFG_SDRAM_MODE | 0x04000000);
+
+       udelay(500);
+
+       /* Issue PALL */
+       sdram->ctrl = (CFG_SDRAM_CTRL | 2);
+
+       /* Perform two refresh cycles */
+       sdram->ctrl = CFG_SDRAM_CTRL | 4;
+       sdram->ctrl = CFG_SDRAM_CTRL | 4;
+
+       sdram->mode = CFG_SDRAM_MODE;
+
+       sdram->ctrl = (CFG_SDRAM_CTRL & ~0x80000000) | 0x10000c00;
+
+       udelay(100);
+
+       return dramsize;
+};
+
+int testdram(void)
+{
+       /* TODO: XXX XXX XXX */
+       printf("DRAM test not implemented!\n");
+
+       return (0);
+}
diff --git a/board/freescale/m5373evb/mii.c b/board/freescale/m5373evb/mii.c
new file mode 100644 (file)
index 0000000..8f6abf3
--- /dev/null
@@ -0,0 +1,306 @@
+/*
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/fec.h>
+#include <asm/immap.h>
+
+#include <config.h>
+#include <net.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI)
+#undef MII_DEBUG
+#undef ET_DEBUG
+
+int fecpin_setclear(struct eth_device *dev, int setclear)
+{
+       volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO;
+
+       if (setclear) {
+               gpio->par_fec |= GPIO_PAR_FEC_7W_FEC | GPIO_PAR_FEC_MII_FEC;
+               gpio->par_feci2c |=
+                   GPIO_PAR_FECI2C_MDC_EMDC | GPIO_PAR_FECI2C_MDIO_EMDIO;
+       } else {
+               gpio->par_fec &= ~(GPIO_PAR_FEC_7W_FEC | GPIO_PAR_FEC_MII_FEC);
+               gpio->par_feci2c &=
+                   ~(GPIO_PAR_FECI2C_MDC_EMDC | GPIO_PAR_FECI2C_MDIO_EMDIO);
+       }
+       return 0;
+}
+
+#if defined(CFG_DISCOVER_PHY) || defined(CONFIG_CMD_MII)
+#include <miiphy.h>
+
+/* Make MII read/write commands for the FEC. */
+#define mk_mii_read(ADDR, REG) (0x60020000 | ((ADDR << 23) | (REG & 0x1f) << 18))
+
+#define mk_mii_write(ADDR, REG, VAL)   (0x50020000 | ((ADDR << 23) | (REG & 0x1f) << 18) | (VAL & 0xffff))
+
+/* PHY identification */
+#define PHY_ID_LXT970          0x78100000      /* LXT970 */
+#define PHY_ID_LXT971          0x001378e0      /* LXT971 and 972 */
+#define PHY_ID_82555           0x02a80150      /* Intel 82555 */
+#define PHY_ID_QS6612          0x01814400      /* QS6612 */
+#define PHY_ID_AMD79C784       0x00225610      /* AMD 79C784 */
+#define PHY_ID_LSI80225                0x0016f870      /* LSI 80225 */
+#define PHY_ID_LSI80225B       0x0016f880      /* LSI 80225/B */
+#define PHY_ID_DP83848VV       0x20005C90      /* National 83848 */
+#define PHY_ID_DP83849         0x20005CA2      /* National 82849 */
+
+#define STR_ID_LXT970          "LXT970"
+#define STR_ID_LXT971          "LXT971"
+#define STR_ID_82555           "Intel82555"
+#define STR_ID_QS6612          "QS6612"
+#define STR_ID_AMD79C784       "AMD79C784"
+#define STR_ID_LSI80225                "LSI80225"
+#define STR_ID_LSI80225B       "LSI80225/B"
+#define STR_ID_DP83848VV       "N83848"
+#define STR_ID_DP83849         "N83849"
+
+/****************************************************************************
+ * mii_init -- Initialize the MII for MII command without ethernet
+ * This function is a subset of eth_init
+ ****************************************************************************
+ */
+void mii_reset(struct fec_info_s *info)
+{
+       volatile fec_t *fecp = (fec_t *) (info->miibase);
+       int i;
+
+       fecp->ecr = FEC_ECR_RESET;
+       for (i = 0; (fecp->ecr & FEC_ECR_RESET) && (i < FEC_RESET_DELAY); ++i) {
+               udelay(1);
+       }
+       if (i == FEC_RESET_DELAY) {
+               printf("FEC_RESET_DELAY timeout\n");
+       }
+}
+
+/* send command to phy using mii, wait for result */
+uint mii_send(uint mii_cmd)
+{
+       struct fec_info_s *info;
+       struct eth_device *dev;
+       volatile fec_t *ep;
+       uint mii_reply;
+       int j = 0;
+
+       /* retrieve from register structure */
+       dev = eth_get_dev();
+       info = dev->priv;
+
+       ep = (fec_t *) info->miibase;
+
+       ep->mmfr = mii_cmd;     /* command to phy */
+
+       /* wait for mii complete */
+       while (!(ep->eir & FEC_EIR_MII) && (j < MCFFEC_TOUT_LOOP)) {
+               udelay(1);
+               j++;
+       }
+       if (j >= MCFFEC_TOUT_LOOP) {
+               printf("MII not complete\n");
+               return -1;
+       }
+
+       mii_reply = ep->mmfr;   /* result from phy */
+       ep->eir = FEC_EIR_MII;  /* clear MII complete */
+#ifdef ET_DEBUG
+       printf("%s[%d] %s: sent=0x%8.8x, reply=0x%8.8x\n",
+              __FILE__, __LINE__, __FUNCTION__, mii_cmd, mii_reply);
+#endif
+
+       return (mii_reply & 0xffff);    /* data read from phy */
+}
+#endif                         /* CFG_DISCOVER_PHY || CONFIG_CMD_MII */
+
+#if defined(CFG_DISCOVER_PHY)
+int mii_discover_phy(struct eth_device *dev)
+{
+#define MAX_PHY_PASSES 11
+       struct fec_info_s *info = dev->priv;
+       int phyaddr, pass;
+       uint phyno, phytype;
+
+       if (info->phyname_init)
+               return info->phy_addr;
+
+       phyaddr = -1;           /* didn't find a PHY yet */
+       for (pass = 1; pass <= MAX_PHY_PASSES && phyaddr < 0; ++pass) {
+               if (pass > 1) {
+                       /* PHY may need more time to recover from reset.
+                        * The LXT970 needs 50ms typical, no maximum is
+                        * specified, so wait 10ms before try again.
+                        * With 11 passes this gives it 100ms to wake up.
+                        */
+                       udelay(10000);  /* wait 10ms */
+               }
+
+               for (phyno = 0; phyno < 32 && phyaddr < 0; ++phyno) {
+
+                       phytype = mii_send(mk_mii_read(phyno, PHY_PHYIDR1));
+#ifdef ET_DEBUG
+                       printf("PHY type 0x%x pass %d type\n", phytype, pass);
+#endif
+                       if (phytype != 0xffff) {
+                               phyaddr = phyno;
+                               phytype <<= 16;
+                               phytype |=
+                                   mii_send(mk_mii_read(phyno, PHY_PHYIDR2));
+
+                               switch (phytype & 0xffffffff) {
+                               case PHY_ID_DP83848VV:
+                                       strcpy(info->phy_name,
+                                              STR_ID_DP83848VV);
+                                       info->phyname_init = 1;
+                                       break;
+                               default:
+                                       strcpy(info->phy_name, "unknown");
+                                       info->phyname_init = 1;
+                                       break;
+                               }
+
+#ifdef ET_DEBUG
+                               printf("PHY @ 0x%x pass %d type ", phyno, pass);
+                               switch (phytype & 0xffffffff) {
+                               case PHY_ID_DP83848VV:
+                                       printf(STR_ID_DP83848VV);
+                                       break;
+                               default:
+                                       printf("0x%08x\n", phytype);
+                                       break;
+                               }
+#endif
+                       }
+               }
+       }
+       if (phyaddr < 0)
+               printf("No PHY device found.\n");
+
+       return phyaddr;
+}
+#endif                         /* CFG_DISCOVER_PHY */
+
+void mii_init(void) __attribute__((weak,alias("__mii_init")));
+
+void __mii_init(void)
+{
+       volatile fec_t *fecp;
+       struct fec_info_s *info;
+       struct eth_device *dev;
+       int miispd = 0, i = 0;
+       u16 autoneg = 0;
+
+       /* retrieve from register structure */
+       dev = eth_get_dev();
+       info = dev->priv;
+
+       fecp = (fec_t *) info->miibase;
+
+       fecpin_setclear(dev, 1);
+
+       mii_reset(info);
+
+       /* We use strictly polling mode only */
+       fecp->eimr = 0;
+
+       /* Clear any pending interrupt */
+       fecp->eir = 0xffffffff;
+
+       /* Set MII speed */
+       miispd = (gd->bus_clk / 1000000) / 5;
+       fecp->mscr = miispd << 1;
+
+       info->phy_addr = mii_discover_phy(dev);
+
+#define AUTONEGLINK            (PHY_BMSR_AUTN_COMP | PHY_BMSR_LS)
+       while (i < MCFFEC_TOUT_LOOP) {
+               autoneg = 0;
+               miiphy_read(dev->name, info->phy_addr, PHY_BMSR, &autoneg);
+               i++;
+
+               if ((autoneg & AUTONEGLINK) == AUTONEGLINK)
+                       break;
+
+               udelay(500);
+       }
+       if (i >= MCFFEC_TOUT_LOOP) {
+               printf("Auto Negotiation not complete\n");
+       }
+
+       /* adapt to the half/full speed settings */
+       info->dup_spd = miiphy_duplex(dev->name, info->phy_addr) << 16;
+       info->dup_spd |= miiphy_speed(dev->name, info->phy_addr);
+}
+
+/*****************************************************************************
+ * Read and write a MII PHY register, routines used by MII Utilities
+ *
+ * FIXME: These routines are expected to return 0 on success, but mii_send
+ *       does _not_ return an error code. Maybe 0xFFFF means error, i.e.
+ *       no PHY connected...
+ *       For now always return 0.
+ * FIXME: These routines only work after calling eth_init() at least once!
+ *       Otherwise they hang in mii_send() !!! Sorry!
+ *****************************************************************************/
+
+int mcffec_miiphy_read(char *devname, unsigned char addr, unsigned char reg,
+                      unsigned short *value)
+{
+       short rdreg;            /* register working value */
+
+#ifdef MII_DEBUG
+       printf("miiphy_read(0x%x) @ 0x%x = ", reg, addr);
+#endif
+       rdreg = mii_send(mk_mii_read(addr, reg));
+
+       *value = rdreg;
+
+#ifdef MII_DEBUG
+       printf("0x%04x\n", *value);
+#endif
+
+       return 0;
+}
+
+int mcffec_miiphy_write(char *devname, unsigned char addr, unsigned char reg,
+                       unsigned short value)
+{
+       short rdreg;            /* register working value */
+
+#ifdef MII_DEBUG
+       printf("miiphy_write(0x%x) @ 0x%x = ", reg, addr);
+#endif
+
+       rdreg = mii_send(mk_mii_write(addr, reg, value));
+
+#ifdef MII_DEBUG
+       printf("0x%04x\n", value);
+#endif
+
+       return 0;
+}
+
+#endif                         /* CONFIG_CMD_NET, FEC_ENET & NET_MULTI */
diff --git a/board/freescale/m5373evb/nand.c b/board/freescale/m5373evb/nand.c
new file mode 100644 (file)
index 0000000..344a614
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * (C) Copyright 2000-2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <config.h>
+#include <common.h>
+#include <asm/io.h>
+#include <asm/immap.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#if defined(CONFIG_CMD_NAND)
+#include <nand.h>
+#include <linux/mtd/mtd.h>
+
+#define SET_CLE                0x10
+#define CLR_CLE                ~SET_CLE
+#define SET_ALE                0x08
+#define CLR_ALE                ~SET_ALE
+
+static void nand_hwcontrol(struct mtd_info *mtdinfo, int cmd)
+{
+       struct nand_chip *this = mtdinfo->priv;
+       volatile fbcs_t *fbcs = (fbcs_t *) MMAP_FBCS;
+       u32 nand_baseaddr = (u32) this->IO_ADDR_W;
+
+       switch (cmd) {
+       case NAND_CTL_SETNCE:
+       case NAND_CTL_CLRNCE:
+               break;
+       case NAND_CTL_SETCLE:
+               nand_baseaddr |= SET_CLE;
+               break;
+       case NAND_CTL_CLRCLE:
+               nand_baseaddr &= CLR_CLE;
+               break;
+       case NAND_CTL_SETALE:
+               nand_baseaddr |= SET_ALE;
+               break;
+       case NAND_CTL_CLRALE:
+               nand_baseaddr |= CLR_ALE;
+               break;
+       case NAND_CTL_SETWP:
+               fbcs->csmr2 |= FBCS_CSMR_WP;
+               break;
+       case NAND_CTL_CLRWP:
+               fbcs->csmr2 &= ~FBCS_CSMR_WP;
+               break;
+       }
+       this->IO_ADDR_W = (void __iomem *)(nand_baseaddr);
+}
+
+static void nand_write_byte(struct mtd_info *mtdinfo, u_char byte)
+{
+       struct nand_chip *this = mtdinfo->priv;
+       *((volatile u8 *)(this->IO_ADDR_W)) = byte;
+}
+
+static u8 nand_read_byte(struct mtd_info *mtdinfo)
+{
+       struct nand_chip *this = mtdinfo->priv;
+       return (u8) (*((volatile u8 *)this->IO_ADDR_R));
+}
+
+static int nand_dev_ready(struct mtd_info *mtdinfo)
+{
+       return 1;
+}
+
+int board_nand_init(struct nand_chip *nand)
+{
+       volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO;
+
+       *((volatile u16 *)CFG_LATCH_ADDR) |= 0x0004;
+
+       /* set up pin configuration */
+       gpio->par_timer &= ~GPIO_PAR_TIN3_TIN3;
+       gpio->pddr_timer |= 0x08;
+       gpio->ppd_timer |= 0x08;
+       gpio->pclrr_timer = 0;
+       gpio->podr_timer = 0;
+
+       nand->chip_delay = 50;
+       nand->eccmode = NAND_ECC_SOFT;
+       nand->hwcontrol = nand_hwcontrol;
+       nand->read_byte = nand_read_byte;
+       nand->write_byte = nand_write_byte;
+       nand->dev_ready = nand_dev_ready;
+
+       return 0;
+}
+#endif
diff --git a/board/freescale/m5373evb/u-boot.lds b/board/freescale/m5373evb/u-boot.lds
new file mode 100644 (file)
index 0000000..9b994a0
--- /dev/null
@@ -0,0 +1,144 @@
+/*
+ * (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
+ */
+
+OUTPUT_ARCH(m68k)
+SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/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      :
+  {
+    /* WARNING - the following is hand-optimized to fit within */
+    /* the sector layout of our flash chips!   XXX FIXME XXX   */
+
+    cpu/mcf532x/start.o                (.text)
+    lib_m68k/traps.o           (.text)
+    lib_m68k/interrupts.o      (.text)
+    common/dlmalloc.o          (.text)
+    lib_generic/zlib.o         (.text)
+
+    . = DEFINED(env_offset) ? 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_start = .;
+    *(.got)
+    __got_end = .;
+    _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 = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __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 = .;
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+   . = ALIGN(4);
+   _ebss = .;
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
diff --git a/board/freescale/m547xevb/Makefile b/board/freescale/m547xevb/Makefile
new file mode 100644 (file)
index 0000000..74c2528
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# (C) Copyright 2000-2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  = $(BOARD).o mii.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/freescale/m547xevb/config.mk b/board/freescale/m547xevb/config.mk
new file mode 100644 (file)
index 0000000..fa66b75
--- /dev/null
@@ -0,0 +1,25 @@
+#
+# (C) Copyright 2000-2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+# Coldfire contribution by Bernhard Kuhn <bkuhn@metrowerks.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+TEXT_BASE = 0xFF800000
diff --git a/board/freescale/m547xevb/m547xevb.c b/board/freescale/m547xevb/m547xevb.c
new file mode 100644 (file)
index 0000000..0286084
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * (C) Copyright 2000-2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <config.h>
+#include <common.h>
+#include <pci.h>
+#include <asm/immap.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int checkboard(void)
+{
+       puts("Board: ");
+       puts("Freescale FireEngine 5475 EVB\n");
+       return 0;
+};
+
+long int initdram(int board_type)
+{
+       volatile siu_t *siu = (siu_t *) (MMAP_SIU);
+       volatile sdram_t *sdram = (volatile sdram_t *)(MMAP_SDRAM);
+       u32 dramsize, i;
+
+       siu->drv = CFG_SDRAM_DRVSTRENGTH;
+
+       dramsize = CFG_DRAMSZ * 0x100000;
+       for (i = 0x13; i < 0x20; i++) {
+               if (dramsize == (1 << i))
+                       break;
+       }
+       i--;
+       siu->cs0cfg = (CFG_SDRAM_BASE | i);
+
+#ifdef CFG_DRAMSZ1
+       temp = CFG_DRAMSZ1 * 0x100000;
+       for (i = 0x13; i < 0x20; i++) {
+               if (temp == (1 << i))
+                       break;
+       }
+       i--;
+       dramsize += temp;
+       siu->cs1cfg = ((CFG_SDRAM_BASE + temp) | i);
+#endif
+
+       sdram->cfg1 = CFG_SDRAM_CFG1;
+       sdram->cfg2 = CFG_SDRAM_CFG2;
+
+       /* Issue PALL */
+       sdram->ctrl = CFG_SDRAM_CTRL | 2;
+
+       /* Issue LEMR */
+       sdram->mode = CFG_SDRAM_EMOD;
+       sdram->mode = (CFG_SDRAM_MODE | 0x04000000);
+
+       udelay(500);
+
+       /* Issue PALL */
+       sdram->ctrl = (CFG_SDRAM_CTRL | 2);
+
+       /* Perform two refresh cycles */
+       sdram->ctrl = CFG_SDRAM_CTRL | 4;
+       sdram->ctrl = CFG_SDRAM_CTRL | 4;
+
+       sdram->mode = CFG_SDRAM_MODE;
+
+       sdram->ctrl = (CFG_SDRAM_CTRL & ~0x80000000) | 0x10000F00;
+
+       udelay(100);
+
+       return dramsize;
+};
+
+int testdram(void)
+{
+       /* TODO: XXX XXX XXX */
+       printf("DRAM test not implemented!\n");
+
+       return (0);
+}
+
+#if defined(CONFIG_PCI)
+/*
+ * Initialize PCI devices, report devices found.
+ */
+static struct pci_controller hose;
+extern void pci_mcf547x_8x_init(struct pci_controller *hose);
+
+void pci_init_board(void)
+{
+       pci_mcf547x_8x_init(&hose);
+}
+#endif                         /* CONFIG_PCI */
diff --git a/board/freescale/m547xevb/mii.c b/board/freescale/m547xevb/mii.c
new file mode 100644 (file)
index 0000000..5b2683b
--- /dev/null
@@ -0,0 +1,322 @@
+/*
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <config.h>
+#include <net.h>
+
+#include <asm/immap.h>
+#include <asm/fec.h>
+#include <asm/fsl_mcdmafec.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI)
+#undef MII_DEBUG
+#undef ET_DEBUG
+
+int fecpin_setclear(struct eth_device *dev, int setclear)
+{
+       volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO;
+       struct fec_info_dma *info = (struct fec_info_dma *)dev->priv;
+
+       if (setclear) {
+               if (info->iobase == CFG_FEC0_IOBASE)
+                       gpio->par_feci2cirq |= 0xF000;
+               else
+                       gpio->par_feci2cirq |= 0x0FC0;
+       } else {
+               if (info->iobase == CFG_FEC0_IOBASE)
+                       gpio->par_feci2cirq &= 0x0FFF;
+               else
+                       gpio->par_feci2cirq &= 0xF03F;
+       }
+       return 0;
+}
+
+#if defined(CFG_DISCOVER_PHY) || defined(CONFIG_CMD_MII)
+#include <miiphy.h>
+
+/* Make MII read/write commands for the FEC. */
+#define mk_mii_read(ADDR, REG) (0x60020000 | ((ADDR << 23) | (REG & 0x1f) << 18))
+
+#define mk_mii_write(ADDR, REG, VAL)   (0x50020000 | ((ADDR << 23) | (REG & 0x1f) << 18) | (VAL & 0xffff))
+
+/* PHY identification */
+#define PHY_ID_LXT970          0x78100000      /* LXT970 */
+#define PHY_ID_LXT971          0x001378e0      /* LXT971 and 972 */
+#define PHY_ID_82555           0x02a80150      /* Intel 82555 */
+#define PHY_ID_QS6612          0x01814400      /* QS6612 */
+#define PHY_ID_AMD79C784       0x00225610      /* AMD 79C784 */
+#define PHY_ID_LSI80225                0x0016f870      /* LSI 80225 */
+#define PHY_ID_LSI80225B       0x0016f880      /* LSI 80225/B */
+#define PHY_ID_DP83848VV       0x20005C90      /* National 83848 */
+#define PHY_ID_DP83849         0x20005CA2      /* National 82849 */
+#define PHY_ID_BCM5222         0x00406322      /* Broadcom 5222 */
+
+#define STR_ID_LXT970          "LXT970"
+#define STR_ID_LXT971          "LXT971"
+#define STR_ID_82555           "Intel82555"
+#define STR_ID_QS6612          "QS6612"
+#define STR_ID_AMD79C784       "AMD79C784"
+#define STR_ID_LSI80225                "LSI80225"
+#define STR_ID_LSI80225B       "LSI80225/B"
+#define STR_ID_DP83848VV       "N83848"
+#define STR_ID_DP83849         "N83849"
+#define STR_ID_BCM5222         "BCM5222"
+
+/****************************************************************************
+ * mii_init -- Initialize the MII for MII command without ethernet
+ * This function is a subset of eth_init
+ ****************************************************************************
+ */
+void mii_reset(struct fec_info_dma *info)
+{
+       volatile fecdma_t *fecp = (fecdma_t *) (info->miibase);
+       int i;
+
+       fecp->ecr = FEC_ECR_RESET;
+       for (i = 0; (fecp->ecr & FEC_ECR_RESET) && (i < FEC_RESET_DELAY); ++i) {
+               udelay(1);
+       }
+       if (i == FEC_RESET_DELAY) {
+               printf("FEC_RESET_DELAY timeout\n");
+       }
+}
+
+/* send command to phy using mii, wait for result */
+uint mii_send(uint mii_cmd)
+{
+       struct fec_info_dma *info;
+       struct eth_device *dev;
+       volatile fecdma_t *ep;
+       uint mii_reply;
+       int j = 0;
+
+       /* retrieve from register structure */
+       dev = eth_get_dev();
+       info = dev->priv;
+
+       ep = (fecdma_t *) info->miibase;
+
+       ep->mmfr = mii_cmd;     /* command to phy */
+
+       /* wait for mii complete */
+       while (!(ep->eir & FEC_EIR_MII) && (j < MCFFEC_TOUT_LOOP)) {
+               udelay(1);
+               j++;
+       }
+       if (j >= MCFFEC_TOUT_LOOP) {
+               printf("MII not complete\n");
+               return -1;
+       }
+
+       mii_reply = ep->mmfr;   /* result from phy */
+       ep->eir = FEC_EIR_MII;  /* clear MII complete */
+#ifdef ET_DEBUG
+       printf("%s[%d] %s: sent=0x%8.8x, reply=0x%8.8x\n",
+              __FILE__, __LINE__, __FUNCTION__, mii_cmd, mii_reply);
+#endif
+
+       return (mii_reply & 0xffff);    /* data read from phy */
+}
+#endif                         /* CFG_DISCOVER_PHY || CONFIG_CMD_MII */
+
+#if defined(CFG_DISCOVER_PHY)
+int mii_discover_phy(struct eth_device *dev)
+{
+#define MAX_PHY_PASSES 11
+       struct fec_info_dma *info = dev->priv;
+       int phyaddr, pass, temp;
+       uint phyno, phytype;
+
+       if (info->phyname_init) {
+               return info->phy_addr;
+       }
+
+       phyaddr = -1;           /* didn't find a PHY yet */
+       for (pass = 1; pass <= MAX_PHY_PASSES && phyaddr < 0; ++pass) {
+               if (pass > 1) {
+                       /* PHY may need more time to recover from reset.
+                        * The LXT970 needs 50ms typical, no maximum is
+                        * specified, so wait 10ms before try again.
+                        * With 11 passes this gives it 100ms to wake up.
+                        */
+                       udelay(10000);  /* wait 10ms */
+               }
+
+               temp = 0;
+               if (info->index > 0) {
+                       /* Some phy have multiple address, to solve the issue
+                          where phyno keeps starting from 0, check the
+                          previous phy address if both miibase are the same. */
+                       if (info->miibase == (info->next)->miibase) {
+                               temp = (info->next)->phy_addr + 1;
+                       }
+               }
+
+               for (phyno = temp; phyno < 32 && phyaddr < 0; ++phyno) {
+
+                       phytype = mii_send(mk_mii_read(phyno, PHY_PHYIDR1));
+#ifdef ET_DEBUG
+                       printf("PHY type 0x%x pass %d type\n", phytype, pass);
+#endif
+                       if (phytype != 0xffff) {
+                               phyaddr = phyno;
+                               phytype <<= 16;
+                               phytype |=
+                                   mii_send(mk_mii_read(phyno, PHY_PHYIDR2));
+
+                               switch (phytype & 0xffffffff) {
+                               case PHY_ID_BCM5222:
+                                       strcpy(info->phy_name, STR_ID_BCM5222);
+                                       info->phyname_init = 1;
+                                       break;
+                               default:
+                                       strcpy(info->phy_name, "unknown");
+                                       info->phyname_init = 1;
+                                       break;
+                               }
+
+#ifdef ET_DEBUG
+                               printf("PHY @ 0x%x pass %d type ", phyno, pass);
+                               switch (phytype & 0xffffffff) {
+                               case PHY_ID_BCM5222:
+                                       printf(STR_ID_BCM5222);
+                                       break;
+                               default:
+                                       printf("0x%08x\n", phytype);
+                                       break;
+                               }
+#endif
+                       }
+               }
+       }
+       if (phyaddr < 0)
+               printf("No PHY device found.\n");
+
+       return phyaddr;
+}
+#endif                         /* CFG_DISCOVER_PHY */
+
+void mii_init(void) __attribute__ ((weak, alias("__mii_init")));
+
+void __mii_init(void)
+{
+       volatile fecdma_t *fecp;
+       struct fec_info_dma *info;
+       struct eth_device *dev;
+       int miispd = 0, i = 0;
+       u16 autoneg = 0;
+
+       /* retrieve from register structure */
+       dev = eth_get_dev();
+       info = dev->priv;
+
+       fecp = (fecdma_t *) info->miibase;
+
+       fecpin_setclear(dev, 1);
+
+       mii_reset(info);
+
+       /* We use strictly polling mode only */
+       fecp->eimr = 0;
+
+       /* Clear any pending interrupt */
+       fecp->eir = 0xffffffff;
+
+       /* Set MII speed */
+       miispd = (gd->bus_clk / 1000000) / 5;
+       fecp->mscr = miispd << 1;
+
+       info->phy_addr = mii_discover_phy(dev);
+
+#define AUTONEGLINK            (PHY_BMSR_AUTN_COMP | PHY_BMSR_LS)
+       while (i < MCFFEC_TOUT_LOOP) {
+               autoneg = 0;
+               miiphy_read(dev->name, info->phy_addr, PHY_BMSR, &autoneg);
+               i++;
+
+               if ((autoneg & AUTONEGLINK) == AUTONEGLINK)
+                       break;
+
+               udelay(500);
+       }
+       if (i >= MCFFEC_TOUT_LOOP) {
+               printf("Auto Negotiation not complete\n");
+       }
+
+       /* adapt to the half/full speed settings */
+       info->dup_spd = miiphy_duplex(dev->name, info->phy_addr) << 16;
+       info->dup_spd |= miiphy_speed(dev->name, info->phy_addr);
+}
+
+/*****************************************************************************
+ * Read and write a MII PHY register, routines used by MII Utilities
+ *
+ * FIXME: These routines are expected to return 0 on success, but mii_send
+ *       does _not_ return an error code. Maybe 0xFFFF means error, i.e.
+ *       no PHY connected...
+ *       For now always return 0.
+ * FIXME: These routines only work after calling eth_init() at least once!
+ *       Otherwise they hang in mii_send() !!! Sorry!
+ *****************************************************************************/
+
+int mcffec_miiphy_read(char *devname, unsigned char addr, unsigned char reg,
+                      unsigned short *value)
+{
+       short rdreg;            /* register working value */
+
+#ifdef MII_DEBUG
+       printf("miiphy_read(0x%x) @ 0x%x = ", reg, addr);
+#endif
+       rdreg = mii_send(mk_mii_read(addr, reg));
+
+       *value = rdreg;
+
+#ifdef MII_DEBUG
+       printf("0x%04x\n", *value);
+#endif
+
+       return 0;
+}
+
+int mcffec_miiphy_write(char *devname, unsigned char addr, unsigned char reg,
+                       unsigned short value)
+{
+       short rdreg;            /* register working value */
+
+#ifdef MII_DEBUG
+       printf("miiphy_write(0x%x) @ 0x%x = ", reg, addr);
+#endif
+
+       rdreg = mii_send(mk_mii_write(addr, reg, value));
+
+#ifdef MII_DEBUG
+       printf("0x%04x\n", value);
+#endif
+
+       return 0;
+}
+
+#endif                         /* CONFIG_CMD_NET, FEC_ENET & NET_MULTI */
diff --git a/board/freescale/m547xevb/u-boot.lds b/board/freescale/m547xevb/u-boot.lds
new file mode 100644 (file)
index 0000000..c10472a
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * (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
+ */
+
+OUTPUT_ARCH(m68k)
+SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/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      :
+  {
+    /* WARNING - the following is hand-optimized to fit within */
+    /* the sector layout of our flash chips!   XXX FIXME XXX   */
+
+    cpu/mcf547x_8x/start.o             (.text)
+    lib_m68k/traps.o           (.text)
+    lib_m68k/interrupts.o      (.text)
+    common/dlmalloc.o          (.text)
+
+    . = DEFINED(env_offset) ? 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_start = .;
+    *(.got)
+    __got_end = .;
+    _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 = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __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 = .;
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+   . = ALIGN(4);
+   _ebss = .;
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
diff --git a/board/freescale/m548xevb/Makefile b/board/freescale/m548xevb/Makefile
new file mode 100644 (file)
index 0000000..74c2528
--- /dev/null
@@ -0,0 +1,44 @@
+#
+# (C) Copyright 2000-2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  = $(BOARD).o mii.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/freescale/m548xevb/config.mk b/board/freescale/m548xevb/config.mk
new file mode 100644 (file)
index 0000000..fa66b75
--- /dev/null
@@ -0,0 +1,25 @@
+#
+# (C) Copyright 2000-2003
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+# Coldfire contribution by Bernhard Kuhn <bkuhn@metrowerks.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+TEXT_BASE = 0xFF800000
diff --git a/board/freescale/m548xevb/m548xevb.c b/board/freescale/m548xevb/m548xevb.c
new file mode 100644 (file)
index 0000000..0372807
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * (C) Copyright 2000-2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <config.h>
+#include <common.h>
+#include <pci.h>
+#include <asm/immap.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int checkboard(void)
+{
+       puts("Board: ");
+       puts("Freescale FireEngine 5485 EVB\n");
+       return 0;
+};
+
+long int initdram(int board_type)
+{
+       volatile siu_t *siu = (siu_t *) (MMAP_SIU);
+       volatile sdram_t *sdram = (volatile sdram_t *)(MMAP_SDRAM);
+       u32 dramsize, i;
+
+       siu->drv = CFG_SDRAM_DRVSTRENGTH;
+
+       dramsize = CFG_DRAMSZ * 0x100000;
+       for (i = 0x13; i < 0x20; i++) {
+               if (dramsize == (1 << i))
+                       break;
+       }
+       i--;
+       siu->cs0cfg = (CFG_SDRAM_BASE | i);
+
+#ifdef CFG_DRAMSZ1
+       temp = CFG_DRAMSZ1 * 0x100000;
+       for (i = 0x13; i < 0x20; i++) {
+               if (temp == (1 << i))
+                       break;
+       }
+       i--;
+       dramsize += temp;
+       siu->cs1cfg = ((CFG_SDRAM_BASE + temp) | i);
+#endif
+
+       sdram->cfg1 = CFG_SDRAM_CFG1;
+       sdram->cfg2 = CFG_SDRAM_CFG2;
+
+       /* Issue PALL */
+       sdram->ctrl = CFG_SDRAM_CTRL | 2;
+
+       /* Issue LEMR */
+       sdram->mode = CFG_SDRAM_EMOD;
+       sdram->mode = (CFG_SDRAM_MODE | 0x04000000);
+
+       udelay(500);
+
+       /* Issue PALL */
+       sdram->ctrl = (CFG_SDRAM_CTRL | 2);
+
+       /* Perform two refresh cycles */
+       sdram->ctrl = CFG_SDRAM_CTRL | 4;
+       sdram->ctrl = CFG_SDRAM_CTRL | 4;
+
+       sdram->mode = CFG_SDRAM_MODE;
+
+       sdram->ctrl = (CFG_SDRAM_CTRL & ~0x80000000) | 0x10000F00;
+
+       udelay(100);
+
+       return dramsize;
+};
+
+int testdram(void)
+{
+       /* TODO: XXX XXX XXX */
+       printf("DRAM test not implemented!\n");
+
+       return (0);
+}
+
+#if defined(CONFIG_PCI)
+/*
+ * Initialize PCI devices, report devices found.
+ */
+static struct pci_controller hose;
+extern void pci_mcf547x_8x_init(struct pci_controller *hose);
+
+void pci_init_board(void)
+{
+       pci_mcf547x_8x_init(&hose);
+}
+#endif                         /* CONFIG_PCI */
diff --git a/board/freescale/m548xevb/mii.c b/board/freescale/m548xevb/mii.c
new file mode 100644 (file)
index 0000000..5b2683b
--- /dev/null
@@ -0,0 +1,322 @@
+/*
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <config.h>
+#include <net.h>
+
+#include <asm/immap.h>
+#include <asm/fec.h>
+#include <asm/fsl_mcdmafec.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI)
+#undef MII_DEBUG
+#undef ET_DEBUG
+
+int fecpin_setclear(struct eth_device *dev, int setclear)
+{
+       volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO;
+       struct fec_info_dma *info = (struct fec_info_dma *)dev->priv;
+
+       if (setclear) {
+               if (info->iobase == CFG_FEC0_IOBASE)
+                       gpio->par_feci2cirq |= 0xF000;
+               else
+                       gpio->par_feci2cirq |= 0x0FC0;
+       } else {
+               if (info->iobase == CFG_FEC0_IOBASE)
+                       gpio->par_feci2cirq &= 0x0FFF;
+               else
+                       gpio->par_feci2cirq &= 0xF03F;
+       }
+       return 0;
+}
+
+#if defined(CFG_DISCOVER_PHY) || defined(CONFIG_CMD_MII)
+#include <miiphy.h>
+
+/* Make MII read/write commands for the FEC. */
+#define mk_mii_read(ADDR, REG) (0x60020000 | ((ADDR << 23) | (REG & 0x1f) << 18))
+
+#define mk_mii_write(ADDR, REG, VAL)   (0x50020000 | ((ADDR << 23) | (REG & 0x1f) << 18) | (VAL & 0xffff))
+
+/* PHY identification */
+#define PHY_ID_LXT970          0x78100000      /* LXT970 */
+#define PHY_ID_LXT971          0x001378e0      /* LXT971 and 972 */
+#define PHY_ID_82555           0x02a80150      /* Intel 82555 */
+#define PHY_ID_QS6612          0x01814400      /* QS6612 */
+#define PHY_ID_AMD79C784       0x00225610      /* AMD 79C784 */
+#define PHY_ID_LSI80225                0x0016f870      /* LSI 80225 */
+#define PHY_ID_LSI80225B       0x0016f880      /* LSI 80225/B */
+#define PHY_ID_DP83848VV       0x20005C90      /* National 83848 */
+#define PHY_ID_DP83849         0x20005CA2      /* National 82849 */
+#define PHY_ID_BCM5222         0x00406322      /* Broadcom 5222 */
+
+#define STR_ID_LXT970          "LXT970"
+#define STR_ID_LXT971          "LXT971"
+#define STR_ID_82555           "Intel82555"
+#define STR_ID_QS6612          "QS6612"
+#define STR_ID_AMD79C784       "AMD79C784"
+#define STR_ID_LSI80225                "LSI80225"
+#define STR_ID_LSI80225B       "LSI80225/B"
+#define STR_ID_DP83848VV       "N83848"
+#define STR_ID_DP83849         "N83849"
+#define STR_ID_BCM5222         "BCM5222"
+
+/****************************************************************************
+ * mii_init -- Initialize the MII for MII command without ethernet
+ * This function is a subset of eth_init
+ ****************************************************************************
+ */
+void mii_reset(struct fec_info_dma *info)
+{
+       volatile fecdma_t *fecp = (fecdma_t *) (info->miibase);
+       int i;
+
+       fecp->ecr = FEC_ECR_RESET;
+       for (i = 0; (fecp->ecr & FEC_ECR_RESET) && (i < FEC_RESET_DELAY); ++i) {
+               udelay(1);
+       }
+       if (i == FEC_RESET_DELAY) {
+               printf("FEC_RESET_DELAY timeout\n");
+       }
+}
+
+/* send command to phy using mii, wait for result */
+uint mii_send(uint mii_cmd)
+{
+       struct fec_info_dma *info;
+       struct eth_device *dev;
+       volatile fecdma_t *ep;
+       uint mii_reply;
+       int j = 0;
+
+       /* retrieve from register structure */
+       dev = eth_get_dev();
+       info = dev->priv;
+
+       ep = (fecdma_t *) info->miibase;
+
+       ep->mmfr = mii_cmd;     /* command to phy */
+
+       /* wait for mii complete */
+       while (!(ep->eir & FEC_EIR_MII) && (j < MCFFEC_TOUT_LOOP)) {
+               udelay(1);
+               j++;
+       }
+       if (j >= MCFFEC_TOUT_LOOP) {
+               printf("MII not complete\n");
+               return -1;
+       }
+
+       mii_reply = ep->mmfr;   /* result from phy */
+       ep->eir = FEC_EIR_MII;  /* clear MII complete */
+#ifdef ET_DEBUG
+       printf("%s[%d] %s: sent=0x%8.8x, reply=0x%8.8x\n",
+              __FILE__, __LINE__, __FUNCTION__, mii_cmd, mii_reply);
+#endif
+
+       return (mii_reply & 0xffff);    /* data read from phy */
+}
+#endif                         /* CFG_DISCOVER_PHY || CONFIG_CMD_MII */
+
+#if defined(CFG_DISCOVER_PHY)
+int mii_discover_phy(struct eth_device *dev)
+{
+#define MAX_PHY_PASSES 11
+       struct fec_info_dma *info = dev->priv;
+       int phyaddr, pass, temp;
+       uint phyno, phytype;
+
+       if (info->phyname_init) {
+               return info->phy_addr;
+       }
+
+       phyaddr = -1;           /* didn't find a PHY yet */
+       for (pass = 1; pass <= MAX_PHY_PASSES && phyaddr < 0; ++pass) {
+               if (pass > 1) {
+                       /* PHY may need more time to recover from reset.
+                        * The LXT970 needs 50ms typical, no maximum is
+                        * specified, so wait 10ms before try again.
+                        * With 11 passes this gives it 100ms to wake up.
+                        */
+                       udelay(10000);  /* wait 10ms */
+               }
+
+               temp = 0;
+               if (info->index > 0) {
+                       /* Some phy have multiple address, to solve the issue
+                          where phyno keeps starting from 0, check the
+                          previous phy address if both miibase are the same. */
+                       if (info->miibase == (info->next)->miibase) {
+                               temp = (info->next)->phy_addr + 1;
+                       }
+               }
+
+               for (phyno = temp; phyno < 32 && phyaddr < 0; ++phyno) {
+
+                       phytype = mii_send(mk_mii_read(phyno, PHY_PHYIDR1));
+#ifdef ET_DEBUG
+                       printf("PHY type 0x%x pass %d type\n", phytype, pass);
+#endif
+                       if (phytype != 0xffff) {
+                               phyaddr = phyno;
+                               phytype <<= 16;
+                               phytype |=
+                                   mii_send(mk_mii_read(phyno, PHY_PHYIDR2));
+
+                               switch (phytype & 0xffffffff) {
+                               case PHY_ID_BCM5222:
+                                       strcpy(info->phy_name, STR_ID_BCM5222);
+                                       info->phyname_init = 1;
+                                       break;
+                               default:
+                                       strcpy(info->phy_name, "unknown");
+                                       info->phyname_init = 1;
+                                       break;
+                               }
+
+#ifdef ET_DEBUG
+                               printf("PHY @ 0x%x pass %d type ", phyno, pass);
+                               switch (phytype & 0xffffffff) {
+                               case PHY_ID_BCM5222:
+                                       printf(STR_ID_BCM5222);
+                                       break;
+                               default:
+                                       printf("0x%08x\n", phytype);
+                                       break;
+                               }
+#endif
+                       }
+               }
+       }
+       if (phyaddr < 0)
+               printf("No PHY device found.\n");
+
+       return phyaddr;
+}
+#endif                         /* CFG_DISCOVER_PHY */
+
+void mii_init(void) __attribute__ ((weak, alias("__mii_init")));
+
+void __mii_init(void)
+{
+       volatile fecdma_t *fecp;
+       struct fec_info_dma *info;
+       struct eth_device *dev;
+       int miispd = 0, i = 0;
+       u16 autoneg = 0;
+
+       /* retrieve from register structure */
+       dev = eth_get_dev();
+       info = dev->priv;
+
+       fecp = (fecdma_t *) info->miibase;
+
+       fecpin_setclear(dev, 1);
+
+       mii_reset(info);
+
+       /* We use strictly polling mode only */
+       fecp->eimr = 0;
+
+       /* Clear any pending interrupt */
+       fecp->eir = 0xffffffff;
+
+       /* Set MII speed */
+       miispd = (gd->bus_clk / 1000000) / 5;
+       fecp->mscr = miispd << 1;
+
+       info->phy_addr = mii_discover_phy(dev);
+
+#define AUTONEGLINK            (PHY_BMSR_AUTN_COMP | PHY_BMSR_LS)
+       while (i < MCFFEC_TOUT_LOOP) {
+               autoneg = 0;
+               miiphy_read(dev->name, info->phy_addr, PHY_BMSR, &autoneg);
+               i++;
+
+               if ((autoneg & AUTONEGLINK) == AUTONEGLINK)
+                       break;
+
+               udelay(500);
+       }
+       if (i >= MCFFEC_TOUT_LOOP) {
+               printf("Auto Negotiation not complete\n");
+       }
+
+       /* adapt to the half/full speed settings */
+       info->dup_spd = miiphy_duplex(dev->name, info->phy_addr) << 16;
+       info->dup_spd |= miiphy_speed(dev->name, info->phy_addr);
+}
+
+/*****************************************************************************
+ * Read and write a MII PHY register, routines used by MII Utilities
+ *
+ * FIXME: These routines are expected to return 0 on success, but mii_send
+ *       does _not_ return an error code. Maybe 0xFFFF means error, i.e.
+ *       no PHY connected...
+ *       For now always return 0.
+ * FIXME: These routines only work after calling eth_init() at least once!
+ *       Otherwise they hang in mii_send() !!! Sorry!
+ *****************************************************************************/
+
+int mcffec_miiphy_read(char *devname, unsigned char addr, unsigned char reg,
+                      unsigned short *value)
+{
+       short rdreg;            /* register working value */
+
+#ifdef MII_DEBUG
+       printf("miiphy_read(0x%x) @ 0x%x = ", reg, addr);
+#endif
+       rdreg = mii_send(mk_mii_read(addr, reg));
+
+       *value = rdreg;
+
+#ifdef MII_DEBUG
+       printf("0x%04x\n", *value);
+#endif
+
+       return 0;
+}
+
+int mcffec_miiphy_write(char *devname, unsigned char addr, unsigned char reg,
+                       unsigned short value)
+{
+       short rdreg;            /* register working value */
+
+#ifdef MII_DEBUG
+       printf("miiphy_write(0x%x) @ 0x%x = ", reg, addr);
+#endif
+
+       rdreg = mii_send(mk_mii_write(addr, reg, value));
+
+#ifdef MII_DEBUG
+       printf("0x%04x\n", value);
+#endif
+
+       return 0;
+}
+
+#endif                         /* CONFIG_CMD_NET, FEC_ENET & NET_MULTI */
diff --git a/board/freescale/m548xevb/u-boot.lds b/board/freescale/m548xevb/u-boot.lds
new file mode 100644 (file)
index 0000000..c10472a
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * (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
+ */
+
+OUTPUT_ARCH(m68k)
+SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/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      :
+  {
+    /* WARNING - the following is hand-optimized to fit within */
+    /* the sector layout of our flash chips!   XXX FIXME XXX   */
+
+    cpu/mcf547x_8x/start.o             (.text)
+    lib_m68k/traps.o           (.text)
+    lib_m68k/interrupts.o      (.text)
+    common/dlmalloc.o          (.text)
+
+    . = DEFINED(env_offset) ? 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_start = .;
+    *(.got)
+    __got_end = .;
+    _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 = .);
+
+  . = .;
+  __u_boot_cmd_start = .;
+  .u_boot_cmd : { *(.u_boot_cmd) }
+  __u_boot_cmd_end = .;
+
+
+  . = .;
+  __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 = .;
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+   . = ALIGN(4);
+   _ebss = .;
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index 3d72eb7d894d7c723a9c89304e004103e97e13a7..9f4ac8e4131c115d614f2e47ad94c859f40758e7 100644 (file)
@@ -27,6 +27,7 @@
 #include <mpc83xx.h>
 #include <asm/mpc8349_pci.h>
 #include <i2c.h>
+#include <spi.h>
 #include <spd.h>
 #include <miiphy.h>
 #if defined(CONFIG_SPD_EEPROM)
@@ -251,6 +252,34 @@ void sdram_init(void)
 }
 #endif
 
+/*
+ * The following are used to control the SPI chip selects for the SPI command.
+ */
+#ifdef CONFIG_HARD_SPI
+
+#define SPI_CS_MASK    0x80000000
+
+void spi_eeprom_chipsel(int cs)
+{
+       volatile gpio83xx_t *iopd = &((immap_t *)CFG_IMMR)->gpio[0];
+
+       if (cs)
+               iopd->dat &= ~SPI_CS_MASK;
+       else
+               iopd->dat |=  SPI_CS_MASK;
+}
+
+/*
+ * The SPI command uses this table of functions for controlling the SPI
+ * chip selects.
+ */
+spi_chipsel_type spi_chipsel[] = {
+       spi_eeprom_chipsel,
+};
+int spi_chipsel_cnt = sizeof(spi_chipsel) / sizeof(spi_chipsel[0]);
+
+#endif /* CONFIG_HARD_SPI */
+
 #if defined(CONFIG_OF_BOARD_SETUP)
 void ft_board_setup(void *blob, bd_t *bd)
 {
index 29136508f582978c220d00246adcd4034c1fe24d..be243885be641cdc9af3bb01aa39535c368fcef3 100644 (file)
@@ -25,9 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o
-SOBJS  := init.o
-#SOBJS :=
+COBJS  := $(BOARD).o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/freescale/mpc8540ads/init.S b/board/freescale/mpc8540ads/init.S
deleted file mode 100644 (file)
index 74d71c6..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Copyright 2004 Freescale Semiconductor.
- * Copyright (C) 2002,2003, Motorola Inc.
- * Xianghua Xiao <X.Xiao@motorola.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long 13
-
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-#error("Update the number of table entries in tlb1_entry")
-#endif
-
-       /*
-        * TLB0         16K     Cacheable, non-guarded
-        * 0xd001_0000  16K     Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4*1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4*1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8*1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8*1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12*1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12*1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 0:       16M     Non-cacheable, guarded
-        * 0xff000000   16M     FLASH
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 1:       256M    Non-cacheable, guarded
-        * 0x80000000   256M    PCI1 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 2:       256M    Non-cacheable, guarded
-        * 0x90000000   256M    PCI1 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3:       256M    Non-cacheable, guarded
-        * 0xc0000000   256M    Rapid IO MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 4:       256M    Non-cacheable, guarded
-        * 0xd0000000   256M    Rapid IO MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 5:       64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  16M     PCI1 IO
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 6:       64M     Cacheable, non-guarded
-        * 0xf000_0000  64M     LBC SDRAM
-        */
-       .long FSL_BOOKE_MAS0(1, 6, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 7:       16K     Non-cacheable, guarded
-        * 0xf8000000   16K     BCSR registers
-        */
-       .long FSL_BOOKE_MAS0(1, 7, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16K)
-       .long FSL_BOOKE_MAS2(CFG_BCSR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_BCSR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-#if !defined(CONFIG_SPD_EEPROM)
-       /*
-        * TLB 8, 9:    128M    DDR
-        * 0x00000000   64M     DDR System memory
-        * 0x04000000   64M     DDR System memory
-        * Without SPD EEPROM configured DDR, this must be setup manually.
-        * Make sure the TLB count at the top of this table is correct.
-        * Likely it needs to be increased by two for these entries.
-        */
-#error("Update the number of table entries in tlb1_entry")
-       .long FSL_BOOKE_MAS0(1, 8, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1, 9, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE + 0x4000000, 0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE + 0x4000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#endif
-
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000     0x7fff_ffff     DDR                     2G
- * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
- * 0xc000_0000     0xdfff_ffff     RapidIO                 512M
- * 0xe000_0000     0xe000_ffff     CCSR                    1M
- * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M
- * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
- * 0xf800_0000     0xf80f_ffff     BCSR                    1M
- * 0xff00_0000     0xffff_ffff     FLASH (boot bank)       16M
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- */
-
-#if !defined(CONFIG_SPD_EEPROM)
-#define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR0 (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M))
-#else
-#define LAWBAR0 0
-#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-#endif
-
-#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-/*
- * This is not so much the SDRAM map as it is the whole localbus map.
- */
-#define LAWBAR2 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
-
-#define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff)
-#define LAWAR3 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_1M))
-
-/*
- * Rapid IO at 0xc000_0000 for 512 M
- */
-#define LAWBAR4 ((CFG_RIO_MEM_BASE>>12) & 0xfffff)
-#define LAWAR4 (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-       .long 0x05
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       .long LAWBAR4,LAWAR4
-       entry_end
diff --git a/board/freescale/mpc8540ads/law.c b/board/freescale/mpc8540ads/law.c
new file mode 100644 (file)
index 0000000..785576a
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000     0x7fff_ffff     DDR                     2G
+ * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
+ * 0xc000_0000     0xdfff_ffff     RapidIO                 512M
+ * 0xe000_0000     0xe000_ffff     CCSR                    1M
+ * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M
+ * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
+ * 0xf800_0000     0xf80f_ffff     BCSR                    1M
+ * 0xff00_0000     0xffff_ffff     FLASH (boot bank)       16M
+ *
+ * Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ */
+
+struct law_entry law_table[] = {
+#ifndef CONFIG_SPD_EEPROM
+       SET_LAW_ENTRY(1, CFG_DDR_SDRAM_BASE, LAW_SIZE_128M, LAW_TRGT_IF_DDR),
+#endif
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI),
+       /* This is not so much the SDRAM map as it is the whole localbus map. */
+       SET_LAW_ENTRY(3, CFG_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+       SET_LAW_ENTRY(4, CFG_PCI1_IO_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(5, CFG_RIO_MEM_BASE, LAWAR_SIZE_512M, LAW_TRGT_IF_RIO),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/mpc8540ads/tlb.c b/board/freescale/mpc8540ads/tlb.c
new file mode 100644 (file)
index 0000000..3eaff01
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /*
+        * TLB 0:       16M     Non-cacheable, guarded
+        * 0xff000000   16M     FLASH
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_16M, 1),
+
+       /*
+        * TLB 1:       256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        * 0x90000000   256M    PCI1 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS + 0x10000000, CFG_PCI1_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        * 0xc0000000   256M    Rapid IO MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE, CFG_RIO_MEM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 4:       256M    Non-cacheable, guarded
+        * 0xd0000000   256M    Rapid IO MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE + 0x10000000, CFG_RIO_MEM_BASE + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 5:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  16M     PCI1 IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 6:       64M     Cacheable, non-guarded
+        * 0xf000_0000  64M     LBC SDRAM
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_SDRAM_BASE, CFG_LBC_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 6, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 7:       16K     Non-cacheable, guarded
+        * 0xf8000000   16K     BCSR registers
+        */
+       SET_TLB_ENTRY(1, CFG_BCSR, CFG_BCSR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 7, BOOKE_PAGESZ_16K, 1),
+
+#if !defined(CONFIG_SPD_EEPROM)
+       /*
+        * TLB 8, 9:    128M    DDR
+        * 0x00000000   64M     DDR System memory
+        * 0x04000000   64M     DDR System memory
+        * Without SPD EEPROM configured DDR, this must be setup manually.
+        * Make sure the TLB count at the top of this table is correct.
+        * Likely it needs to be increased by two for these entries.
+        */
+#error("Update the number of table entries in tlb1_entry")
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE, CFG_DDR_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 8, BOOKE_PAGESZ_64M, 1),
+
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE + 0x4000000, CFG_DDR_SDRAM_BASE + 0x4000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 9, BOOKE_PAGESZ_64M, 1),
+#endif
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index bc0db5514185456249e208c08fd4194e8c8297f9..86f8f13599e04a38b27ed3aad7c83f189ec8ce28 100644 (file)
@@ -35,7 +35,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/freescale/mpc8540ads/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -65,7 +64,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/freescale/mpc8540ads/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
index 7f530988505d39b324834a910f5562d0faf1dad1..d1a585ad623b44527101f01a9386634d8b4bcaf8 100644 (file)
@@ -29,14 +29,12 @@ endif
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o \
+COBJS  := $(BOARD).o law.o tlb.o \
           ../common/cadmus.o \
           ../common/eeprom.o \
           ../common/ft_board.o \
           ../common/via.o
 
-SOBJS  := init.o
-
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
diff --git a/board/freescale/mpc8541cds/init.S b/board/freescale/mpc8541cds/init.S
deleted file mode 100644 (file)
index 8c8c087..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright 2004 Freescale Semiconductor.
- * Copyright 2002,2003, Motorola Inc.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long 13
-
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-#error("Update the number of table entries in tlb1_entry")
-#endif
-
-       /*
-        * TLB0         16K     Cacheable, non-guarded
-        * 0xd001_0000  16K     Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-
-       /*
-        * TLB 0:       16M     Non-cacheable, guarded
-        * 0xff000000   16M     FLASH
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 1:       256M    Non-cacheable, guarded
-        * 0x80000000   256M    PCI1 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 2:       256M    Non-cacheable, guarded
-        * 0x90000000   256M    PCI1 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3:       256M    Non-cacheable, guarded
-        * 0xa0000000   256M    PCI2 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 4:       256M    Non-cacheable, guarded
-        * 0xb0000000   256M    PCI2 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 5:       64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  16M     PCI1 IO
-        * 0xe300_0000  16M     PCI2 IO
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 6:       64M     Cacheable, non-guarded
-        * 0xf000_0000  64M     LBC SDRAM
-        */
-       .long FSL_BOOKE_MAS0(1, 6, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 7:       1M      Non-cacheable, guarded
-        * 0xf8000000   1M      CADMUS registers
-        */
-       .long FSL_BOOKE_MAS0(1, 7, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(CADMUS_BASE_ADDR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CADMUS_BASE_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000     0x7fff_ffff     DDR                     2G
- * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
- * 0xa000_0000     0xbfff_ffff     PCI2 MEM                512M
- * 0xe000_0000     0xe000_ffff     CCSR                    1M
- * 0xe200_0000     0xe20f_ffff     PCI1 IO                 1M
- * 0xe210_0000     0xe21f_ffff     PCI2 IO                 1M
- * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
- * 0xf800_0000     0xf80f_ffff     NVRAM/CADMUS (*)        1M
- * 0xff00_0000     0xff7f_ffff     FLASH (2nd bank)        8M
- * 0xff80_0000     0xffff_ffff     FLASH (boot bank)       8M
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- *
- * The defines below are 1-off of the actual LAWAR0 usage.
- * So LAWAR3 define uses the LAWAR4 register in the ECM.
- */
-
-#define LAWBAR0 0
-#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-
-#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-#define LAWBAR2 ((CFG_PCI2_MEM_BASE>>12) & 0xfffff)
-#define LAWAR2         (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-#define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff)
-#define LAWAR3         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_1M))
-
-#define LAWBAR4 ((CFG_PCI2_IO_PHYS>>12) & 0xfffff)
-#define LAWAR4         (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_1M))
-
-/* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
-#define LAWBAR5 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR5         (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-
-law_entry:
-       entry_start
-       .long 6
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       .long LAWBAR4,LAWAR4,LAWBAR5,LAWAR5
-       entry_end
diff --git a/board/freescale/mpc8541cds/law.c b/board/freescale/mpc8541cds/law.c
new file mode 100644 (file)
index 0000000..0ac223c
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000     0x7fff_ffff     DDR                     2G
+ * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
+ * 0xa000_0000     0xbfff_ffff     PCI2 MEM                512M
+ * 0xe000_0000     0xe000_ffff     CCSR                    1M
+ * 0xe200_0000     0xe20f_ffff     PCI1 IO                 1M
+ * 0xe210_0000     0xe21f_ffff     PCI2 IO                 1M
+ * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
+ * 0xf800_0000     0xf80f_ffff     NVRAM/CADMUS (*)        1M
+ * 0xff00_0000     0xff7f_ffff     FLASH (2nd bank)        8M
+ * 0xff80_0000     0xffff_ffff     FLASH (boot bank)       8M
+ *
+ * Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ */
+
+struct law_entry law_table[] = {
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(3, CFG_PCI2_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI_2),
+       SET_LAW_ENTRY(4, CFG_PCI1_IO_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(5, CFG_PCI2_IO_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_PCI_2),
+       /* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
+       SET_LAW_ENTRY(6, CFG_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/mpc8541cds/tlb.c b/board/freescale/mpc8541cds/tlb.c
new file mode 100644 (file)
index 0000000..92f759b
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /*
+        * TLB 0:       16M     Non-cacheable, guarded
+        * 0xff000000   16M     FLASH
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_16M, 1),
+
+       /*
+        * TLB 1:       256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        * 0x90000000   256M    PCI1 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS + 0x10000000, CFG_PCI1_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        * 0xa0000000   256M    PCI2 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI2_MEM_PHYS, CFG_PCI2_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 4:       256M    Non-cacheable, guarded
+        * 0xb0000000   256M    PCI2 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI2_MEM_PHYS + 0x10000000, CFG_PCI2_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 5:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  16M     PCI1 IO
+        * 0xe300_0000  16M     PCI2 IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 6:       64M     Cacheable, non-guarded
+        * 0xf000_0000  64M     LBC SDRAM
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_SDRAM_BASE, CFG_LBC_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 6, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 7:       1M      Non-cacheable, guarded
+        * 0xf8000000   1M      CADMUS registers
+        */
+       SET_TLB_ENTRY(1, CADMUS_BASE_ADDR, CADMUS_BASE_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 7, BOOKE_PAGESZ_1M, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 1e490d04a7e6261a7535e9ea388dbea95cb2d6e8..1cbadf22352cfcce3f92f09b647a31be313bfe48 100644 (file)
@@ -34,7 +34,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/freescale/mpc8541cds/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -64,7 +63,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/freescale/mpc8541cds/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
index c6f159ac8157d2b71cd9a74f91ed7504329eec56..53368b22b89fc4b0eec26b6814fddaba6a7dc1df 100644 (file)
@@ -26,9 +26,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o
-
-SOBJS  := init.o
+COBJS  := $(BOARD).o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/freescale/mpc8544ds/init.S b/board/freescale/mpc8544ds/init.S
deleted file mode 100644 (file)
index 544dc07..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright 2007 Freescale Semiconductor, Inc.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long (2f-1f)/16
-1:
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB0         16K     Cacheable, guarded
-        * Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, (MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, (MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, (MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, (MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-
-       /*
-        * TLB 0:       64M     Non-cacheable, guarded
-        * 0xfc000000   64M     Covers FLASH at 0xFE800000 and 0xFF800000
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_BOOT_BLOCK, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_BOOT_BLOCK, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 1:       1G      Non-cacheable, guarded
-        * 0x80000000   1G      PCIE  8,9,a,b
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G)
-       .long FSL_BOOKE_MAS2(CFG_PCIE_PHYS, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCIE_PHYS, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 2:       256M    Non-cacheable, guarded
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI_PHYS, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI_PHYS, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3:       256M    Non-cacheable, guarded
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI_PHYS + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI_PHYS + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 4:       64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe100_0000  255M    PCI IO range
-        */
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-#ifdef CFG_LBC_CACHE_BASE
-       /*
-        * TLB 5:       64M     Cacheable, non-guarded
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_CACHE_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_LBC_CACHE_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#endif
-       /*
-        * TLB 6:       64M     Non-cacheable, guarded
-        * 0xf8000000   64M     PIXIS 0xF8000000 - 0xFBFFFFFF
-        */
-       .long FSL_BOOKE_MAS0(1, 6, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_NONCACHE_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_LBC_NONCACHE_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-2:
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- *
- * LAW 0 is reserved for boot mapping
- */
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-
-       .long (4f-3f)/8
-3:
-       .long   0
-       .long   (LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN
-
-       .long   (CFG_PCI1_MEM_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M)
-
-       .long   (CFG_PCI1_IO_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_64K)
-
-       .long   (CFG_LBC_CACHE_BASE>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M)
-
-       .long   (CFG_PCIE1_MEM_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCIE1 | (LAWAR_SIZE & LAWAR_SIZE_256M)
-
-       .long   (CFG_PCIE1_IO_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCIE1 | (LAWAR_SIZE & LAWAR_SIZE_64K)
-
-       .long   (CFG_PCIE2_MEM_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCIE2 | (LAWAR_SIZE & LAWAR_SIZE_512M)
-
-       .long   (CFG_PCIE2_IO_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCIE2 | (LAWAR_SIZE & LAWAR_SIZE_64K)
-
-       /* contains both PCIE3 MEM & IO space */
-       .long   (CFG_PCIE3_MEM_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCIE3 | (LAWAR_SIZE & LAWAR_SIZE_4M)
-4:
-       entry_end
diff --git a/board/freescale/mpc8544ds/law.c b/board/freescale/mpc8544ds/law.c
new file mode 100644 (file)
index 0000000..433e509
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+struct law_entry law_table[] = {
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(3, CFG_PCI1_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(4, CFG_LBC_CACHE_BASE, LAWAR_SIZE_256M, LAW_TRGT_IF_LBC),
+       SET_LAW_ENTRY(5, CFG_PCIE1_MEM_PHYS, LAWAR_SIZE_256M, LAW_TRGT_IF_PCIE_1),
+       SET_LAW_ENTRY(6, CFG_PCIE1_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCIE_1),
+       SET_LAW_ENTRY(7, CFG_PCIE2_MEM_PHYS, LAWAR_SIZE_512M, LAW_TRGT_IF_PCIE_2),
+       SET_LAW_ENTRY(8, CFG_PCIE2_IO_PHYS, LAW_SIZE_64K, LAW_TRGT_IF_PCIE_2),
+       /* contains both PCIE3 MEM & IO space */
+       SET_LAW_ENTRY(9, CFG_PCIE3_MEM_PHYS, LAW_SIZE_4M, LAW_TRGT_IF_PCIE_3),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/mpc8544ds/tlb.c b/board/freescale/mpc8544ds/tlb.c
new file mode 100644 (file)
index 0000000..34cfb38
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       /*
+        * TLB 0:       64M     Non-cacheable, guarded
+        * 0xfc000000   64M     Covers FLASH at 0xFE800000 and 0xFF800000
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, CFG_BOOT_BLOCK, CFG_BOOT_BLOCK,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_64M, 1),
+       /*
+        * TLB 1:       1G      Non-cacheable, guarded
+        * 0x80000000   1G      PCIE  8,9,a,b
+        */
+       SET_TLB_ENTRY(1, CFG_PCIE_PHYS, CFG_PCIE_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_1G, 1),
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        */
+       SET_TLB_ENTRY(1, CFG_PCI_PHYS, CFG_PCI_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        */
+       SET_TLB_ENTRY(1, CFG_PCI_PHYS + 0x10000000, CFG_PCI_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 4:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe100_0000  255M    PCI IO range
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_64M, 1),
+
+#ifdef CFG_LBC_CACHE_BASE
+       /*
+        * TLB 5:       64M     Cacheable, non-guarded
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_CACHE_BASE, CFG_LBC_CACHE_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+#endif
+       /*
+        * TLB 6:       64M     Non-cacheable, guarded
+        * 0xf8000000   64M     PIXIS 0xF8000000 - 0xFBFFFFFF
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_NONCACHE_BASE, CFG_LBC_NONCACHE_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 6, BOOKE_PAGESZ_64M, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 66bd4b6dfce1264c89e78b5da953c402f76ce2f1..17db8c0cc8b6df9208cd873072dc52a3f194dbc5 100644 (file)
@@ -34,7 +34,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/freescale/mpc8544ds/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -64,7 +63,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/freescale/mpc8544ds/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
index 7f530988505d39b324834a910f5562d0faf1dad1..d1a585ad623b44527101f01a9386634d8b4bcaf8 100644 (file)
@@ -29,14 +29,12 @@ endif
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o \
+COBJS  := $(BOARD).o law.o tlb.o \
           ../common/cadmus.o \
           ../common/eeprom.o \
           ../common/ft_board.o \
           ../common/via.o
 
-SOBJS  := init.o
-
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
diff --git a/board/freescale/mpc8548cds/init.S b/board/freescale/mpc8548cds/init.S
deleted file mode 100644 (file)
index ed0fc44..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright 2004, 2007 Freescale Semiconductor.
- * Copyright 2002,2003, Motorola Inc.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long (2f-1f)/16
-
-1:
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-#error("Update the number of table entries in tlb1_entry")
-#endif
-
-       /*
-        * TLB0         16K     Cacheable, guarded
-        * Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, (MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, (MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, (MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, (MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-
-       /*
-        * TLB 0:       16M     Non-cacheable, guarded
-        * 0xff000000   16M     FLASH
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
-       .long FSL_BOOKE_MAS2(CFG_BOOT_BLOCK, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_BOOT_BLOCK, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 1:       1G      Non-cacheable, guarded
-        * 0x80000000   1G      PCI1/PCIE  8,9,a,b
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G)
-       .long FSL_BOOKE_MAS2(CFG_PCI_PHYS, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI_PHYS, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-#ifdef CFG_RIO_MEM_PHYS
-       /*
-        * TLB 2:       256M    Non-cacheable, guarded
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_PHYS, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_PHYS,  0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3:       256M    Non-cacheable, guarded
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_PHYS + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_PHYS + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#endif
-       /*
-        * TLB 5:       64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  1M      PCI1 IO
-        * 0xe210_0000  1M      PCI2 IO
-        * 0xe300_0000  1M      PCIe IO
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 6:       64M     Cacheable, non-guarded
-        * 0xf000_0000  64M     LBC SDRAM
-        */
-       .long FSL_BOOKE_MAS0(1, 6, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_CACHE_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_LBC_CACHE_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 7:       64M     Non-cacheable, guarded
-        * 0xf8000000   64M     CADMUS registers, relocated L2SRAM
-        */
-       .long FSL_BOOKE_MAS0(1, 7, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_NONCACHE_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_LBC_NONCACHE_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-2:
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000     0x7fff_ffff     DDR                     2G
- * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
- * 0xa000_0000     0xbfff_ffff     PCIe MEM                512M
- * 0xc000_0000     0xdfff_ffff     RapidIO                 512M
- * 0xe000_0000     0xe000_ffff     CCSR                    1M
- * 0xe200_0000     0xe10f_ffff     PCI1 IO                 1M
- * 0xe280_0000     0xe20f_ffff     PCI2 IO                 1M
- * 0xe300_0000     0xe30f_ffff     PCIe IO                 1M
- * 0xf000_0000     0xf3ff_ffff     SDRAM                   64M
- * 0xf800_0000     0xf80f_ffff     NVRAM/CADMUS (*)        1M
- * 0xff00_0000     0xff7f_ffff     FLASH (2nd bank)        8M
- * 0xff80_0000     0xffff_ffff     FLASH (boot bank)       8M
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- *
- * LAW 0 is reserved for boot mapping
- */
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-
-       .long (4f-3f)/8
-3:
-       .long  0
-       .long  (LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN
-
-#ifdef CFG_PCI1_MEM_PHYS
-       .long   (CFG_PCI1_MEM_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M)
-
-       .long   (CFG_PCI1_IO_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_1M)
-#endif
-
-#ifdef CFG_PCI2_MEM_PHYS
-       .long   (CFG_PCI2_MEM_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M)
-
-       .long   (CFG_PCI2_IO_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_1M)
-#endif
-
-#ifdef CFG_PCIE1_MEM_PHYS
-       .long   (CFG_PCIE1_MEM_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCIE1 | (LAWAR_SIZE & LAWAR_SIZE_512M)
-
-       .long   (CFG_PCIE1_IO_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_PCIE1 | (LAWAR_SIZE & LAWAR_SIZE_1M)
-#endif
-
-       /* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
-       .long   (CFG_LBC_CACHE_BASE>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M)
-
-#ifdef CFG_RIO_MEM_PHYS
-       .long   (CFG_RIO_MEM_PHYS>>12) & 0xfffff
-       .long   LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M)
-#endif
-4:
-       entry_end
diff --git a/board/freescale/mpc8548cds/law.c b/board/freescale/mpc8548cds/law.c
new file mode 100644 (file)
index 0000000..0ee53e2
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000     0x7fff_ffff     DDR                     2G
+ * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
+ * 0xa000_0000     0xbfff_ffff     PCIe MEM                512M
+ * 0xc000_0000     0xdfff_ffff     RapidIO                 512M
+ * 0xe000_0000     0xe000_ffff     CCSR                    1M
+ * 0xe200_0000     0xe10f_ffff     PCI1 IO                 1M
+ * 0xe280_0000     0xe20f_ffff     PCI2 IO                 1M
+ * 0xe300_0000     0xe30f_ffff     PCIe IO                 1M
+ * 0xf000_0000     0xf3ff_ffff     SDRAM                   64M
+ * 0xf800_0000     0xf80f_ffff     NVRAM/CADMUS (*)        1M
+ * 0xff00_0000     0xff7f_ffff     FLASH (2nd bank)        8M
+ * 0xff80_0000     0xffff_ffff     FLASH (boot bank)       8M
+ *
+ * Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ *
+ * LAW 0 is reserved for boot mapping
+ */
+
+struct law_entry law_table[] = {
+#ifdef CFG_PCI1_MEM_PHYS
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(3, CFG_PCI1_IO_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_PCI),
+#endif
+#ifdef CFG_PCI2_MEM_PHYS
+       SET_LAW_ENTRY(4, CFG_PCI2_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI_2),
+       SET_LAW_ENTRY(5, CFG_PCI2_IO_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_PCI_2),
+#endif
+#ifdef CFG_PCIE1_MEM_PHYS
+       SET_LAW_ENTRY(6, CFG_PCIE1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCIE_1),
+       SET_LAW_ENTRY(7, CFG_PCIE1_IO_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_PCIE_1),
+#endif
+       /* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
+       SET_LAW_ENTRY(8, CFG_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+#ifdef CFG_RIO_MEM_PHYS
+       SET_LAW_ENTRY(9, CFG_RIO_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_RIO),
+#endif
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/mpc8548cds/tlb.c b/board/freescale/mpc8548cds/tlb.c
new file mode 100644 (file)
index 0000000..b21f71b
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /*
+        * TLB 0:       16M     Non-cacheable, guarded
+        * 0xff000000   16M     FLASH
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, CFG_BOOT_BLOCK, CFG_BOOT_BLOCK,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_16M, 1),
+
+       /*
+        * TLB 1:       1G      Non-cacheable, guarded
+        * 0x80000000   1G      PCI1/PCIE  8,9,a,b
+        */
+       SET_TLB_ENTRY(1, CFG_PCI_PHYS, CFG_PCI_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_1G, 1),
+
+#ifdef CFG_RIO_MEM_PHYS
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE, CFG_RIO_MEM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE + 0x10000000, CFG_RIO_MEM_BASE + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+#endif
+       /*
+        * TLB 5:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  1M      PCI1 IO
+        * 0xe210_0000  1M      PCI2 IO
+        * 0xe300_0000  1M      PCIe IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 6:       64M     Cacheable, non-guarded
+        * 0xf000_0000  64M     LBC SDRAM
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_CACHE_BASE, CFG_LBC_CACHE_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 6, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 7:       64M     Non-cacheable, guarded
+        * 0xf8000000   64M     CADMUS registers, relocated L2SRAM
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_NONCACHE_BASE, CFG_LBC_NONCACHE_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 7, BOOKE_PAGESZ_64M, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index acf25e344bf36d03e05b7348694ecdb1053870b2..d701096f1d2ca2c5a8655c8140d34500bf3e0813 100644 (file)
@@ -34,7 +34,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/freescale/mpc8548cds/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -64,7 +63,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/freescale/mpc8548cds/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
index 7f530988505d39b324834a910f5562d0faf1dad1..d1a585ad623b44527101f01a9386634d8b4bcaf8 100644 (file)
@@ -29,14 +29,12 @@ endif
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o \
+COBJS  := $(BOARD).o law.o tlb.o \
           ../common/cadmus.o \
           ../common/eeprom.o \
           ../common/ft_board.o \
           ../common/via.o
 
-SOBJS  := init.o
-
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
diff --git a/board/freescale/mpc8555cds/init.S b/board/freescale/mpc8555cds/init.S
deleted file mode 100644 (file)
index 8c8c087..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright 2004 Freescale Semiconductor.
- * Copyright 2002,2003, Motorola Inc.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long 13
-
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-#error("Update the number of table entries in tlb1_entry")
-#endif
-
-       /*
-        * TLB0         16K     Cacheable, non-guarded
-        * 0xd001_0000  16K     Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-
-       /*
-        * TLB 0:       16M     Non-cacheable, guarded
-        * 0xff000000   16M     FLASH
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 1:       256M    Non-cacheable, guarded
-        * 0x80000000   256M    PCI1 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 2:       256M    Non-cacheable, guarded
-        * 0x90000000   256M    PCI1 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3:       256M    Non-cacheable, guarded
-        * 0xa0000000   256M    PCI2 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 4:       256M    Non-cacheable, guarded
-        * 0xb0000000   256M    PCI2 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 5:       64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  16M     PCI1 IO
-        * 0xe300_0000  16M     PCI2 IO
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 6:       64M     Cacheable, non-guarded
-        * 0xf000_0000  64M     LBC SDRAM
-        */
-       .long FSL_BOOKE_MAS0(1, 6, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 7:       1M      Non-cacheable, guarded
-        * 0xf8000000   1M      CADMUS registers
-        */
-       .long FSL_BOOKE_MAS0(1, 7, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(CADMUS_BASE_ADDR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CADMUS_BASE_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000     0x7fff_ffff     DDR                     2G
- * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
- * 0xa000_0000     0xbfff_ffff     PCI2 MEM                512M
- * 0xe000_0000     0xe000_ffff     CCSR                    1M
- * 0xe200_0000     0xe20f_ffff     PCI1 IO                 1M
- * 0xe210_0000     0xe21f_ffff     PCI2 IO                 1M
- * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
- * 0xf800_0000     0xf80f_ffff     NVRAM/CADMUS (*)        1M
- * 0xff00_0000     0xff7f_ffff     FLASH (2nd bank)        8M
- * 0xff80_0000     0xffff_ffff     FLASH (boot bank)       8M
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- *
- * The defines below are 1-off of the actual LAWAR0 usage.
- * So LAWAR3 define uses the LAWAR4 register in the ECM.
- */
-
-#define LAWBAR0 0
-#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-
-#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-#define LAWBAR2 ((CFG_PCI2_MEM_BASE>>12) & 0xfffff)
-#define LAWAR2         (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-#define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff)
-#define LAWAR3         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_1M))
-
-#define LAWBAR4 ((CFG_PCI2_IO_PHYS>>12) & 0xfffff)
-#define LAWAR4         (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_1M))
-
-/* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
-#define LAWBAR5 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR5         (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-
-law_entry:
-       entry_start
-       .long 6
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       .long LAWBAR4,LAWAR4,LAWBAR5,LAWAR5
-       entry_end
diff --git a/board/freescale/mpc8555cds/law.c b/board/freescale/mpc8555cds/law.c
new file mode 100644 (file)
index 0000000..0ac223c
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000     0x7fff_ffff     DDR                     2G
+ * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
+ * 0xa000_0000     0xbfff_ffff     PCI2 MEM                512M
+ * 0xe000_0000     0xe000_ffff     CCSR                    1M
+ * 0xe200_0000     0xe20f_ffff     PCI1 IO                 1M
+ * 0xe210_0000     0xe21f_ffff     PCI2 IO                 1M
+ * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
+ * 0xf800_0000     0xf80f_ffff     NVRAM/CADMUS (*)        1M
+ * 0xff00_0000     0xff7f_ffff     FLASH (2nd bank)        8M
+ * 0xff80_0000     0xffff_ffff     FLASH (boot bank)       8M
+ *
+ * Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ */
+
+struct law_entry law_table[] = {
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(3, CFG_PCI2_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI_2),
+       SET_LAW_ENTRY(4, CFG_PCI1_IO_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(5, CFG_PCI2_IO_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_PCI_2),
+       /* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
+       SET_LAW_ENTRY(6, CFG_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/mpc8555cds/tlb.c b/board/freescale/mpc8555cds/tlb.c
new file mode 100644 (file)
index 0000000..92f759b
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /*
+        * TLB 0:       16M     Non-cacheable, guarded
+        * 0xff000000   16M     FLASH
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_16M, 1),
+
+       /*
+        * TLB 1:       256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        * 0x90000000   256M    PCI1 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS + 0x10000000, CFG_PCI1_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        * 0xa0000000   256M    PCI2 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI2_MEM_PHYS, CFG_PCI2_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 4:       256M    Non-cacheable, guarded
+        * 0xb0000000   256M    PCI2 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI2_MEM_PHYS + 0x10000000, CFG_PCI2_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 5:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  16M     PCI1 IO
+        * 0xe300_0000  16M     PCI2 IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 6:       64M     Cacheable, non-guarded
+        * 0xf000_0000  64M     LBC SDRAM
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_SDRAM_BASE, CFG_LBC_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 6, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 7:       1M      Non-cacheable, guarded
+        * 0xf8000000   1M      CADMUS registers
+        */
+       SET_TLB_ENTRY(1, CADMUS_BASE_ADDR, CADMUS_BASE_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 7, BOOKE_PAGESZ_1M, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index e9fa51ea69af58e5376d03a4fd614fc8f8a046c4..1cbadf22352cfcce3f92f09b647a31be313bfe48 100644 (file)
@@ -34,7 +34,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/freescale/mpc8555cds/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -64,7 +63,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/freescale/mpc8555cds/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
index 29136508f582978c220d00246adcd4034c1fe24d..be243885be641cdc9af3bb01aa39535c368fcef3 100644 (file)
@@ -25,9 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o
-SOBJS  := init.o
-#SOBJS :=
+COBJS  := $(BOARD).o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/freescale/mpc8560ads/init.S b/board/freescale/mpc8560ads/init.S
deleted file mode 100644 (file)
index 37fd0c6..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-/*
- * Copyright 2004 Freescale Semiconductor.
- * Copyright (C) 2002,2003, Motorola Inc.
- * Xianghua Xiao <X.Xiao@motorola.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long 13
-
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-#error("Update the number of table entries in tlb1_entry")
-#endif
-
-       /*
-        * TLB0         16K     Cacheable, non-guarded
-        * 0xd001_0000  16K     Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-
-       /*
-        * TLB 0:       16M     Non-cacheable, guarded
-        * 0xff000000   16M     FLASH
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 1:       256M    Non-cacheable, guarded
-        * 0x80000000   256M    PCI1 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 2:       256M    Non-cacheable, guarded
-        * 0x90000000   256M    PCI1 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3:       256M    Non-cacheable, guarded
-        * 0xc0000000   256M    Rapid IO MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 4:       256M    Non-cacheable, guarded
-        * 0xd0000000   256M    Rapid IO MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 5:       64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  16M     PCI1 IO
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 6:       64M     Cacheable, non-guarded
-        * 0xf000_0000  64M     LBC SDRAM
-        */
-       .long FSL_BOOKE_MAS0(1, 6, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 7:       16K     Non-cacheable, guarded
-        * 0xf8000000   16K     BCSR registers
-        */
-       .long FSL_BOOKE_MAS0(1, 7, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16K)
-       .long FSL_BOOKE_MAS2(CFG_BCSR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_BCSR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-#if !defined(CONFIG_SPD_EEPROM)
-       /*
-        * TLB 8, 9:    128M    DDR
-        * 0x00000000   64M     DDR System memory
-        * 0x04000000   64M     DDR System memory
-        * Without SPD EEPROM configured DDR, this must be setup manually.
-        * Make sure the TLB count at the top of this table is correct.
-        * Likely it needs to be increased by two for these entries.
-        */
-#error("Update the number of table entries in tlb1_entry")
-       .long FSL_BOOKE_MAS0(1, 8, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1, 9, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE + 0x4000000, 0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE + 0x4000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#endif
-
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000     0x7fff_ffff     DDR                     2G
- * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
- * 0xc000_0000     0xdfff_ffff     RapidIO                 512M
- * 0xe000_0000     0xe000_ffff     CCSR                    1M
- * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M
- * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
- * 0xf800_0000     0xf80f_ffff     BCSR                    1M
- * 0xff00_0000     0xffff_ffff     FLASH (boot bank)       16M
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- */
-
-#if !defined(CONFIG_SPD_EEPROM)
-#define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR0 (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M))
-#else
-#define LAWBAR0 0
-#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-#endif
-
-#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-/*
- * This is not so much the SDRAM map as it is the whole localbus map.
- */
-#define LAWBAR2 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
-
-#define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff)
-#define LAWAR3 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_1M))
-
-/*
- * Rapid IO at 0xc000_0000 for 512 M
- */
-#define LAWBAR4 ((CFG_RIO_MEM_BASE>>12) & 0xfffff)
-#define LAWAR4 (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-       .long 0x05
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       .long LAWBAR4,LAWAR4
-       entry_end
diff --git a/board/freescale/mpc8560ads/law.c b/board/freescale/mpc8560ads/law.c
new file mode 100644 (file)
index 0000000..785576a
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000     0x7fff_ffff     DDR                     2G
+ * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
+ * 0xc000_0000     0xdfff_ffff     RapidIO                 512M
+ * 0xe000_0000     0xe000_ffff     CCSR                    1M
+ * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M
+ * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
+ * 0xf800_0000     0xf80f_ffff     BCSR                    1M
+ * 0xff00_0000     0xffff_ffff     FLASH (boot bank)       16M
+ *
+ * Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ */
+
+struct law_entry law_table[] = {
+#ifndef CONFIG_SPD_EEPROM
+       SET_LAW_ENTRY(1, CFG_DDR_SDRAM_BASE, LAW_SIZE_128M, LAW_TRGT_IF_DDR),
+#endif
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI),
+       /* This is not so much the SDRAM map as it is the whole localbus map. */
+       SET_LAW_ENTRY(3, CFG_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+       SET_LAW_ENTRY(4, CFG_PCI1_IO_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(5, CFG_RIO_MEM_BASE, LAWAR_SIZE_512M, LAW_TRGT_IF_RIO),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/mpc8560ads/tlb.c b/board/freescale/mpc8560ads/tlb.c
new file mode 100644 (file)
index 0000000..3eaff01
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /*
+        * TLB 0:       16M     Non-cacheable, guarded
+        * 0xff000000   16M     FLASH
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_16M, 1),
+
+       /*
+        * TLB 1:       256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        * 0x90000000   256M    PCI1 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS + 0x10000000, CFG_PCI1_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        * 0xc0000000   256M    Rapid IO MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE, CFG_RIO_MEM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 4:       256M    Non-cacheable, guarded
+        * 0xd0000000   256M    Rapid IO MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE + 0x10000000, CFG_RIO_MEM_BASE + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 5:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  16M     PCI1 IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 6:       64M     Cacheable, non-guarded
+        * 0xf000_0000  64M     LBC SDRAM
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_SDRAM_BASE, CFG_LBC_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 6, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 7:       16K     Non-cacheable, guarded
+        * 0xf8000000   16K     BCSR registers
+        */
+       SET_TLB_ENTRY(1, CFG_BCSR, CFG_BCSR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 7, BOOKE_PAGESZ_16K, 1),
+
+#if !defined(CONFIG_SPD_EEPROM)
+       /*
+        * TLB 8, 9:    128M    DDR
+        * 0x00000000   64M     DDR System memory
+        * 0x04000000   64M     DDR System memory
+        * Without SPD EEPROM configured DDR, this must be setup manually.
+        * Make sure the TLB count at the top of this table is correct.
+        * Likely it needs to be increased by two for these entries.
+        */
+#error("Update the number of table entries in tlb1_entry")
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE, CFG_DDR_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 8, BOOKE_PAGESZ_64M, 1),
+
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE + 0x4000000, CFG_DDR_SDRAM_BASE + 0x4000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 9, BOOKE_PAGESZ_64M, 1),
+#endif
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 96af2b1571a31f37a47da71f93471cdde45ad216..e2474e562f539fc0029089e6f322c12a9e9d1256 100644 (file)
@@ -35,7 +35,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/freescale/mpc8560ads/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -65,7 +64,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/freescale/mpc8560ads/init.o (.text)
     cpu/mpc85xx/commproc.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
index 643fbc041ddab62505223853c3a6984670fd51a5..d9f20f96fbc5a738fae4a10c489d08e43d7f07d1 100644 (file)
@@ -29,9 +29,7 @@ endif
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o bcsr.o
-
-SOBJS  := init.o
+COBJS  := $(BOARD).o bcsr.o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/freescale/mpc8568mds/init.S b/board/freescale/mpc8568mds/init.S
deleted file mode 100644 (file)
index 2748c51..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright 2004-2007 Freescale Semiconductor.
- * Copyright 2002,2003, Motorola Inc.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long (2f-1f)/16
-
-1:
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-#error("Update the number of table entries in tlb1_entry")
-#endif
-
-       /*
-        * TLB0         16K     Cacheable, non-guarded
-        * 0xd001_0000  16K     Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /* TLB 1 Initializations */
-       /*
-        * TLBe 0:      16M     Non-cacheable, guarded
-        * 0xff000000   16M     FLASH (upper half)
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE + 0x1000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE + 0x1000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLBe 1:      16M     Non-cacheable, guarded
-        * 0xfe000000   16M     FLASH (lower half)
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLBe 2:      1G      Non-cacheable, guarded
-        * 0x80000000   512M    PCI1 MEM
-        * 0xa0000000   512M    PCIe MEM
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLBe 3:      64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  8M      PCI1 IO
-        * 0xe280_0000  8M      PCIe IO
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLBe 4:      64M     Cacheable, non-guarded
-        * 0xf000_0000  64M     LBC SDRAM
-        */
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLBe 5:      256K    Non-cacheable, guarded
-        * 0xf8000000   32K BCSR
-        * 0xf8008000   32K PIB (CS4)
-        * 0xf8010000   32K PIB (CS5)
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256K)
-       .long FSL_BOOKE_MAS2(CFG_BCSR_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_BCSR_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-2:
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- *0)   0x0000_0000   0x7fff_ffff     DDR                     2G
- *1)   0x8000_0000   0x9fff_ffff     PCI1 MEM                512MB
- *2)   0xa000_0000   0xbfff_ffff     PCIe MEM                512MB
- *-)   0xe000_0000   0xe00f_ffff     CCSR                    1M
- *3)   0xe200_0000   0xe27f_ffff     PCI1 I/O                8M
- *4)   0xe280_0000   0xe2ff_ffff     PCIe I/O                8M
- *5)   0xc000_0000   0xdfff_ffff     SRIO                    512MB
- *6.a) 0xf000_0000   0xf3ff_ffff     SDRAM                   64MB
- *6.b) 0xf800_0000   0xf800_7fff     BCSR                    32KB
- *6.c) 0xf800_8000   0xf800_ffff     PIB (CS4)              32KB
- *6.d) 0xf801_0000   0xf801_7fff     PIB (CS5)              32KB
- *6.e) 0xfe00_0000   0xffff_ffff     Flash                   32MB
- *
- *Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- *
- * The defines below are 1-off of the actual LAWAR0 usage.
- * So LAWAR3 define uses the LAWAR4 register in the ECM.
- */
-
-#define LAWBAR0 0
-#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-
-#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1 (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-#define LAWBAR2 ((CFG_PCIE1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_PCIE1 | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-#define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff)
-#define LAWAR3 (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_8M))
-
-#define LAWBAR4 ((CFG_PCIE1_IO_PHYS>>12) & 0xfffff)
-#define LAWAR4  (LAWAR_EN | LAWAR_TRGT_IF_PCIE1 | (LAWAR_SIZE & LAWAR_SIZE_8M))
-
-#define LAWBAR5 ((CFG_SRIO_MEM_BASE>>12) & 0xfffff)
-#define LAWAR5 (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-/* LBC window - maps 256M.  That's SDRAM, BCSR, PIBs, and Flash */
-#define LAWBAR6 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR6 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-
-law_entry:
-       entry_start
-       .long (4f-3f)/8
-3:
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       .long LAWBAR4,LAWAR4,LAWBAR5,LAWAR5,LAWBAR6,LAWAR6
-4:
-       entry_end
diff --git a/board/freescale/mpc8568mds/law.c b/board/freescale/mpc8568mds/law.c
new file mode 100644 (file)
index 0000000..5e96ea7
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ *0)   0x0000_0000   0x7fff_ffff     DDR                     2G
+ *1)   0x8000_0000   0x9fff_ffff     PCI1 MEM                512MB
+ *2)   0xa000_0000   0xbfff_ffff     PCIe MEM                512MB
+ *-)   0xe000_0000   0xe00f_ffff     CCSR                    1M
+ *3)   0xe200_0000   0xe27f_ffff     PCI1 I/O                8M
+ *4)   0xe280_0000   0xe2ff_ffff     PCIe I/O                8M
+ *5)   0xc000_0000   0xdfff_ffff     SRIO                    512MB
+ *6.a) 0xf000_0000   0xf3ff_ffff     SDRAM                   64MB
+ *6.b) 0xf800_0000   0xf800_7fff     BCSR                    32KB
+ *6.c) 0xf800_8000   0xf800_ffff     PIB (CS4)              32KB
+ *6.d) 0xf801_0000   0xf801_7fff     PIB (CS5)              32KB
+ *6.e) 0xfe00_0000   0xffff_ffff     Flash                   32MB
+ *
+ *Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ *
+ */
+
+struct law_entry law_table[] = {
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(3, CFG_PCIE1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCIE_1),
+       SET_LAW_ENTRY(4, CFG_PCI1_IO_PHYS, LAW_SIZE_8M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(5, CFG_PCIE1_IO_PHYS, LAW_SIZE_8M, LAW_TRGT_IF_PCIE_1),
+       SET_LAW_ENTRY(6, CFG_SRIO_MEM_BASE, LAW_SIZE_512M, LAW_TRGT_IF_RIO),
+       /* LBC window - maps 256M.  That's SDRAM, BCSR, PIBs, and Flash */
+       SET_LAW_ENTRY(7, CFG_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/mpc8568mds/tlb.c b/board/freescale/mpc8568mds/tlb.c
new file mode 100644 (file)
index 0000000..225fc94
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /* TLB 1 Initializations */
+       /*
+        * TLBe 0:      16M     Non-cacheable, guarded
+        * 0xff000000   16M     FLASH (upper half)
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE + 0x1000000, CFG_FLASH_BASE + 0x1000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_16M, 1),
+
+       /*
+        * TLBe 1:      16M     Non-cacheable, guarded
+        * 0xfe000000   16M     FLASH (lower half)
+        */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_16M, 1),
+
+       /*
+        * TLBe 2:      1G      Non-cacheable, guarded
+        * 0x80000000   512M    PCI1 MEM
+        * 0xa0000000   512M    PCIe MEM
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_1G, 1),
+
+       /*
+        * TLBe 3:      64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  8M      PCI1 IO
+        * 0xe280_0000  8M      PCIe IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLBe 4:      64M     Cacheable, non-guarded
+        * 0xf000_0000  64M     LBC SDRAM
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_SDRAM_BASE, CFG_LBC_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 4, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLBe 5:      256K    Non-cacheable, guarded
+        * 0xf8000000   32K BCSR
+        * 0xf8008000   32K PIB (CS4)
+        * 0xf8010000   32K PIB (CS5)
+        */
+       SET_TLB_ENTRY(1, CFG_BCSR_BASE, CFG_BCSR_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_256K, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 7917409c16c1cc3d7f69e9b3247c5863f7187a1c..6b30f1551c29294cc9226701e18f249bbb31f5f9 100644 (file)
@@ -37,7 +37,6 @@ SECTIONS
   .bootpg 0xFFFFF000:
   {
        cpu/mpc85xx/start.o     (.bootpg)
-       board/freescale/mpc8568mds/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -67,7 +66,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/freescale/mpc8568mds/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
index 199c1ff9da50aee0d0906801f58a5c85e5b05587..90fd0a753212d1b30dffa23ea839e322a38dc29c 100644 (file)
@@ -2,12 +2,12 @@
  * (C) Copyright 2007-2008
  * Larry Johnson, lrj@acm.org
  *
- * (C) Copyright 2006
+ * (C) Copyright 2006-2008
  * Stefan Roese, DENX Software Engineering, sr@denx.de.
  *
  * (C) Copyright 2006
  * Jacqueline Pira-Ferriol, AMCC/IBM, jpira-ferriol@fr.ibm.com
- * Alain Saurel,           AMCC/IBM, alain.saurel@fr.ibm.com
+ * Alain Saurel,            AMCC/IBM, alain.saurel@fr.ibm.com
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License as
  */
 
 #include <common.h>
-#include <asm/gpio.h>
-#include <asm/processor.h>
-#include <asm-ppc/io.h>
 #include <i2c.h>
 #include <ppc440.h>
+#include <asm/gpio.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+#include <asm/bitops.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
-extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS];   /* info for FLASH chips    */
+extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; /* info for FLASH chips */
 
 ulong flash_get_size(ulong base, int banknum);
 
@@ -47,9 +48,9 @@ int board_early_init_f(void)
        mtdcr(ebccfga, xbcfg);
        mtdcr(ebccfgd, 0xb8400000);
 
-       /*--------------------------------------------------------------------
+       /*
         * Setup the interrupt controller polarities, triggers, etc.
-        *-------------------------------------------------------------------*/
+        */
        mtdcr(uic0sr, 0xffffffff);      /* clear all */
        mtdcr(uic0er, 0x00000000);      /* disable all */
        mtdcr(uic0cr, 0x00000005);      /* ATI & UIC1 crit are critical */
@@ -101,10 +102,10 @@ int board_early_init_f(void)
        /* select Ethernet pins */
        mfsdr(SDR0_PFC1, sdr0_pfc1);
        sdr0_pfc1 = (sdr0_pfc1 & ~SDR0_PFC1_SELECT_MASK) |
-           SDR0_PFC1_SELECT_CONFIG_4;
+               SDR0_PFC1_SELECT_CONFIG_4;
        mfsdr(SDR0_PFC2, sdr0_pfc2);
        sdr0_pfc2 = (sdr0_pfc2 & ~SDR0_PFC2_SELECT_MASK) |
-           SDR0_PFC2_SELECT_CONFIG_4;
+               SDR0_PFC2_SELECT_CONFIG_4;
        mtsdr(SDR0_PFC2, sdr0_pfc2);
        mtsdr(SDR0_PFC1, sdr0_pfc1);
 
@@ -221,9 +222,6 @@ static void set_mac_addresses(void)
        }
 }
 
-/*---------------------------------------------------------------------------+
-  | misc_init_r.
-  +---------------------------------------------------------------------------*/
 int misc_init_r(void)
 {
        uint pbcr;
@@ -234,11 +232,7 @@ int misc_init_r(void)
        unsigned long sdr0_pfc1;
        char *act = getenv("usbact");
 
-       /*
-        * FLASH stuff...
-        */
-
-       /* Re-do sizing to get full correct info */
+       /* Re-do flash sizing to get full correct info */
 
        /* adjust flash start and offset */
        gd->bd->bi_flashstart = 0 - gd->bd->bi_flashsize;
@@ -246,32 +240,7 @@ int misc_init_r(void)
 
        mtdcr(ebccfga, pb0cr);
        pbcr = mfdcr(ebccfgd);
-       switch (gd->bd->bi_flashsize) {
-       case 1 << 20:
-               size_val = 0;
-               break;
-       case 2 << 20:
-               size_val = 1;
-               break;
-       case 4 << 20:
-               size_val = 2;
-               break;
-       case 8 << 20:
-               size_val = 3;
-               break;
-       case 16 << 20:
-               size_val = 4;
-               break;
-       case 32 << 20:
-               size_val = 5;
-               break;
-       case 64 << 20:
-               size_val = 6;
-               break;
-       case 128 << 20:
-               size_val = 7;
-               break;
-       }
+       size_val = ffs(gd->bd->bi_flashsize) - 21;
        pbcr = (pbcr & 0x0001ffff) | gd->bd->bi_flashstart | (size_val << 17);
        mtdcr(ebccfga, pb0cr);
        mtdcr(ebccfgd, pbcr);
@@ -286,8 +255,7 @@ int misc_init_r(void)
                            &flash_info[0]);
 
        /* Env protection ON by default */
-       (void)flash_protect(FLAG_PROTECT_SET,
-                           CFG_ENV_ADDR_REDUND,
+       (void)flash_protect(FLAG_PROTECT_SET, CFG_ENV_ADDR_REDUND,
                            CFG_ENV_ADDR_REDUND + 2 * CFG_ENV_SECT_SIZE - 1,
                            &flash_info[0]);
 
@@ -301,35 +269,40 @@ int misc_init_r(void)
                mfsdr(SDR0_USB2PHY0CR, usb2phy0cr);
                mfsdr(SDR0_USB2H0CR, usb2h0cr);
 
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_XOCLK_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;       /*0 */
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_WDINT_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_16BIT_30MHZ;    /*1 */
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DVBUS_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS; /*0 */
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DWNSTR_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;  /*1 */
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_UTMICN_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;  /*1 */
-
-               /* An 8-bit/60MHz interface is the only possible alternative
-                  when connecting the Device to the PHY */
-               usb2h0cr = usb2h0cr & ~SDR0_USB2H0CR_WDINT_MASK;
-               usb2h0cr = usb2h0cr | SDR0_USB2H0CR_WDINT_16BIT_30MHZ;  /*1 */
-
-               /* To enable the USB 2.0 Device function through the UTMI interface */
-               usb2d0cr = usb2d0cr & ~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK;
-               usb2d0cr = usb2d0cr | SDR0_USB2D0CR_USB2DEV_SELECTION;  /*1 */
-
-               sdr0_pfc1 = sdr0_pfc1 & ~SDR0_PFC1_UES_MASK;
-               sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_USB2D_SEL;        /*0 */
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_WDINT_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_16BIT_30MHZ;
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS;
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;
+
+               /*
+                * An 8-bit/60MHz interface is the only possible alternative
+                * when connecting the Device to the PHY
+                */
+               usb2h0cr = usb2h0cr &~SDR0_USB2H0CR_WDINT_MASK;
+               usb2h0cr = usb2h0cr | SDR0_USB2H0CR_WDINT_16BIT_30MHZ;
+
+               /*
+                * To enable the USB 2.0 Device function
+                * through the UTMI interface
+                */
+               usb2d0cr = usb2d0cr &~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK;
+               usb2d0cr = usb2d0cr | SDR0_USB2D0CR_USB2DEV_SELECTION;
+
+               sdr0_pfc1 = sdr0_pfc1 &~SDR0_PFC1_UES_MASK;
+               sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_USB2D_SEL;
 
                mtsdr(SDR0_PFC1, sdr0_pfc1);
                mtsdr(SDR0_USB2D0CR, usb2d0cr);
                mtsdr(SDR0_USB2PHY0CR, usb2phy0cr);
                mtsdr(SDR0_USB2H0CR, usb2h0cr);
 
-               /*clear resets */
+               /* clear resets */
                udelay(1000);
                mtsdr(SDR0_SRST1, 0x00000000);
                udelay(1000);
@@ -341,14 +314,14 @@ int misc_init_r(void)
                /*-------------------PATCH-------------------------------*/
                mfsdr(SDR0_USB2PHY0CR, usb2phy0cr);
 
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_XOCLK_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;       /*0 */
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DVBUS_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS; /*0 */
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DWNSTR_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;  /*1 */
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_UTMICN_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;  /*1 */
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PURDIS;
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_HOST;
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;
                mtsdr(SDR0_USB2PHY0CR, usb2phy0cr);
 
                udelay(1000);
@@ -372,32 +345,32 @@ int misc_init_r(void)
                mfsdr(SDR0_USB2D0CR, usb2d0cr);
                mfsdr(SDR0_PFC1, sdr0_pfc1);
 
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_XOCLK_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;       /*0 */
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_WDINT_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_8BIT_60MHZ;     /*0 */
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DVBUS_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PUREN;  /*1 */
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_DWNSTR_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_DEV;   /*0 */
-               usb2phy0cr = usb2phy0cr & ~SDR0_USB2PHY0CR_UTMICN_MASK;
-               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_DEV;   /*0 */
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_XOCLK_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_XOCLK_EXTERNAL;
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_WDINT_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_WDINT_8BIT_60MHZ;
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DVBUS_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DVBUS_PUREN;
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_DWNSTR_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_DWNSTR_DEV;
+               usb2phy0cr = usb2phy0cr &~SDR0_USB2PHY0CR_UTMICN_MASK;
+               usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_DEV;
 
-               usb2h0cr = usb2h0cr & ~SDR0_USB2H0CR_WDINT_MASK;
-               usb2h0cr = usb2h0cr | SDR0_USB2H0CR_WDINT_8BIT_60MHZ;   /*0 */
+               usb2h0cr   = usb2h0cr &~SDR0_USB2H0CR_WDINT_MASK;
+               usb2h0cr   = usb2h0cr | SDR0_USB2H0CR_WDINT_8BIT_60MHZ;
 
-               usb2d0cr = usb2d0cr & ~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK;
-               usb2d0cr = usb2d0cr | SDR0_USB2D0CR_EBC_SELECTION;      /*0 */
+               usb2d0cr = usb2d0cr &~SDR0_USB2D0CR_USB2DEV_EBC_SEL_MASK;
+               usb2d0cr = usb2d0cr | SDR0_USB2D0CR_EBC_SELECTION;
 
-               sdr0_pfc1 = sdr0_pfc1 & ~SDR0_PFC1_UES_MASK;
-               sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_EBCHR_SEL;        /*1 */
+               sdr0_pfc1 = sdr0_pfc1 &~SDR0_PFC1_UES_MASK;
+               sdr0_pfc1 = sdr0_pfc1 | SDR0_PFC1_UES_EBCHR_SEL;
 
                mtsdr(SDR0_USB2H0CR, usb2h0cr);
                mtsdr(SDR0_USB2PHY0CR, usb2phy0cr);
                mtsdr(SDR0_USB2D0CR, usb2d0cr);
                mtsdr(SDR0_PFC1, sdr0_pfc1);
 
-               /*clear resets */
+               /* clear resets */
                udelay(1000);
                mtsdr(SDR0_SRST1, 0x00000000);
                udelay(1000);
@@ -406,7 +379,7 @@ int misc_init_r(void)
                printf("USB:   Device(int phy)\n");
        }
 
-       mfsdr(SDR0_SRST1, reg); /* enable security/kasumi engines */
+       mfsdr(SDR0_SRST1, reg);         /* enable security/kasumi engines */
        reg &= ~(SDR0_SRST1_CRYP0 | SDR0_SRST1_KASU0);
        mtsdr(SDR0_SRST1, reg);
 
@@ -486,43 +459,42 @@ int testdram(void)
 }
 #endif /* defined(CFG_DRAM_TEST) */
 
-/*************************************************************************
- *  pci_pre_init
- *
- *  This routine is called just prior to registering the hose and gives
- *  the board the opportunity to check things. Returning a value of zero
- *  indicates that things are bad & PCI initialization should be aborted.
+/*
+ * pci_pre_init
  *
- *     Different boards may wish to customize the pci controller structure
- *     (add regions, override default access routines, etc) or perform
- *     certain pre-initialization actions.
+ * This routine is called just prior to registering the hose and gives
+ * the board the opportunity to check things. Returning a value of zero
+ * indicates that things are bad & PCI initialization should be aborted.
  *
- ************************************************************************/
+ * Different boards may wish to customize the pci controller structure
+ * (add regions, override default access routines, etc) or perform
+ * certain pre-initialization actions.
+ */
 #if defined(CONFIG_PCI)
 int pci_pre_init(struct pci_controller *hose)
 {
        unsigned long addr;
 
-       /*-------------------------------------------------------------------------+
-         | Set priority for all PLB3 devices to 0.
-         | Set PLB3 arbiter to fair mode.
-         +-------------------------------------------------------------------------*/
+       /*
+        * Set priority for all PLB3 devices to 0.
+        * Set PLB3 arbiter to fair mode.
+        */
        mfsdr(sdr_amp1, addr);
        mtsdr(sdr_amp1, (addr & 0x000000FF) | 0x0000FF00);
        addr = mfdcr(plb3_acr);
        mtdcr(plb3_acr, addr | 0x80000000);
 
-       /*-------------------------------------------------------------------------+
-         | Set priority for all PLB4 devices to 0.
-         +-------------------------------------------------------------------------*/
+       /*
+        * Set priority for all PLB4 devices to 0.
+        */
        mfsdr(sdr_amp0, addr);
        mtsdr(sdr_amp0, (addr & 0x000000FF) | 0x0000FF00);
        addr = mfdcr(plb4_acr) | 0xa0000000;    /* Was 0x8---- */
        mtdcr(plb4_acr, addr);
 
-       /*-------------------------------------------------------------------------+
-         | Set Nebula PLB4 arbiter to fair mode.
-         +-------------------------------------------------------------------------*/
+       /*
+        * Set Nebula PLB4 arbiter to fair mode.
+        */
        /* Segment0 */
        addr = (mfdcr(plb0_acr) & ~plb0_acr_ppm_mask) | plb0_acr_ppm_fair;
        addr = (addr & ~plb0_acr_hbu_mask) | plb0_acr_hbu_enabled;
@@ -541,47 +513,51 @@ int pci_pre_init(struct pci_controller *hose)
 }
 #endif /* defined(CONFIG_PCI) */
 
-/*************************************************************************
- *  pci_target_init
- *
- *     The bootstrap configuration provides default settings for the pci
- *     inbound map (PIM). But the bootstrap config choices are limited and
- *     may not be sufficient for a given board.
+/*
+ * pci_target_init
  *
- ************************************************************************/
+ * The bootstrap configuration provides default settings for the pci
+ * inbound map (PIM). But the bootstrap config choices are limited and
+ * may not be sufficient for a given board.
+ */
 #if defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT)
 void pci_target_init(struct pci_controller *hose)
 {
-       /*--------------------------------------------------------------------------+
+       /*
         * Set up Direct MMIO registers
-        *--------------------------------------------------------------------------*/
-       /*--------------------------------------------------------------------------+
-         | PowerPC440EPX PCI Master configuration.
-         | Map one 1Gig range of PLB/processor addresses to PCI memory space.
-         |   PLB address 0xA0000000-0xDFFFFFFF ==> PCI address 0xA0000000-0xDFFFFFFF
-         |   Use byte reversed out routines to handle endianess.
-         | Make this region non-prefetchable.
-         +--------------------------------------------------------------------------*/
-       out32r(PCIX0_PMM0MA, 0x00000000);       /* PMM0 Mask/Attribute - disabled b4 setting */
+        */
+       /*
+        * PowerPC440EPX PCI Master configuration.
+        * Map one 1Gig range of PLB/processor addresses to PCI memory space.
+        * PLB address 0xA0000000-0xDFFFFFFF
+        *     ==> PCI address 0xA0000000-0xDFFFFFFF
+        * Use byte reversed out routines to handle endianess.
+        * Make this region non-prefetchable.
+        */
+       out32r(PCIX0_PMM0MA, 0x00000000);       /* PMM0 Mask/Attribute */
+                                               /* - disabled b4 setting */
        out32r(PCIX0_PMM0LA, CFG_PCI_MEMBASE);  /* PMM0 Local Address */
-       out32r(PCIX0_PMM0PCILA, CFG_PCI_MEMBASE);       /* PMM0 PCI Low Address */
+       out32r(PCIX0_PMM0PCILA, CFG_PCI_MEMBASE); /* PMM0 PCI Low Address */
        out32r(PCIX0_PMM0PCIHA, 0x00000000);    /* PMM0 PCI High Address */
-       out32r(PCIX0_PMM0MA, 0xE0000001);       /* 512M + No prefetching, and enable region */
+       out32r(PCIX0_PMM0MA, 0xE0000001);       /* 512M + No prefetching, */
+                                               /* and enable region */
 
-       out32r(PCIX0_PMM1MA, 0x00000000);       /* PMM0 Mask/Attribute - disabled b4 setting */
-       out32r(PCIX0_PMM1LA, CFG_PCI_MEMBASE2); /* PMM0 Local Address */
-       out32r(PCIX0_PMM1PCILA, CFG_PCI_MEMBASE2);      /* PMM0 PCI Low Address */
+       out32r(PCIX0_PMM1MA, 0x00000000);       /* PMM0 Mask/Attribute */
+                                               /* - disabled b4 setting */
+       out32r(PCIX0_PMM1LA, CFG_PCI_MEMBASE2); /* PMM0 Local Address */
+       out32r(PCIX0_PMM1PCILA, CFG_PCI_MEMBASE2); /* PMM0 PCI Low Address */
        out32r(PCIX0_PMM1PCIHA, 0x00000000);    /* PMM0 PCI High Address */
-       out32r(PCIX0_PMM1MA, 0xE0000001);       /* 512M + No prefetching, and enable region */
+       out32r(PCIX0_PMM1MA, 0xE0000001);       /* 512M + No prefetching, */
+                                               /* and enable region */
 
        out32r(PCIX0_PTM1MS, 0x00000001);       /* Memory Size/Attribute */
-       out32r(PCIX0_PTM1LA, 0);        /* Local Addr. Reg */
-       out32r(PCIX0_PTM2MS, 0);        /* Memory Size/Attribute */
-       out32r(PCIX0_PTM2LA, 0);        /* Local Addr. Reg */
+       out32r(PCIX0_PTM1LA, 0);                /* Local Addr. Reg */
+       out32r(PCIX0_PTM2MS, 0);                /* Memory Size/Attribute */
+       out32r(PCIX0_PTM2LA, 0);                /* Local Addr. Reg */
 
-       /*--------------------------------------------------------------------------+
+       /*
         * Set up Configuration registers
-        *--------------------------------------------------------------------------*/
+        */
 
        /* Program the board's subsystem id/vendor id */
        pci_write_config_word(0, PCI_SUBSYSTEM_VENDOR_ID,
@@ -599,27 +575,24 @@ void pci_target_init(struct pci_controller *hose)
 
        pci_write_config_dword(0, PCI_BRDGOPT2, 0x00000101);
 
-       /*--------------------------------------------------------------------------+
-        * Set up Configuration registers for on-board NEC uPD720101 USB controller
-        *--------------------------------------------------------------------------*/
+       /*
+        * Set up Configuration registers for on-board NEC uPD720101 USB
+        * controller.
+        */
        pci_write_config_dword(PCI_BDF(0x0, 0xC, 0x0), 0xE4, 0x00000020);
 }
 #endif /* defined(CONFIG_PCI) && defined(CFG_PCI_TARGET_INIT) */
 
-/*************************************************************************
- *  pci_master_init
- *
- ************************************************************************/
 #if defined(CONFIG_PCI) && defined(CFG_PCI_MASTER_INIT)
 void pci_master_init(struct pci_controller *hose)
 {
        unsigned short temp_short;
 
-       /*--------------------------------------------------------------------------+
-         | Write the PowerPC440 EP PCI Configuration regs.
-         |   Enable PowerPC440 EP to be a master on the PCI bus (PMM).
-         |   Enable PowerPC440 EP to act as a PCI memory target (PTM).
-         +--------------------------------------------------------------------------*/
+       /*
+        * Write the PowerPC440 EP PCI Configuration regs.
+        * Enable PowerPC440 EP to be a master on the PCI bus (PMM).
+        * Enable PowerPC440 EP to act as a PCI memory target (PTM).
+        */
        pci_read_config_word(0, PCI_COMMAND, &temp_short);
        pci_write_config_word(0, PCI_COMMAND,
                              temp_short | PCI_COMMAND_MASTER |
@@ -627,28 +600,26 @@ void pci_master_init(struct pci_controller *hose)
 }
 #endif
 
-/*************************************************************************
- *  is_pci_host
- *
- *     This routine is called to determine if a pci scan should be
- *     performed. With various hardware environments (especially cPCI and
- *     PPMC) it's insufficient to depend on the state of the arbiter enable
- *     bit in the strap register, or generic host/adapter assumptions.
- *
- *     Rather than hard-code a bad assumption in the general 440 code, the
- *     440 pci code requires the board to decide at runtime.
+/*
+ * is_pci_host
  *
- *     Return 0 for adapter mode, non-zero for host (monarch) mode.
+ * This routine is called to determine if a pci scan should be
+ * performed. With various hardware environments (especially cPCI and
+ * PPMC) it's insufficient to depend on the state of the arbiter enable
+ * bit in the strap register, or generic host/adapter assumptions.
  *
+ * Rather than hard-code a bad assumption in the general 440 code, the
+ * 440 pci code requires the board to decide at runtime.
  *
- ************************************************************************/
+ * Return 0 for adapter mode, non-zero for host (monarch) mode.
+ */
 #if defined(CONFIG_PCI)
 int is_pci_host(struct pci_controller *hose)
 {
        /* Korat is always configured as host. */
        return (1);
 }
-#endif
+#endif /* defined(CONFIG_PCI) */
 
 #if defined(CONFIG_POST)
 /*
@@ -657,6 +628,6 @@ int is_pci_host(struct pci_controller *hose)
  */
 int post_hotkeys_pressed(void)
 {
-       return 0;               /* No hotkeys supported */
+       return 0;       /* No hotkeys supported */
 }
-#endif
+#endif /* CONFIG_POST */
index d649c60af1df06de23cb4aa981714b859bf5f698..28d6cb9976e01b39caea1008c3d46629242f5b7e 100644 (file)
@@ -25,10 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o flash.o
-#COBJS := $(BOARD).o flash.o $(BOARD)_slave.o
-SOBJS  := init.o
-#SOBJS :=
+COBJS  := $(BOARD).o flash.o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/mpc8540eval/init.S b/board/mpc8540eval/init.S
deleted file mode 100644 (file)
index a8ac3fb..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
-* Copyright (C) 2002,2003, Motorola Inc.
-* Xianghua Xiao <X.Xiao@motorola.com>
-*
-* See file CREDITS for list of people who contributed to this
-* project.
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License as
-* published by the Free Software Foundation; either version 2 of
-* the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-* MA 02111-1307 USA
-*/
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-/* TLB1 entries configuration: */
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       .long 0x0a      /* the following data table uses a few of 16 TLB entries */
-
-       .long FSL_BOOKE_MAS0(1,1,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR,(MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-  #if defined(CFG_FLASH_PORT_WIDTH_16)
-       .long FSL_BOOKE_MAS0(1,2,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_4M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE,(MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1,3,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_4M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE+0x400000,(MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE+0x400000,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-  #else
-       .long FSL_BOOKE_MAS0(1,2,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_16M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE,(MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1,3,0)
-       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(0,0)
-       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-  #endif
-
-  #if !defined(CONFIG_SPD_EEPROM)
-       .long FSL_BOOKE_MAS0(1,4,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE,0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1,5,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE+0x4000000,0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE+0x4000000,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-  #else
-       .long FSL_BOOKE_MAS0(1,4,0)
-       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(0,0)
-       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1,5,0)
-       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(0,0)
-       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-  #endif
-
-       .long FSL_BOOKE_MAS0(1,6,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_64M)
-  #if defined(CONFIG_RAM_AS_FLASH)
-       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE,(MAS2_I|MAS2_G))
-  #else
-       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE,0)
-  #endif
-       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1,7,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_16K)
-  #ifdef CONFIG_L2_INIT_RAM
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR,0,0,0,1,0,0,0,0)
-  #else
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR,0)
-  #endif
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1,8,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI_MEM_BASE,(MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI_MEM_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1,9,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_16K)
-       .long FSL_BOOKE_MAS2(CFG_BCSR,(MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_BCSR,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-  #if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       .long FSL_BOOKE_MAS0(1,15,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT,(MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-  #else
-       .long FSL_BOOKE_MAS0(1,15,0)
-       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(0,0)
-       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-  #endif
-       entry_end
-
-/* LAW(Local Access Window) configuration:
- * 0000_0000-0800_0000: DDR(128M) -or- larger
- * f000_0000-f3ff_ffff: PCI(256M)
- * f400_0000-f7ff_ffff: RapidIO(128M)
- * f800_0000-ffff_ffff: localbus(128M)
- *   f800_0000-fbff_ffff: LBC SDRAM(64M)
- *   fc00_0000-fdef_ffff: LBC BCSR,RTC,etc(31M)
- *   fdf0_0000-fdff_ffff: CCSRBAR(1M)
- *   fe00_0000-ffff_ffff: Flash(32M)
- * Note: CCSRBAR and L2-as-SRAM don't need configure Local Access
- *       Window.
- * Note: If flash is 8M at default position(last 8M),no LAW needed.
- */
-
-#if !defined(CONFIG_SPD_EEPROM)
-#define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR0         (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M))
-#else
-#define LAWBAR0 0
-#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-#endif
-
-#define LAWBAR1 ((CFG_PCI_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1         (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_256M))
-
-#if !defined(CONFIG_RAM_AS_FLASH)
-#define LAWBAR2 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR2         (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_128M))
-#else
-#define LAWBAR2 0
-#define LAWAR2 ((LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-#endif
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-       .long 0x03
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2
-       entry_end
diff --git a/board/mpc8540eval/law.c b/board/mpc8540eval/law.c
new file mode 100644 (file)
index 0000000..273ec5c
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/* LAW(Local Access Window) configuration:
+ * 0000_0000-0800_0000: DDR(128M) -or- larger
+ * f000_0000-f3ff_ffff: PCI(256M)
+ * f400_0000-f7ff_ffff: RapidIO(128M)
+ * f800_0000-ffff_ffff: localbus(128M)
+ *   f800_0000-fbff_ffff: LBC SDRAM(64M)
+ *   fc00_0000-fdef_ffff: LBC BCSR,RTC,etc(31M)
+ *   fdf0_0000-fdff_ffff: CCSRBAR(1M)
+ *   fe00_0000-ffff_ffff: Flash(32M)
+ * Note: CCSRBAR and L2-as-SRAM don't need configure Local Access
+ *       Window.
+ * Note: If flash is 8M at default position(last 8M),no LAW needed.
+ */
+
+struct law_entry law_table[] = {
+#ifndef CONFIG_SPD_EEPROM
+       SET_LAW_ENTRY(1, CFG_DDR_SDRAM_BASE, LAW_SIZE_128M, LAW_TRGT_IF_DDR),
+#endif
+       SET_LAW_ENTRY(2, CFG_PCI_MEM_PHYS, LAW_SIZE_256M, LAW_TRGT_IF_PCI),
+#ifndef CONFIG_RAM_AS_FLASH
+       SET_LAW_ENTRY(3, CFG_LBC_SDRAM_BASE, LAW_SIZE_128M, LAW_TRGT_IF_LBC),
+#endif
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/mpc8540eval/tlb.c b/board/mpc8540eval/tlb.c
new file mode 100644 (file)
index 0000000..f041236
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_1M, 1),
+
+  #if defined(CFG_FLASH_PORT_WIDTH_16)
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_4M, 1),
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE + 0x400000, CFG_FLASH_BASE + 0x400000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_4M, 1),
+  #else
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_16M, 1),
+  #endif
+
+  #if !defined(CONFIG_SPD_EEPROM)
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE, CFG_DDR_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 4, BOOKE_PAGESZ_64M, 1),
+
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE + 0x4000000, CFG_DDR_SDRAM_BASE + 0x4000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+  #endif
+
+       SET_TLB_ENTRY(1, CFG_LBC_SDRAM_BASE, CFG_LBC_SDRAM_BASE,
+  #if defined(CONFIG_RAM_AS_FLASH)
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+  #else
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+  #endif
+                     0, 6, BOOKE_PAGESZ_64M, 1),
+
+       SET_TLB_ENTRY(1, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 7, BOOKE_PAGESZ_16K, 1),
+
+       SET_TLB_ENTRY(1, CFG_PCI_MEM_PHYS, CFG_PCI_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 8, BOOKE_PAGESZ_256M, 1),
+
+       SET_TLB_ENTRY(1, CFG_BCSR, CFG_BCSR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 9, BOOKE_PAGESZ_16K, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 4b342c7fb2964ad90032cf8fcb352eeb66494470..9bbba3046fa3131e9b82cd86a0c1a02dd3c5962b 100644 (file)
@@ -56,7 +56,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/mpc8540eval/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
@@ -143,7 +142,6 @@ SECTIONS
   .bootpg   :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/mpc8540eval/init.o (.bootpg)
   } = 0xffff
 
   . = (. & 0xFFF80000) + 0x0007FFFC;
diff --git a/board/netstal/common/fixed_sdram.c b/board/netstal/common/fixed_sdram.c
new file mode 100644 (file)
index 0000000..8082f60
--- /dev/null
@@ -0,0 +1,105 @@
+/*
+ *(C) Copyright 2005-2008 Netstal Maschinen AG
+ *    Niklaus Giger (Niklaus.Giger@netstal.com)
+ *
+ *    This source code is free software; you can redistribute it
+ *    and/or modify it in source code form 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  <ppc4xx.h>
+#include  <asm/processor.h>
+#include  "nm.h"
+
+#if defined(DEBUG)
+void show_sdram_registers(void)
+{
+       u32 value;
+
+       printf("SDRAM Controller Registers --\n");
+       mfsdram(mem_mcopt1, value);
+       printf("    SDRAM0_CFG   : 0x%08x\n", value);
+       mfsdram(mem_status, value);
+       printf("    SDRAM0_STATUS: 0x%08x\n", value);
+       mfsdram(mem_mb0cf, value);
+       printf("    SDRAM0_B0CR  : 0x%08x\n", value);
+       mfsdram(mem_mb1cf, value);
+       printf("    SDRAM0_B1CR  : 0x%08x\n", value);
+       mfsdram(mem_sdtr1, value);
+       printf("    SDRAM0_TR    : 0x%08x\n", value);
+       mfsdram(mem_rtr, value);
+       printf("    SDRAM0_RTR   : 0x%08x\n", value);
+}
+#endif
+
+long int fixed_hcu4_sdram (unsigned int dram_size)
+{
+#ifdef DEBUG
+       printf(__FUNCTION__);
+#endif
+       /* disable memory controller */
+       mtsdram(mem_mcopt1, 0x00000000);
+
+       udelay (500);
+
+       /* Clear SDRAM0_BESR0 (Bus Error Syndrome Register) */
+       mtsdram(mem_besra, 0xffffffff);
+
+       /* Clear SDRAM0_BESR1 (Bus Error Syndrome Register) */
+       mtsdram(mem_besrb, 0xffffffff);
+
+       /* Clear SDRAM0_ECCCFG (disable ECC) */
+       mtsdram(mem_ecccf, 0x00000000);
+
+       /* Clear SDRAM0_ECCESR (ECC Error Syndrome Register) */
+       mtsdram(mem_eccerr, 0xffffffff);
+
+       /* Timing register: CASL=2, PTA=2, CTP=2, LDF=1, RFTA=5, RCD=2
+        */
+       mtsdram(mem_sdtr1, 0x008a4015);
+
+       /* Memory Bank 0 Config == BA=0x00000000, SZ=64M, AM=3, BE=1
+        * and refresh timer
+        */
+       switch (dram_size >> 20) {
+       case 32:
+               mtsdram(mem_mb0cf, 0x00062001);
+               mtsdram(mem_rtr,   0x07F00000);
+               break;
+       case 64:
+               mtsdram(mem_mb0cf, 0x00084001);
+               mtsdram(mem_rtr,   0x04100000);
+               break;
+       case 128:
+               mtsdram(mem_mb0cf, 0x000A4001);
+               mtsdram(mem_rtr,   0x04100000);
+               break;
+       default:
+               printf("Invalid memory size of %d MB given\n", dram_size >> 20);
+       }
+
+       /* Power management idle timer set to the default. */
+       mtsdram(mem_pmit, 0x07c00000);
+
+       udelay (500);
+
+       /* Enable banks (DCE=1, BPRF=1, ECCDD=1, EMDUL=1) TODO */
+       mtsdram(mem_mcopt1, 0x90800000);
+
+#ifdef DEBUG
+       printf("%s: done\n", __FUNCTION__);
+#endif
+       return dram_size;
+}
diff --git a/board/netstal/common/nm.h b/board/netstal/common/nm.h
new file mode 100644 (file)
index 0000000..2801e13
--- /dev/null
@@ -0,0 +1,38 @@
+/*
+ *(C) Copyright 2005-2007 Netstal Maschinen AG
+ *    Niklaus Giger (Niklaus.Giger@netstal.com)
+ *
+ *    This source code is free software; you can redistribute it
+ *    and/or modify it in source code form 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
+ */
+
+extern void hcu_led_set(u32 value);
+extern u32 get_serial_number(void);
+extern u32 hcu_get_slot(void);
+extern int board_with_pci(void);
+extern void nm_show_print(int generation, int index, int hw_capabilities);
+extern void set_params_for_sw_install(int install_requested, char *board_name );
+extern void common_misc_init_r(void);
+
+enum {
+       /* HW_GENERATION_HCU1 is no longer supported */
+       HW_GENERATION_HCU2  = 0x10,
+       HW_GENERATION_HCU3  = 0x10,
+       HW_GENERATION_HCU4  = 0x20,
+       HW_GENERATION_HCU5  = 0x30,
+       HW_GENERATION_MCU   = 0x08,
+       HW_GENERATION_MCU20 = 0x0a,
+       HW_GENERATION_MCU25 = 0x09,
+};
index a9de45ea704eb738a974fa6ed7855bc494dba26f..b50b4af2af568bef25c797bca7bc858f535e4b87 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *(C) Copyright 2005-2007 Netstal Maschinen AG
+ *(C) Copyright 2005-2008 Netstal Maschinen AG
  *    Niklaus Giger (Niklaus.Giger@netstal.com)
  *
  *    This source code is free software; you can redistribute it
 
 #include <common.h>
 #include <command.h>
+#include <net.h>
+#include "nm.h"
 
-#ifdef CONFIG_CMD_BSP
-/*
- * Command nm_bsp: Netstal Maschinen BSP specific command
- */
-int nm_bsp(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+DECLARE_GLOBAL_DATA_PTR;
+
+#define DEFAULT_ETH_ADDR  "ethaddr"
+
+typedef struct {u8     id;     char *name;} generation_info;
+
+generation_info generations[7] = {
+       {HW_GENERATION_HCU2,    "HCU2"},
+       {HW_GENERATION_HCU3,    "HCU3"},
+       {HW_GENERATION_HCU4,    "HCU4"},
+       {HW_GENERATION_HCU5,    "HCU5"},
+       {HW_GENERATION_MCU,     "MCU"},
+       {HW_GENERATION_MCU20,   "MCU20"},
+       {HW_GENERATION_MCU25,   "MCU25"},
+};
+
+void nm_show_print(int generation, int index, int hw_capabilities)
+{
+       int j;
+       char *generationName=0;
+
+       /* reset ANSI terminal color mode */
+       printf("\x1B""[0m""Netstal Maschinen AG: ");
+       for (j=0; j < (sizeof(generations)/sizeof(generations[0])); j++) {
+               if (generations[j].id == generation) {
+                       generationName = generations[j].name;
+                       break;
+               }
+       }
+       printf("%s: index %d HW 0x%x\n", generationName, index, hw_capabilities);
+       for (j = 0;j < 6; j++) {
+               hcu_led_set(1 << j);
+               udelay(200 * 1000);
+       }
+}
+
+void set_params_for_sw_install(int install_requested, char *board_name )
 {
-       printf("%s: flag %d,  argc %d,  argv[0] %s\n",  __FUNCTION__,
-              flag,  argc,  argv[0]);
-       printf("Netstal Maschinen BSP specific command. None at the moment.\n");
-       return 0;
+       if (install_requested) {
+               char string[128];
+
+               printf("\n\n%s SW-Installation: %d patching boot parameters\n",
+                      board_name, install_requested);
+               setenv("bootdelay", "0");
+               setenv("loadaddr", "0x01000000");
+               setenv("serverip", "172.25.1.1");
+               setenv("bootcmd", "run install");
+               sprintf(string, "tftp ${loadaddr} admin/sw_on_hd; "
+                       "tftp ${loadaddr} installer/%s_sw_inst; "
+                       "run boot_sw_inst", board_name);
+               setenv("install", string);
+               sprintf(string, "setenv bootargs emac(0,0)c:%s/%s_sw_inst "
+                       "e=${ipaddr} h=${serverip} f=0x1000; "
+                       "bootvx ${loadaddr}\0",
+                       board_name, board_name);
+               setenv("boot_sw_inst", string);
+       }
+}
+
+void common_misc_init_r(void)
+{
+       char *s = getenv(DEFAULT_ETH_ADDR);
+       char *e;
+       int i;
+       u32 serial = get_serial_number();
+       IPaddr_t ipaddr;
+       char *ipstring;
+
+       for (i = 0; i < 6; ++i) {
+               gd->bd->bi_enetaddr[i] = s ? simple_strtoul(s, &e, 16) : 0;
+               if (s)
+                       s = (*e) ? e + 1 : e;
+       }
+
+       if (gd->bd->bi_enetaddr[3] == 0 &&
+           gd->bd->bi_enetaddr[4] == 0 &&
+           gd->bd->bi_enetaddr[5] == 0) {
+               char ethaddr[22];
+
+               /* Must be in sync with CONFIG_ETHADDR */
+               gd->bd->bi_enetaddr[0] = 0x00;
+               gd->bd->bi_enetaddr[1] = 0x60;
+               gd->bd->bi_enetaddr[2] = 0x13;
+               gd->bd->bi_enetaddr[3] = (serial >> 16) & 0xff;
+               gd->bd->bi_enetaddr[4] = (serial >>  8) & 0xff;
+               gd->bd->bi_enetaddr[5] = hcu_get_slot();
+               sprintf(ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X\0",
+                       gd->bd->bi_enetaddr[0], gd->bd->bi_enetaddr[1],
+                       gd->bd->bi_enetaddr[2], gd->bd->bi_enetaddr[3],
+                       gd->bd->bi_enetaddr[4], gd->bd->bi_enetaddr[5]) ;
+               printf("%s: Setting eth %s serial 0x%x\n",  __FUNCTION__,
+                      ethaddr, serial);
+               setenv(DEFAULT_ETH_ADDR, ethaddr);
+       }
+
+       /* IP-Adress update */
+       ipstring = getenv("ipaddr");
+       if (ipstring == 0)
+               ipaddr = string_to_ip("172.25.1.99");
+       else
+               ipaddr = string_to_ip(ipstring);
+       if ((ipaddr & 0xff) != (32 + hcu_get_slot())) {
+               char tmp[22];
+
+               ipaddr = (ipaddr & 0xffffff00) + 32 + hcu_get_slot();
+               ip_to_string (ipaddr, tmp);
+               printf("%s: enforce %s\n",  __FUNCTION__, tmp);
+               setenv("ipaddr", tmp);
+               saveenv();
+       }
 }
 
-U_BOOT_CMD(
-         nm_bsp, 1,      1,      nm_bsp,
-         "nm_bsp  - Netstal Maschinen BSP specific command. \n",
-         "Help for Netstal Maschinen BSP specific command.\n"
-         );
-#endif
index af90821faae52d1ee00328b0ea30e58631f60ba9..b13d9d446fb923b7540c6835ff64ef036445bd13 100644 (file)
@@ -22,14 +22,16 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
+vpath fixed_sdram.c ../common
 vpath hcu_flash.c ../common
+vpath nm_bsp.c ../common
 
 # NOBJS : Netstal common objects
-NOBJS  = hcu_flash.o
+NOBJS  = ../common/fixed_sdram.o ../common/hcu_flash.o ../common/nm_bsp.o
 COBJS  = $(BOARD).o
 SOBJS  =
 
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c) ../common/$(NOBJS:.o=.c)
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c) $(NOBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
 NOBJS  := $(addprefix $(obj),$(NOBJS))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
index 376609ab0d6d47f4979dc7001b6a40b174e0ca9f..580f18cb2e02ec32542d0ba18bc986a080065780 100644 (file)
@@ -21,7 +21,7 @@
 # Netstal Maschinen AG: HCU4 boards
 #
 
-TEXT_BASE = 0xFFFa0000
+TEXT_BASE = 0xFFFB0000
 
 ifeq ($(debug),1)
 PLATFORM_CPPFLAGS += -DDEBUG -g
index 48a3f13bad75dcbe1c88491f6ae57d35d208635f..4fbe7012b85cd90bf115aa7c772eee7de54859b6 100644 (file)
 #include  <asm/processor.h>
 #include  <asm/io.h>
 #include  <asm-ppc/u-boot.h>
-#include  "../common/nm_bsp.c"
+#include  "../common/nm.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
 #define HCU_MACH_VERSIONS_REGISTER     (0x7C000000 + 0xF00000)
+#define SYS_SLOT_ADDRESS               (0x7C000000 + 0x400000)
+#define HCU3_DIGITAL_IO_REGISTER       (0x7C000000 + 0x500000)
+#define HCU_SW_INSTALL_REQUESTED       0x10
 
-#define SDRAM_LEN 32*1024*1024 /* 32 MB -RAM */
-
-#define DO_UGLY_SDRAM_WORKAROUND
-
-enum {
-       /* HW_GENERATION_HCU wird nicht mehr unterstuetzt */
-       HW_GENERATION_HCU2  = 0x10,
-       HW_GENERATION_HCU3  = 0x10,
-       HW_GENERATION_HCU4  = 0x20,
-       HW_GENERATION_MCU   = 0x08,
-       HW_GENERATION_MCU20 = 0x0a,
-       HW_GENERATION_MCU25 = 0x09,
-};
-
-void hcu_led_set(u32 value);
-long int spd_sdram(int(read_spd)(uint addr));
-
-#ifdef CONFIG_SPD_EEPROM
-#define DEBUG
-#endif
+#undef DEBUG
 
 #if defined(DEBUG)
 void show_sdram_registers(void);
 #endif
+long int fixed_hcu4_sdram (unsigned int dram_size);
 
 /*
  * This function is run very early, out of flash, and before devices are
@@ -69,6 +54,7 @@ void show_sdram_registers(void);
 /* Attention: If you want 1 microsecs times from the external oscillator
  * use  0x00804051. But this causes problems with u-boot and linux!
  */
+#define CPC0_CR0_VALUE 0x0030103c
 #define CPC0_CR1_VALUE 0x00004051
 #define CPC0_ECR       0xaa    /* Edge condition register */
 #define EBC0_CFG       0x23    /* External Peripheral Control Register */
@@ -77,18 +63,18 @@ void show_sdram_registers(void);
 
 int board_early_init_f (void)
 {
-       /*-------------------------------------------------------------------+
-       | Interrupt controller setup for the HCU4 board.
-       | Note: IRQ 0-15  405GP internally generated; high; level sensitive
-       |       IRQ 16    405GP internally generated; low; level sensitive
-             IRQ 17-24 RESERVED/UNUSED
-             IRQ 31 (EXT IRQ 6) (unused)
-       +-------------------------------------------------------------------*/
+       /*
+        * Interrupt controller setup for the HCU4 board.
+        * Note: IRQ 0-15  405GP internally generated; high; level sensitive
+        *       IRQ 16    405GP internally generated; low; level sensitive
+        *      IRQ 17-24 RESERVED/UNUSED
+        *      IRQ 31 (EXT IRQ 6) (unused)
+        */
        mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */
        mtdcr (uicer, 0x00000000); /* disable all ints */
        mtdcr (uiccr, 0x00000000); /* set all to be non-critical */
-       mtdcr (uicpr, 0xFFFFFF87); /* set int polarities */
-       mtdcr (uictr, 0x10000000); /* set int trigger levels */
+       mtdcr (uicpr, 0xFFFFE000); /* set int polarities */
+       mtdcr (uictr, 0x00000000); /* set int trigger levels */
        mtdcr (uicsr, 0xFFFFFFFF); /* clear all ints */
 
        mtdcr(CPC0_CR1,  CPC0_CR1_VALUE);
@@ -105,47 +91,44 @@ int board_pre_init (void)
 }
 #endif
 
+int sys_install_requested(void)
+{
+       u16 *ioValuePtr = (u16 *)HCU3_DIGITAL_IO_REGISTER;
+       return (in_be16(ioValuePtr) & HCU_SW_INSTALL_REQUESTED) != 0;
+}
+
 int checkboard (void)
 {
-       unsigned int j;
-       u16 *boardVersReg = (u16 *) HCU_MACH_VERSIONS_REGISTER;
-       u16 generation = *boardVersReg & 0xf0;
-       u16 index      = *boardVersReg & 0x0f;
+       u16 *boardVersReg = (u16 *)HCU_MACH_VERSIONS_REGISTER;
+       u16 generation = in_be16(boardVersReg) & 0xf0;
+       u16 index      = in_be16(boardVersReg) & 0x0f;
 
+       /* Cannot be done, in board_early_init */
+       mtdcr(CPC0_CR0,  CPC0_CR0_VALUE);
        /* Force /RTS to active. The board it not wired quite
-          correctly to use cts/rtc flow control, so just force the
-          /RST active and forget about it. */
+        *  correctly to use cts/rtc flow control, so just force the
+        *  /RST active and forget about it.
+        */
        writeb (readb (0xef600404) | 0x03, 0xef600404);
-       printf ("\nNetstal Maschinen AG ");
-       if (generation == HW_GENERATION_HCU3)
-               printf ("HCU3: index %d\n\n", index);
-       else if (generation == HW_GENERATION_HCU4)
-               printf ("HCU4: index %d\n\n", index);
-       hcu_led_set(0);
-       for (j = 0; j < 7; j++) {
-               hcu_led_set(1 << j);
-               udelay(50 * 1000);
-       }
+       nm_show_print(generation, index, 0);
 
        return 0;
 }
 
 u32 hcu_led_get(void)
 {
-       return (~((*(u32 *)GPIO0_OR)) >> 23) & 0xff;
+       return (~(in_be32((u32 *)GPIO0_OR)) >> 23) & 0xff;
 }
 
-/*---------------------------------------------------------------------------+
+/*
  * hcu_led_set  value to be placed into the LEDs (max 6 bit)
- *---------------------------------------------------------------------------*/
+ */
 void hcu_led_set(u32 value)
 {
        u32   tmp = ~value;
-       u32   *ledReg;
 
        tmp = (tmp << 23) | 0x7FFFFF;
-       ledReg = (u32 *)GPIO0_OR;
-       *ledReg = tmp;
+       out_be32((u32 *)GPIO0_OR, tmp);
 }
 
 /*
@@ -157,246 +140,72 @@ void sdram_init(void)
        return;
 }
 
-#if defined(DEBUG)
-void show_sdram_registers(void)
-{
-       u32 value;
-
-       printf ("SDRAM Controller Registers --\n");
-       mfsdram(mem_mcopt1, value);
-       printf ("    SDRAM0_CFG   : 0x%08x\n", value);
-       mfsdram(mem_status, value);
-       printf ("    SDRAM0_STATUS: 0x%08x\n", value);
-       mfsdram(mem_mb0cf, value);
-       printf ("    SDRAM0_B0CR  : 0x%08x\n", value);
-       mfsdram(mem_mb1cf, value);
-       printf ("    SDRAM0_B1CR  : 0x%08x\n", value);
-       mfsdram(mem_sdtr1, value);
-       printf ("    SDRAM0_TR    : 0x%08x\n", value);
-       mfsdram(mem_rtr, value);
-       printf ("    SDRAM0_RTR   : 0x%08x\n", value);
-}
-#endif
-
 /*
- * this is even after checkboard. It returns the size of the SDRAM
- * that we have installed. This function is called by board_init_f
- * in lib_ppc/board.c to initialize the memory and return what I
- * found. These are default value, which will be overridden later.
+ * hcu_get_slot
  */
-
-long int fixed_hcu4_sdram (int board_type)
+u32 hcu_get_slot(void)
 {
-#ifdef DEBUG
-       printf (__FUNCTION__);
-#endif
-       /* disable memory controller */
-       mtdcr (memcfga, mem_mcopt1);
-       mtdcr (memcfgd, 0x00000000);
-
-       udelay (500);
-
-       /* Clear SDRAM0_BESR0 (Bus Error Syndrome Register) */
-       mtdcr (memcfga, mem_besra);
-       mtdcr (memcfgd, 0xffffffff);
-
-       /* Clear SDRAM0_BESR1 (Bus Error Syndrome Register) */
-       mtdcr (memcfga, mem_besrb);
-       mtdcr (memcfgd, 0xffffffff);
-
-       /* Clear SDRAM0_ECCCFG (disable ECC) */
-       mtdcr (memcfga, mem_ecccf);
-       mtdcr (memcfgd, 0x00000000);
-
-       /* Clear SDRAM0_ECCESR (ECC Error Syndrome Register) */
-       mtdcr (memcfga, mem_eccerr);
-       mtdcr (memcfgd, 0xffffffff);
-
-       /* Timing register: CASL=2, PTA=2, CTP=2, LDF=1, RFTA=5, RCD=2
-        * TODO ngngng
-        */
-       mtdcr (memcfga, mem_sdtr1);
-       mtdcr (memcfgd, 0x008a4015);
-
-       /* Memory Bank 0 Config == BA=0x00000000, SZ=64M, AM=3, BE=1
-        * TODO ngngng
-        */
-       mtdcr (memcfga, mem_mb0cf);
-       mtdcr (memcfgd, 0x00062001);
-
-       /* refresh timer = 0x400  */
-       mtdcr (memcfga, mem_rtr);
-       mtdcr (memcfgd, 0x04000000);
-
-       /* Power management idle timer set to the default. */
-       mtdcr (memcfga, mem_pmit);
-       mtdcr (memcfgd, 0x07c00000);
-
-       udelay (500);
-
-       /* Enable banks (DCE=1, BPRF=1, ECCDD=1, EMDUL=1) TODO */
-       mtdcr (memcfga, mem_mcopt1);
-       mtdcr (memcfgd, 0x90800000);
-
-#ifdef DEBUG
-       printf ("%s: done\n", __FUNCTION__);
-#endif
-       return SDRAM_LEN;
+       u16 *slot = (u16 *)SYS_SLOT_ADDRESS;
+       return in_be16(slot) & 0x7f;
 }
 
-/*---------------------------------------------------------------------------+
- * hcu_serial_number
- *---------------------------------------------------------------------------*/
-static u32 hcu_serial_number(void)
+/*
+ * get_serial_number
+ */
+u32 get_serial_number(void)
 {
        u32 *serial = (u32 *)CFG_FLASH_BASE;
 
-       if (*serial == 0xffffffff)
-               return get_ticks();
+       if (in_be32(serial) == 0xffffffff)
+               return 0;
 
-       return *serial;
+       return in_be32(serial);
 }
 
 
-/*---------------------------------------------------------------------------+
+/*
  * misc_init_r.
- *---------------------------------------------------------------------------*/
+ */
 
 int misc_init_r(void)
 {
-       char *s = getenv("ethaddr");
-       char *e;
-       int i;
-       u32 serial = hcu_serial_number();
-
-       for (i = 0; i < 6; ++i) {
-               gd->bd->bi_enetaddr[i] = s ? simple_strtoul (s, &e, 16) : 0;
-               if (s)
-                       s = (*e) ? e + 1 : e;
-       }
-
-       if (gd->bd->bi_enetaddr[3] == 0 &&
-           gd->bd->bi_enetaddr[4] == 0 &&
-           gd->bd->bi_enetaddr[5] == 0) {
-               char ethaddr[22];
-               /* [0..3] Must be in sync with CONFIG_ETHADDR */
-               gd->bd->bi_enetaddr[0] = 0x00;
-               gd->bd->bi_enetaddr[1] = 0x60;
-               gd->bd->bi_enetaddr[2] = 0x13;
-               gd->bd->bi_enetaddr[3] = (serial          >> 16) & 0xff;
-               gd->bd->bi_enetaddr[4] = (serial          >>  8) & 0xff;
-               gd->bd->bi_enetaddr[5] = (serial          >>  0) & 0xff;
-               sprintf (ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X\0",
-                        gd->bd->bi_enetaddr[0], gd->bd->bi_enetaddr[1],
-                        gd->bd->bi_enetaddr[2], gd->bd->bi_enetaddr[3],
-                        gd->bd->bi_enetaddr[4], gd->bd->bi_enetaddr[5]) ;
-               printf("%s: Setting eth %s serial 0x%x\n",  __FUNCTION__,
-                      ethaddr, serial);
-               setenv ("ethaddr", ethaddr);
-       }
+       common_misc_init_r();
+       set_params_for_sw_install( sys_install_requested(), "hcu4" );
        return 0;
 }
 
-#ifdef  DO_UGLY_SDRAM_WORKAROUND
-#include "i2c.h"
-
-void set_spd_default_value(unsigned int spd_addr,uchar def_val)
-{
-       uchar value;
-       int res = i2c_read(SPD_EEPROM_ADDRESS, spd_addr, 1, &value, 1) ;
-
-       if (res == 0 && value == 0xff) {
-               res = i2c_write(SPD_EEPROM_ADDRESS,
-                               spd_addr, 1, &def_val, 1) ;
-#ifdef DEBUG
-               printf("%s: Setting spd offset %3d to %3d res %d\n",
-                      __FUNCTION__, spd_addr,  def_val, res);
-#endif
-       }
-}
-#endif
-
 long int initdram(int board_type)
 {
        long dram_size = 0;
-
-#if !defined(CONFIG_SPD_EEPROM)
-       dram_size = fixed_hcu4_sdram();
-#else
-#ifdef  DO_UGLY_SDRAM_WORKAROUND
-       /* Workaround if you have no working I2C-EEPROM-SPD-configuration */
-       i2c_init(CFG_I2C_SPEED, CFG_I2C_SLAVE);
-       set_spd_default_value(2,  4); /* SDRAM Type */
-       set_spd_default_value(7,  0); /* module width, high byte */
-       set_spd_default_value(12, 1); /* Refresh or 0x81 */
-
-       /* Only correct for HCU3 with 32 MB RAM*/
-       /* Number of bytes used by module manufacturer */
-       set_spd_default_value( 0, 128);
-       set_spd_default_value( 1, 11 ); /* Total SPD memory size */
-       set_spd_default_value( 2, 4  ); /* Memory type */
-       set_spd_default_value( 3, 12 ); /* Number of row address bits */
-       set_spd_default_value( 4, 9  ); /* Number of column address bits */
-       set_spd_default_value( 5, 1  ); /* Number of module rows */
-       set_spd_default_value( 6, 32 ); /* Module data width, LSB */
-       set_spd_default_value( 7, 0  ); /* Module data width, MSB */
-       set_spd_default_value( 8, 1  ); /* Module interface signal levels */
-       /* SDRAM cycle time for highest CL (Tclk) */
-       set_spd_default_value( 9, 112);
-       /* SDRAM access time from clock for highest CL (Tac) */
-       set_spd_default_value(10, 84 );
-       set_spd_default_value(11, 2  ); /* Module configuration type */
-       set_spd_default_value(12, 128); /* Refresh rate/type */
-       set_spd_default_value(13, 16 ); /* Primary SDRAM width */
-       set_spd_default_value(14, 8  ); /* Error Checking SDRAM width */
-       /* SDRAM device attributes, min clock delay for back to back */
-       /*random column addresses (Tccd) */
-       set_spd_default_value(15, 1  );
-       /* SDRAM device attributes, burst lengths supported */
-       set_spd_default_value(16, 143);
-       /* SDRAM device attributes, number of banks on SDRAM device */
-       set_spd_default_value(17, 4  );
-       /* SDRAM device attributes, CAS latency */
-       set_spd_default_value(18, 6  );
-       /* SDRAM device attributes, CS latency */
-       set_spd_default_value(19, 1  );
-       /* SDRAM device attributes, WE latency */
-       set_spd_default_value(20, 1  );
-       set_spd_default_value(21, 0  ); /* SDRAM module attributes */
-       /* SDRAM device attributes, general */
-       set_spd_default_value(22, 14 );
-       /* SDRAM cycle time for 2nd highest CL (Tclk) */
-       set_spd_default_value(23, 117);
-       /* SDRAM access time from clock for2nd highest CL (Tac) */
-       set_spd_default_value(24, 84 );
-       /* SDRAM cycle time for 3rd highest CL (Tclk) */
-       set_spd_default_value(25, 0  );
-       /* SDRAM access time from clock for3rd highest CL (Tac) */
-       set_spd_default_value(26, 0  );
-       set_spd_default_value(27, 15 ); /* Minimum row precharge time (Trp) */
-       /* Minimum row active to row active delay (Trrd) */
-       set_spd_default_value(28, 14 );
-       set_spd_default_value(29, 15 ); /* Minimum CAS to RAS delay (Trcd) */
-       set_spd_default_value(30, 37 ); /* Minimum RAS pulse width (Tras) */
-       set_spd_default_value(31, 8  ); /* Module bank density */
-       /* Command and Address signal input setup time */
-       set_spd_default_value(32, 21 );
-       /* Command and Address signal input hold time */
-       set_spd_default_value(33, 8  );
-       set_spd_default_value(34, 21 ); /* Data signal input setup time */
-       set_spd_default_value(35, 8  ); /* Data signal input hold time */
-#endif  /* DO_UGLY_SDRAM_WORKAROUND */
-       dram_size = spd_sdram(0);
-#endif
+       u16 *boardVersReg = (u16 *) HCU_MACH_VERSIONS_REGISTER;
+       u16 generation = in_be16(boardVersReg) & 0xf0;
+       if (generation == HW_GENERATION_HCU3)
+               dram_size = 32*1024*1024;
+       else dram_size = 64*1024*1024;
+       fixed_hcu4_sdram(dram_size);
 
 #ifdef DEBUG
        show_sdram_registers();
 #endif
 
-#if defined(CFG_DRAM_TEST)
-       bcu4_testdram(dram_size);
-       printf("%s %d MB of SDRAM\n", __FUNCTION__, dram_size/(1024*1024));
-#endif
-
        return dram_size;
 }
+
+#if defined(CONFIG_POST)
+/*
+ * Returns 1 if keys pressed to start the power-on long-running tests
+ * Called from board_init_f().
+ */
+int post_hotkeys_pressed(void)
+{
+       return 0;       /* No hotkeys supported */
+}
+#endif /* CONFIG_POST */
+
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       ft_cpu_setup(blob, bd);
+
+}
+#endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */
index 27398b905b68a5e982c90fe123f8a37f76d21b4a..9f248a441d7074bf5a25ecb3aa98ba3f4f2ae5f5 100644 (file)
@@ -23,13 +23,14 @@ include $(TOPDIR)/config.mk
 LIB    = $(obj)lib$(BOARD).a
 
 vpath hcu_flash.c ../common
+vpath nm_bsp.c ../common
 
 # NOBJS : Netstal common objects
-NOBJS  = hcu_flash.o
+NOBJS  = ../common/hcu_flash.o ../common/nm_bsp.o
 COBJS  = $(BOARD).o sdram.o
 SOBJS  = init.o
 
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c) ../common/$(NOBJS:.o=.c)
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c) $(NOBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
 NOBJS  := $(addprefix $(obj),$(NOBJS))
 SOBJS  := $(addprefix $(obj),$(SOBJS))
index 3118da9e06ef1a97d793c6a4ee2a70d7184c4536..c205108ff1b739c75a34ea6b16318204f8e274c5 100644 (file)
@@ -10,9 +10,6 @@ TODO:
 - Fix RTS/CTS problem (HW?)
   CONFIG_SERIAL_MULTI/CONFIG_SERIAL_SOFTWARE_FIFO hangs after
   Switching to interrupt driven serial input mode
-- Make vxWorks start from u-boot. Possible reasons
-    - Does vxWorks need an entry for the Machine Check interrupt like this
-      tlbentry( 0x40000000, SZ_256M, 0, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) ?
 
 Caveats:
 --------
index cfd574412c1aefebcbdf128b4e0d12898fa3038e..51ddb76cd8a3e3cf0bdb7271594700fbd84e2224 100644 (file)
@@ -21,7 +21,7 @@
 # Netstal Maschinen AG: HCU5 boards
 #
 
-TEXT_BASE = 0xFFFa0000
+TEXT_BASE = 0xFFFB0000
 
 PLATFORM_CPPFLAGS += -DCONFIG_440=1
 
index b9b10fdc29accc5b808eabc0b34c52ecb96447bf..2c7afe277e71e99cfec328c5ff15d69a8f529ae2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *(C) Copyright 2005-2007 Netstal Maschinen AG
+ *(C) Copyright 2005-2008 Netstal Maschinen AG
  *    Niklaus Giger (Niklaus.Giger@netstal.com)
  *
  *    This source code is free software; you can redistribute it
 #include <common.h>
 #include <asm/processor.h>
 #include <ppc440.h>
-#include <asm/mmu.h>
-#include <net.h>
+#include <asm/io.h>
+#include  "../common/nm.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
-void hcu_led_set(u32 value);
-
 extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
 
 #undef BOOTSTRAP_OPTION_A_ACTIVE
@@ -42,23 +40,10 @@ extern flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
 #define SDR0_ECID2             0x0082
 #define SDR0_ECID3             0x0083
 
-#define SYS_IO_ADDRESS         (CFG_CS_2 + 0x00e00000)
+#define SYS_IO_ADDRESS                 (CFG_CS_2 + 0x00e00000)
 #define SYS_SLOT_ADDRESS               (CFG_CPLD + 0x00400000)
-
-#define DEFAULT_ETH_ADDR  "ethaddr"
-/* ethaddr for first or etha1ddr for second ethernet */
-
-enum {
-       /* HW_GENERATION_HCU1 is no longer supported */
-       HW_GENERATION_HCU2  = 0x10,
-       HW_GENERATION_HCU3  = 0x10,
-       HW_GENERATION_HCU4  = 0x20,
-       HW_GENERATION_HCU5  = 0x30,
-       HW_GENERATION_MCU   = 0x08,
-       HW_GENERATION_MCU20 = 0x0a,
-       HW_GENERATION_MCU25 = 0x09,
-};
-
+#define HCU_DIGITAL_IO_REGISTER        (CFG_CPLD + 0x0500000)
+#define HCU_SW_INSTALL_REQUESTED       0x10
 
 /*
  * This function is run very early, out of flash, and before devices are
@@ -72,7 +57,6 @@ enum {
 
 int board_early_init_f(void)
 {
-       u32 reg;
 
 #ifdef BOOTSTRAP_OPTION_A_ACTIVE
        /* Booting with Bootstrap Option A
@@ -113,10 +97,9 @@ int board_early_init_f(void)
        mtdcr(ebccfga, xbcfg);
        mtdcr(ebccfgd, 0xb8400000);
 
-       /*--------------------------------------------------------------------
+       /*
         * Setup the GPIO pins
-        *-------------------------------------------------------------------*/
-       /* test-only: take GPIO init from pcs440ep ???? in config file */
+        */
        out32(GPIO0_OR, 0x00000000);
        out32(GPIO0_TCR, 0x7C2FF1CF);
        out32(GPIO0_OSRL, 0x40055000);
@@ -143,9 +126,9 @@ int board_early_init_f(void)
        out32(GPIO1_ISR3L, 0x00000000);
        out32(GPIO1_ISR3H, 0x00000000);
 
-       /*--------------------------------------------------------------------
+       /*
         * Setup the interrupt controller polarities, triggers, etc.
-        *-------------------------------------------------------------------*/
+        */
        mtdcr(uic0sr, 0xffffffff);      /* clear all */
        mtdcr(uic0er, 0x00000000);      /* disable all */
        mtdcr(uic0cr, 0x00000005);      /* ATI & UIC1 crit are critical */
@@ -172,12 +155,6 @@ int board_early_init_f(void)
        mtsdr(sdr_pfc0, 0x00003E00);    /* Pin function:  */
        mtsdr(sdr_pfc1, 0x00848000);    /* Pin function: UART0 has 4 pins */
 
-       /* PCI arbiter enabled */
-       mfsdr(sdr_pci0, reg);
-       mtsdr(sdr_pci0, 0x80000000 | reg);
-
-       pci_pre_init(0);
-
        /* setup BOOT FLASH */
        mtsdr(SDR0_CUST0, 0xC0082350);
 
@@ -192,33 +169,27 @@ int board_pre_init(void)
 
 #endif
 
+int sys_install_requested(void)
+{
+       u16 *ioValuePtr = (u16 *)HCU_DIGITAL_IO_REGISTER;
+       return (in_be16(ioValuePtr) & HCU_SW_INSTALL_REQUESTED) != 0;
+}
+
 int checkboard(void)
 {
-       unsigned int j;
        u16 *hwVersReg    = (u16 *) HCU_HW_VERSION_REGISTER;
        u16 *boardVersReg = (u16 *) HCU_CPLD_VERSION_REGISTER;
-       u16 generation = *boardVersReg & 0xf0;
-       u16 index      = *boardVersReg & 0x0f;
+       u16 generation = in_be16(boardVersReg) & 0xf0;
+       u16 index      = in_be16(boardVersReg) & 0x0f;
        u32 ecid0, ecid1, ecid2, ecid3;
 
-       printf("Netstal Maschinen AG: ");
-       if (generation == HW_GENERATION_HCU3)
-               printf("HCU3: index %d", index);
-       else if (generation == HW_GENERATION_HCU4)
-               printf("HCU4: index %d", index);
-       else if (generation == HW_GENERATION_HCU5)
-               printf("HCU5: index %d", index);
-       printf(" HW 0x%02x\n", *hwVersReg & 0xff);
+       nm_show_print(generation, index, in_be16(hwVersReg) & 0xff);
        mfsdr(SDR0_ECID0, ecid0);
        mfsdr(SDR0_ECID1, ecid1);
        mfsdr(SDR0_ECID2, ecid2);
        mfsdr(SDR0_ECID3, ecid3);
 
        printf("Chip ID 0x%x 0x%x 0x%x 0x%x\n", ecid0, ecid1, ecid2, ecid3);
-       for (j = 0;j < 6; j++) {
-               hcu_led_set(1 << j);
-               udelay(200 * 1000);
-       }
 
        return 0;
 }
@@ -228,97 +199,47 @@ u32 hcu_led_get(void)
        return in16(SYS_IO_ADDRESS) & 0x3f;
 }
 
-/*---------------------------------------------------------------------------+
+/*
  * hcu_led_set  value to be placed into the LEDs (max 6 bit)
- *---------------------------------------------------------------------------*/
+ */
 void hcu_led_set(u32 value)
 {
        out16(SYS_IO_ADDRESS, value);
 }
 
-/*---------------------------------------------------------------------------+
+/*
  * get_serial_number
- *---------------------------------------------------------------------------*/
-static u32 get_serial_number(void)
+ */
+u32 get_serial_number(void)
 {
        u32 *serial = (u32 *)CFG_FLASH_BASE;
 
-       if (*serial == 0xffffffff)
+       if (in_be32(serial) == 0xffffffff)
                return 0;
 
-       return *serial;
+       return in_be32(serial);
 }
 
 
-/*---------------------------------------------------------------------------+
+/*
  * hcu_get_slot
- *---------------------------------------------------------------------------*/
+ */
 u32 hcu_get_slot(void)
 {
        u16 *slot = (u16 *)SYS_SLOT_ADDRESS;
-       return (*slot) & 0x7f;
+       return in_be16(slot) & 0x7f;
 }
 
 
-/*---------------------------------------------------------------------------+
+/*
  * misc_init_r.
- *---------------------------------------------------------------------------*/
+ */
 int misc_init_r(void)
 {
-       char *s = getenv(DEFAULT_ETH_ADDR);
-       char *e;
-       int i;
-       u32 serial = get_serial_number();
        unsigned long usb2d0cr = 0;
        unsigned long usb2phy0cr, usb2h0cr = 0;
        unsigned long sdr0_pfc1;
 
-       for (i = 0; i < 6; ++i) {
-               gd->bd->bi_enetaddr[i] = s ? simple_strtoul(s, &e, 16) : 0;
-               if (s)
-                       s = (*e) ? e + 1 : e;
-       }
-
-       if (gd->bd->bi_enetaddr[3] == 0 &&
-           gd->bd->bi_enetaddr[4] == 0 &&
-           gd->bd->bi_enetaddr[5] == 0) {
-               char ethaddr[22];
-
-               /* Must be in sync with CONFIG_ETHADDR */
-               gd->bd->bi_enetaddr[0] = 0x00;
-               gd->bd->bi_enetaddr[1] = 0x60;
-               gd->bd->bi_enetaddr[2] = 0x13;
-               gd->bd->bi_enetaddr[3] = (serial >> 16) & 0xff;
-               gd->bd->bi_enetaddr[4] = (serial >>  8) & 0xff;
-               gd->bd->bi_enetaddr[5] = hcu_get_slot();
-               sprintf(ethaddr, "%02X:%02X:%02X:%02X:%02X:%02X\0",
-                       gd->bd->bi_enetaddr[0], gd->bd->bi_enetaddr[1],
-                       gd->bd->bi_enetaddr[2], gd->bd->bi_enetaddr[3],
-                       gd->bd->bi_enetaddr[4], gd->bd->bi_enetaddr[5]) ;
-               printf("%s: Setting eth %s serial 0x%x\n",  __FUNCTION__,
-                      ethaddr, serial);
-               setenv(DEFAULT_ETH_ADDR, ethaddr);
-       }
-
-       /* IP-Adress update */
-       {
-               IPaddr_t ipaddr;
-               char *ipstring;
-
-               ipstring = getenv("ipaddr");
-               if (ipstring == 0)
-                       ipaddr = string_to_ip("172.25.1.99");
-               else
-                       ipaddr = string_to_ip(ipstring);
-               if ((ipaddr & 0xff) != (32 + hcu_get_slot())) {
-                       char tmp[22];
-
-                       ipaddr = (ipaddr & 0xffffff00) + 32 + hcu_get_slot();
-                       ip_to_string (ipaddr, tmp);
-                       printf("%s: enforce %s\n",  __FUNCTION__, tmp);
-                       setenv("ipaddr", tmp);
-               }
-       }
 #ifdef CFG_ENV_IS_IN_FLASH
        /* Monitor protection ON by default */
        (void)flash_protect(FLAG_PROTECT_SET,
@@ -326,11 +247,13 @@ int misc_init_r(void)
                            0xffffffff,
                            &flash_info[0]);
 
+#ifdef CFG_ENV_ADDR_REDUND
        /* Env protection ON by default */
        (void)flash_protect(FLAG_PROTECT_SET,
                            CFG_ENV_ADDR_REDUND,
                            CFG_ENV_ADDR_REDUND + 2*CFG_ENV_SECT_SIZE - 1,
                            &flash_info[0]);
+#endif
 #endif
 
        /*
@@ -355,7 +278,8 @@ int misc_init_r(void)
        usb2phy0cr = usb2phy0cr | SDR0_USB2PHY0CR_UTMICN_HOST;          /*1*/
 
        /* An 8-bit/60MHz interface is the only possible alternative
-          when connecting the Device to the PHY */
+        *  when connecting the Device to the PHY
+        */
        usb2h0cr   = usb2h0cr &~SDR0_USB2H0CR_WDINT_MASK;
        usb2h0cr   = usb2h0cr | SDR0_USB2H0CR_WDINT_16BIT_30MHZ;        /*1*/
 
@@ -376,14 +300,37 @@ int misc_init_r(void)
        mtsdr(SDR0_SRST1, 0x00000000);
        udelay(1000);
        mtsdr(SDR0_SRST0, 0x00000000);
-
        printf("USB:   Host(int phy) Device(ext phy)\n");
 
+       common_misc_init_r();
+       set_params_for_sw_install( sys_install_requested(), "hcu5" );
+       /* We cannot easily enable trace before, as there are other
+        * routines messing around with sdr0_pfc1. And I do not need it.
+        */
+       if (mfspr(dbcr0) & 0x80000000) {
+               /* External debugger alive
+                * enable trace facilty for Lauterback
+                * CCR0[DAPUIB]=0       Enable broadcast of instruction data
+                *                      to auxiliary processor interface
+                * CCR0[DTB]=0          Enable broadcast of trace information
+                * SDR0_PFC0[TRE]       Trace signals are enabled instead of
+                *                      GPIO49-63
+                */
+               mtspr(ccr0, mfspr(ccr0)  &~ 0x00108000);
+               mtsdr(SDR0_PFC0, sdr0_pfc1 | 0x00000100);
+       }
        return 0;
 }
+#ifdef CONFIG_PCI
+int board_with_pci(void)
+{
+       u32 reg;
 
-#if defined(CONFIG_PCI)
-/*************************************************************************
+       mfsdr(sdr_pci0, reg);
+       return (reg & SDR0_XCR_PAE_MASK);
+}
+
+/*
  *  pci_pre_init
  *
  *  This routine is called just prior to registering the hose and gives
@@ -394,81 +341,64 @@ int misc_init_r(void)
  *     (add regions, override default access routines, etc) or perform
  *     certain pre-initialization actions.
  *
- ************************************************************************/
+ */
 int pci_pre_init(struct pci_controller *hose)
 {
        unsigned long addr;
 
-       /*-------------------------------------------------------------------+
-        * As of errata version 0.4, CHIP_8: Incorrect Write to DDR SDRAM.
-        * Workaround: Disable write pipelining to DDR SDRAM by setting
-        * PLB0_ACR[WRP] = 0.
-        *-------------------------------------------------------------------*/
+       if (!board_with_pci()) { return 0; }
 
-       /*-------------------------------------------------------------------+
-         | Set priority for all PLB3 devices to 0.
-         | Set PLB3 arbiter to fair mode.
-         +-------------------------------------------------------------------*/
+       /*
+        * Set priority for all PLB3 devices to 0.
+        * Set PLB3 arbiter to fair mode.
+        */
        mfsdr(sdr_amp1, addr);
        mtsdr(sdr_amp1, (addr & 0x000000FF) | 0x0000FF00);
        addr = mfdcr(plb3_acr);
-       /* mtdcr(plb3_acr, addr & ~plb1_acr_wrp_mask); */  /* ngngng */
        mtdcr(plb3_acr, addr | 0x80000000); /* Sequoia */
 
-       /*-------------------------------------------------------------------+
-         | Set priority for all PLB4 devices to 0.
-         +-------------------------------------------------------------------*/
+       /*
+        * Set priority for all PLB4 devices to 0.
+        */
        mfsdr(sdr_amp0, addr);
        mtsdr(sdr_amp0, (addr & 0x000000FF) | 0x0000FF00);
        addr = mfdcr(plb4_acr) | 0xa0000000;    /* Was 0x8---- */
-       /* mtdcr(plb4_acr, addr & ~plb1_acr_wrp_mask); */  /* ngngng */
        mtdcr(plb4_acr, addr);  /* Sequoia */
 
-       /*-------------------------------------------------------------------+
-         | Set Nebula PLB4 arbiter to fair mode.
-         +-------------------------------------------------------------------*/
-       /* Segment0 */
-       addr = (mfdcr(plb0_acr) & ~plb0_acr_ppm_mask) | plb0_acr_ppm_fair;
-       addr = (addr & ~plb0_acr_hbu_mask) | plb0_acr_hbu_enabled;
-       addr = (addr & ~plb0_acr_rdp_mask) | plb0_acr_rdp_4deep;
-       /* addr = (addr & ~plb0_acr_wrp_mask); */  /* ngngng */
-       addr = (addr & ~plb0_acr_wrp_mask) | plb0_acr_wrp_2deep; /* Sequoia */
-
-       /* mtdcr(plb0_acr, addr); */ /* Sequoia */
+       /*
+        * As of errata version 0.4, CHIP_8: Incorrect Write to DDR SDRAM.
+        * Workaround: Disable write pipelining to DDR SDRAM by setting
+        * PLB0_ACR[WRP] = 0.
+        */
        mtdcr(plb0_acr, 0);  /* PATCH HAB: WRITE PIPELINING OFF */
 
        /* Segment1 */
-       addr = (mfdcr(plb1_acr) & ~plb1_acr_ppm_mask) | plb1_acr_ppm_fair;
-       addr = (addr & ~plb1_acr_hbu_mask) | plb1_acr_hbu_enabled;
-       addr = (addr & ~plb1_acr_rdp_mask) | plb1_acr_rdp_4deep;
-       addr = (addr & ~plb1_acr_wrp_mask) ;
-       /* mtdcr(plb1_acr, addr); */ /* Sequoia */
        mtdcr(plb1_acr, 0);  /* PATCH HAB: WRITE PIPELINING OFF */
 
-       return 1;
+       return board_with_pci();
 }
 
-/*************************************************************************
+/*
  *  pci_target_init
  *
  *     The bootstrap configuration provides default settings for the pci
  *     inbound map (PIM). But the bootstrap config choices are limited and
  *     may not be sufficient for a given board.
  *
- ************************************************************************/
+ */
 void pci_target_init(struct pci_controller *hose)
 {
-       /*-------------------------------------------------------------+
+       if (!board_with_pci()) { return; }
+       /*
         * Set up Direct MMIO registers
-        *-------------------------------------------------------------*/
-       /*-------------------------------------------------------------+
-         | PowerPC440EPX PCI Master configuration.
-         | Map one 1Gig range of PLB/processor addresses to PCI memory space.
-         |   PLB address 0xA0000000-0xDFFFFFFF ==> PCI address
-         |               0xA0000000-0xDFFFFFFF
-         |   Use byte reversed out routines to handle endianess.
-         | Make this region non-prefetchable.
-         +-------------------------------------------------------------*/
+        *
+        * PowerPC440EPX PCI Master configuration.
+        * Map one 1Gig range of PLB/processor addresses to PCI memory space.
+        *   PLB address 0xA0000000-0xDFFFFFFF ==> PCI address
+        *                0xA0000000-0xDFFFFFFF
+        *   Use byte reversed out routines to handle endianess.
+        * Make this region non-prefetchable.
+        */
        /* PMM0 Mask/Attribute - disabled b4 setting */
        out32r(PCIX0_PMM0MA, 0x00000000);
        out32r(PCIX0_PMM0LA, CFG_PCI_MEMBASE);  /* PMM0 Local Address */
@@ -492,9 +422,9 @@ void pci_target_init(struct pci_controller *hose)
        out32r(PCIX0_PTM2MS, 0);        /* Memory Size/Attribute */
        out32r(PCIX0_PTM2LA, 0);        /* Local Addr. Reg */
 
-       /*------------------------------------------------------------------+
+       /*
         * Set up Configuration registers
-        *------------------------------------------------------------------*/
+        */
 
        /* Program the board's subsystem id/vendor id */
        pci_write_config_word(0, PCI_SUBSYSTEM_VENDOR_ID,
@@ -513,26 +443,27 @@ void pci_target_init(struct pci_controller *hose)
        pci_write_config_dword(0, PCI_BRDGOPT2, 0x00000101);
 }
 
-/*************************************************************************
+/*
  *  pci_master_init
  *
- ************************************************************************/
+ */
 void pci_master_init(struct pci_controller *hose)
 {
        unsigned short temp_short;
+       if (!board_with_pci()) { return; }
 
-       /*---------------------------------------------------------------+
-         | Write the PowerPC440 EP PCI Configuration regs.
-         |   Enable PowerPC440 EP to be a master on the PCI bus (PMM).
-         |   Enable PowerPC440 EP to act as a PCI memory target (PTM).
-         +--------------------------------------------------------------*/
+       /*---------------------------------------------------------------
+        * Write the PowerPC440 EP PCI Configuration regs.
+        *   Enable PowerPC440 EP to be a master on the PCI bus (PMM).
+        *   Enable PowerPC440 EP to act as a PCI memory target (PTM).
+        *--------------------------------------------------------------*/
        pci_read_config_word(0, PCI_COMMAND, &temp_short);
        pci_write_config_word(0, PCI_COMMAND,
                              temp_short | PCI_COMMAND_MASTER |
                              PCI_COMMAND_MEMORY);
 }
 
-/*************************************************************************
+/*
  *  is_pci_host
  *
  *     This routine is called to determine if a pci scan should be
@@ -545,10 +476,28 @@ void pci_master_init(struct pci_controller *hose)
  *
  *     Return 0 for adapter mode, non-zero for host (monarch) mode.
  *
- *
- ************************************************************************/
+ */
 int is_pci_host(struct pci_controller *hose)
 {
        return 1;
 }
 #endif  /* defined(CONFIG_PCI) */
+
+#if defined(CONFIG_POST)
+/*
+ * Returns 1 if keys pressed to start the power-on long-running tests
+ * Called from board_init_f().
+ */
+int post_hotkeys_pressed(void)
+{
+       return 0;       /* No hotkeys supported */
+}
+#endif /* CONFIG_POST */
+
+#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       ft_cpu_setup(blob, bd);
+
+}
+#endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */
index 5ab6cd24d76044a9a7e8c016584ce1c359ec6bbe..188272e7807e5013d397fc30b5e121bc81c78d18 100644 (file)
 tlbtab:
        tlbtab_start
 
-       /* vxWorks needs this entry for the Machine Check interrupt,  */
-       /* tlbentry( 0x40000000, SZ_256M, 0, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) */
+       /* TLB#0: vxWorks needs this entry for the Machine Check interrupt, */
+       tlbentry( 0x40000000, SZ_256M, 0, 0, AC_R|AC_W|AC_X|SA_G|SA_I )
+       /* TLB#1: TLB-entry for DDR SDRAM (Up to 2GB) */
+       tlbentry( CFG_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0,
+               AC_R|AC_W|AC_X|SA_G|SA_I )
+
+       /* TLB#2: TLB-entry for EBC */
+       tlbentry( 0x80000000, SZ_256M, 0x80000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I)
 
        /*
-        * BOOT_CS (FLASH) must be second. Before relocation SA_I can be off to use the
-        * speed up boot process. It is patched after relocation to enable SA_I
+        * TLB#3: BOOT_CS (FLASH) must be forth. Before relocation SA_I can be
+        * off to use the speed up boot process. It is patched after relocation
+        * to enable SA_I
         */
-       tlbentry( CFG_BOOT_BASE_ADDR, SZ_1M, CFG_BOOT_BASE_ADDR, 1, AC_R|AC_W|AC_X|SA_G )
+       tlbentry( CFG_BOOT_BASE_ADDR, SZ_1M, CFG_BOOT_BASE_ADDR, 1,
+               AC_R|AC_W|AC_X|SA_G)
 
-       /* TLB-entry for PCI Memory */
-       tlbentry( CFG_PCI_MEMBASE, SZ_256M, CFG_PCI_MEMBASE, 1, AC_R|AC_W|SA_G|SA_I )
-       tlbentry( CFG_PCI_MEMBASE1, SZ_256M, CFG_PCI_MEMBASE1, 1, AC_R|AC_W|SA_G|SA_I )
-       tlbentry( CFG_PCI_MEMBASE2, SZ_256M, CFG_PCI_MEMBASE2, 1, AC_R|AC_W|SA_G|SA_I )
-       tlbentry( CFG_PCI_MEMBASE3, SZ_256M, CFG_PCI_MEMBASE3, 1, AC_R|AC_W|SA_G|SA_I )
+       /*
+        * TLB entries for SDRAM are not needed on this platform.
+        * They are dynamically generated in the SPD DDR(2) detection
+        * routine.
+        */
 
-       /* TLB-entry for EBC (CFG_CPLD) */
-       /* tlbentry( CFG_CPLD, SZ_1K, CFG_CPLD, 1, AC_R|AC_W|AC_X|SA_G|SA_I ) */
-       /*              CAN */
-       tlbentry( CFG_CS_1, SZ_16M, CFG_CS_1, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
-        /*             IMC + CPLD */
-       tlbentry( CFG_CS_2, SZ_16M, CFG_CS_2, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
-       tlbentry( CFG_CS_2 + 0x1000000, SZ_16M, CFG_CS_2 + 0x1000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
-        /*             IMC-Fast */
-       tlbentry( CFG_CS_3, SZ_16M, CFG_CS_3, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
-       tlbentry( CFG_CS_3 + 0x1000000, SZ_16M, CFG_CS_3 + 0x1000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
+       /* TLB#4: */
+       tlbentry( CFG_PCI_MEMBASE1, SZ_256M, CFG_PCI_MEMBASE1, 1,
+               AC_R|AC_W|SA_G|SA_I )
+       /* TLB#5: */
+       tlbentry( CFG_PCI_MEMBASE2, SZ_256M, CFG_PCI_MEMBASE2, 1,
+               AC_R|AC_W|SA_G|SA_I )
+       /* TLB#6: */
+       tlbentry( CFG_PCI_MEMBASE3, SZ_256M, CFG_PCI_MEMBASE3, 1,
+               AC_R|AC_W|SA_G|SA_I )
 
        /* TLB-entry for Internal Registers & OCM */
-       tlbentry( CFG_PCI_BASE, SZ_16M, 0xe0000000, 0,  AC_R|AC_W|AC_X|SA_I )
+       /* TLB#7: */
+       tlbentry( 0xe0000000, SZ_16M, 0xe0000000, 0,
+               AC_R|AC_W|AC_X|SA_G|SA_I )
 
        /*TLB-entry PCI registers*/
+       /* TLB#8: */
        tlbentry( 0xEEC00000, SZ_1K, 0xEEC00000, 1,  AC_R|AC_W|AC_X|SA_G|SA_I )
 
        /* TLB-entry for peripherals */
+       /* TLB#9: */
        tlbentry( 0xEF000000, SZ_16M, 0xEF000000, 1, AC_R|AC_W|AC_X|SA_G|SA_I)
 
-       /* TLB for SDRAM will be added by initdram (sdram.c) */
+       /*              CAN */
+       /* TLB#10: */
+       tlbentry( CFG_CS_1, SZ_1K, CFG_CS_1, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
+
+       /* TLB#11:  CPLD and IMC-Standard 32 MB */
+       tlbentry( CFG_CS_2, SZ_16M, CFG_CS_2, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
+
+       /* TLB#12: */
+       tlbentry( CFG_CS_2 + 0x1000000, SZ_16M, CFG_CS_2 + 0x1000000, 1,
+               AC_R|AC_W|AC_X|SA_G|SA_I )
+
+        /*             IMC-Fast 32 MB */
+       /* TLB#13: */
+       tlbentry( CFG_CS_3, SZ_16M, CFG_CS_3, 1, AC_R|AC_W|AC_X|SA_G|SA_I )
+       /* TLB#14: */
+       tlbentry( CFG_CS_3 + 0x1000000, SZ_16M, CFG_CS_3, 1,
+               AC_R|AC_W|AC_X|SA_G|SA_I )
 
        tlbtab_end
index cbb2839cc0298ab8335c50b2b34c9221e79ab92f..5435de1249c82c56368bca3890906eca85848bad 100644 (file)
@@ -62,11 +62,13 @@ void dflush(void);
 #define DDR0_22_CTRL_RAW_ECC_ENABLE       0x03000000 /* ECC correcting on */
 #define DDR0_03_CASLAT_DECODE(n)            ((((unsigned long)(n))>>16)&0x7)
 
-#ifdef CFG_ENABLE_SDRAM_CACHE
-#define MY_TLB_WORD2_I_ENABLE  0               /* enable caching on DDR2 */
-#else
-#define MY_TLB_WORD2_I_ENABLE TLB_WORD2_I_ENABLE /* disable caching on DDR2 */
-#endif
+#define ECC_RAM                                0x03267F0B
+#define NO_ECC_RAM                     0x00267F0B
+
+#define HCU_HW_SDRAM_CONFIG_MASK       0x7
+
+#define MY_TLB_WORD2_I_ENABLE TLB_WORD2_I_ENABLE
+       /* disable caching on DDR2 */
 
 void program_tlb(u32 phys_addr, u32 virt_addr, u32 size, u32 tlb_word2_i_value);
 
@@ -74,6 +76,7 @@ void board_add_ram_info(int use_default)
 {
        PPC4xx_SYS_INFO board_cfg;
        u32 val;
+
        mfsdram(DDR0_22, val);
        val &= DDR0_22_CTRL_RAW_MASK;
        switch (val) {
@@ -157,38 +160,35 @@ static void blank_string(int size)
 /*---------------------------------------------------------------------------+
  * program_ecc.
  *---------------------------------------------------------------------------*/
-static void program_ecc(unsigned long start_address, unsigned long num_bytes,
-                       unsigned long tlb_word2_i_value)
+static void program_ecc(unsigned long start_address, unsigned long num_bytes)
 {
-       unsigned long current_address= start_address;
-       int loopi = 0;
        u32 val;
-
        char str[] = "ECC generation -";
-       char slash[] = "\\|/-\\|/-";
+#if defined(CONFIG_PRAM)
+       u32 *magic;
+
+       /* Check whether vxWorks is using EDR logging, if yes zero */
+       /* also PostMortem and user reserved memory */
+       magic = (u32 *)in_be32((u32 *)(start_address + num_bytes -
+                                      (CONFIG_PRAM*1024) + sizeof(u32)));
+
+       debug("\n%s:  CONFIG_PRAM %d kB magic 0x%x 0x%p -> 0x%x\n", __FUNCTION__,
+              CONFIG_PRAM,
+              start_address + num_bytes - (CONFIG_PRAM*1024) + sizeof(u32),
+              magic, in_be32(magic));
+       if (in_be32(magic) == 0xbeefbabe)
+               num_bytes -= (CONFIG_PRAM*1024) - PM_RESERVED_MEM;
+#endif
 
        sync();
        eieio();
 
        puts(str);
 
-       if (tlb_word2_i_value == TLB_WORD2_I_ENABLE) {
-               /* ECC bit set method for non-cached memory */
-               /* This takes various seconds */
-               for(current_address = 0; current_address < num_bytes;
-                    current_address += sizeof(u32)) {
-                       *(u32 *)current_address = 0;
-                       if ((current_address % (2 << 20)) == 0) {
-                               putc('\b');
-                               putc(slash[loopi++ % 8]);
-                       }
-               }
-       } else {
-               /* ECC bit set method for cached memory */
-               /* Fast method, no noticeable delay */
-               dcbz_area(start_address, num_bytes);
-               dflush();
-       }
+       /* ECC bit set method for cached memory */
+       /* Fast method, no noticeable delay */
+       dcbz_area(start_address, num_bytes);
+       dflush();
        blank_string(strlen(str));
 
        /* Clear error status */
@@ -196,7 +196,7 @@ static void program_ecc(unsigned long start_address, unsigned long num_bytes,
        mtsdram(DDR0_00, val | DDR0_00_INT_ACK_ALL);
 
        /*
-        * Clear possible errors
+        * Clear possible ECC errors
         * If not done, then we could get an interrupt later on when
         * exceptions are enabled.
         */
@@ -209,9 +209,9 @@ static void program_ecc(unsigned long start_address, unsigned long num_bytes,
 
        return;
 }
-
 #endif
 
+
 /***********************************************************************
  *
  * initdram -- 440EPx's DDR controller is a DENALI Core
@@ -219,9 +219,6 @@ static void program_ecc(unsigned long start_address, unsigned long num_bytes,
  ************************************************************************/
 long int initdram (int board_type)
 {
-#define        HCU_HW_SDRAM_CONFIG_MASK 0x7
-#define INVALID_HW_CONFIG   "Invalid HW-Config"
-       u16 *hwVersReg = (u16 *) HCU_HW_VERSION_REGISTER;
        unsigned int dram_size = 0;
 
        mtsdram(DDR0_02, 0x00000000);
@@ -232,24 +229,23 @@ long int initdram (int board_type)
        mtsdram(DDR0_03, 0x02030602);
        mtsdram(DDR0_04, 0x0A020200);
        mtsdram(DDR0_05, 0x02020307);
-       switch (*hwVersReg & HCU_HW_SDRAM_CONFIG_MASK) {
-       case 0:
-               dram_size = 128 * 1024 * 1024 ;
-               mtsdram(DDR0_06, 0x0102C80D);  /* 128MB RAM */
-               mtsdram(DDR0_11, 0x000FC800);  /* 128MB RAM */
-               mtsdram(DDR0_43, 0x030A0300);  /* 128MB RAM */
-               break;
+       switch (in_be16((u16 *)HCU_HW_VERSION_REGISTER) & HCU_HW_SDRAM_CONFIG_MASK) {
        case 1:
                dram_size = 256 * 1024 * 1024 ;
                mtsdram(DDR0_06, 0x0102C812);  /* 256MB RAM */
                mtsdram(DDR0_11, 0x0014C800);  /* 256MB RAM */
                mtsdram(DDR0_43, 0x030A0200);  /* 256MB RAM */
                break;
+       case 0:
        default:
-               sdram_panic(INVALID_HW_CONFIG);
+               dram_size = 128 * 1024 * 1024 ;
+               mtsdram(DDR0_06, 0x0102C80D);  /* 128MB RAM */
+               mtsdram(DDR0_11, 0x000FC800);  /* 128MB RAM */
+               mtsdram(DDR0_43, 0x030A0300);  /* 128MB RAM */
                break;
        }
        mtsdram(DDR0_07, 0x00090100);
+
        /*
         * TCPD=200 cycles of clock input is required to lock the DLL.
         * CKE must be HIGH the entire time.mtsdram(DDR0_08, 0x02C80001);
@@ -264,8 +260,6 @@ long int initdram (int board_type)
        mtsdram(DDR0_19, 0x1D1D1D1D);
        mtsdram(DDR0_20, 0x0B0B0B0B);
        mtsdram(DDR0_21, 0x0B0B0B0B);
-       #define ECC_RAM  0x03267F0B
-       #define NO_ECC_RAM  0x00267F0B
 #ifdef CONFIG_DDR_ECC
        mtsdram(DDR0_22, ECC_RAM);
 #else
@@ -288,7 +282,7 @@ long int initdram (int board_type)
         * Program tlb entries for this size (dynamic)
         */
        remove_tlb(CFG_SDRAM_BASE, 256 << 20);
-       program_tlb(0, 0, dram_size, MY_TLB_WORD2_I_ENABLE);
+       program_tlb(0, 0, dram_size, TLB_WORD2_W_ENABLE | TLB_WORD2_I_ENABLE);
 
        /*
         * Setup 2nd TLB with same physical address but different virtual
@@ -296,13 +290,11 @@ long int initdram (int board_type)
         */
        program_tlb(0, CFG_DDR_CACHED_ADDR, dram_size, 0);
 
-       /* Diminish RAM to initialize */
-       dram_size = dram_size - 32 ;
 #ifdef CONFIG_DDR_ECC
        /*
         * If ECC is enabled, initialize the parity bits.
         */
-       program_ecc(CFG_DDR_CACHED_ADDR, dram_size, 0);
+       program_ecc(CFG_DDR_CACHED_ADDR, dram_size);
 #endif
 
        return (dram_size);
index c517f7b556f3d1c5e5e3c446900e73efb6c2e0cc..2c48316c53c373294b9bdeaf557b20c7d00c6cb8 100644 (file)
@@ -137,7 +137,7 @@ SECTIONS
    *(COMMON)
   }
 
-  ppcenv_assert = ASSERT(. < 0xFFFF8000, ".bss section too big, overlaps .ppcenv section. Please update your confguration: CFG_MONITOR_BASE, CFG_MONITOR_LEN and TEXT_BASE may need to be modified.");
+  ppcenv_assert = ASSERT(. < 0xFFFFB000, ".bss section too big, overlaps .ppcenv section. Please update your confguration: CFG_MONITOR_BASE, CFG_MONITOR_LEN and TEXT_BASE may need to be modified.");
 
   _end = . ;
   PROVIDE (end = .);
index 29136508f582978c220d00246adcd4034c1fe24d..be243885be641cdc9af3bb01aa39535c368fcef3 100644 (file)
@@ -25,9 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o
-SOBJS  := init.o
-#SOBJS :=
+COBJS  := $(BOARD).o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/pm854/init.S b/board/pm854/init.S
deleted file mode 100644 (file)
index 0a403ab..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright 2004 Freescale Semiconductor.
- * Copyright (C) 2002,2003, Motorola Inc.
- * Xianghua Xiao <X.Xiao@motorola.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long 13
-
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-#error("Update the number of table entries in tlb1_entry")
-#endif
-
-       /*
-        * TLB0         16K     Cacheable, non-guarded
-        * 0xd001_0000  16K     Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-
-       /*
-        * TLB 0:       64M     Non-cacheable, guarded
-        * 0xfc000000   64M     FLASH (8,16,32 or 64 MB)
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(0xfc000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(0xfc000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 1:       256M    Non-cacheable, guarded
-        * 0x80000000   256M    PCI1 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 2:       256M    Non-cacheable, guarded
-        * 0x90000000   256M    PCI1 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3:       256M    Non-cacheable, guarded
-        * 0xc0000000   256M    Rapid IO MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 4:       256M    Non-cacheable, guarded
-        * 0xd0000000   256M    Rapid IO MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 5:       64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  16M     PCI1 IO
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 6:       64M     Cacheable, non-guarded
-        * 0xf000_0000  64M     LBC SDRAM
-        */
-       .long FSL_BOOKE_MAS0(1, 6, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-#if !defined(CONFIG_SPD_EEPROM)
-       /*
-        * TLB 7:       256M    DDR
-        * 0x00000000   256M    DDR System memory
-        * Without SPD EEPROM configured DDR, this must be setup manually.
-        * Make sure the TLB count at the top of this table is correct.
-        * Likely it needs to be increased by two for these entries.
-        */
-
-       .long FSL_BOOKE_MAS0(1, 7, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#endif
-
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000     0x7fff_ffff     DDR                     2G
- * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
- * 0xc000_0000     0xdfff_ffff     RapidIO                 512M
- * 0xe000_0000     0xe000_ffff     CCSR                    1M
- * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M
- * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
- * 0xf800_0000     0xf80f_ffff     BCSR                    1M
- * 0xfc00_0000     0xffff_ffff     FLASH (boot bank)       64M
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- */
-
-#if !defined(CONFIG_SPD_EEPROM)
-#define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR0 (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_256M))
-#else
-#define LAWBAR0 0
-#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-#endif
-
-#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-/*
- * This is not so much the SDRAM map as it is the whole localbus map.
- */
-#define LAWBAR2 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
-
-#define LAWBAR3 ((CFG_PCI1_IO_BASE>>12) & 0xfffff)
-#define LAWAR3 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_16M))
-
-/*
- * Rapid IO at 0xc000_0000 for 512 M
- */
-#define LAWBAR4 ((CFG_RIO_MEM_BASE>>12) & 0xfffff)
-#define LAWAR4 (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-       .long 0x05
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       .long LAWBAR4,LAWAR4
-       entry_end
diff --git a/board/pm854/law.c b/board/pm854/law.c
new file mode 100644 (file)
index 0000000..cb6b37f
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000     0x7fff_ffff     DDR                     2G
+ * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
+ * 0xc000_0000     0xdfff_ffff     RapidIO                 512M
+ * 0xe000_0000     0xe000_ffff     CCSR                    1M
+ * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M
+ * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
+ * 0xf800_0000     0xf80f_ffff     BCSR                    1M
+ * 0xfc00_0000     0xffff_ffff     FLASH (boot bank)       64M
+ *
+ * Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ */
+
+struct law_entry law_table[] = {
+#ifndef CONFIG_SPD_EEPROM
+       SET_LAW_ENTRY(1, CFG_DDR_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_DDR),
+#endif
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI),
+       /* This is not so much the SDRAM map as it is the whole localbus map. */
+       SET_LAW_ENTRY(3, CFG_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+       SET_LAW_ENTRY(4, CFG_PCI1_IO_PHYS, LAW_SIZE_16M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(5, CFG_RIO_MEM_BASE, LAWAR_SIZE_512M, LAW_TRGT_IF_RIO),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/pm854/tlb.c b/board/pm854/tlb.c
new file mode 100644 (file)
index 0000000..5d87537
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /*
+        * TLB 0:       64M     Non-cacheable, guarded
+        * 0xfc000000   64M     FLASH (8,16,32 or 64 MB)
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, 0xfc000000, 0xfc000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_16M, 1),
+
+       /*
+        * TLB 1:       256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        * 0x90000000   256M    PCI1 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS + 0x10000000, CFG_PCI1_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        * 0xc0000000   256M    Rapid IO MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE, CFG_RIO_MEM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 4:       256M    Non-cacheable, guarded
+        * 0xd0000000   256M    Rapid IO MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE + 0x10000000, CFG_RIO_MEM_BASE + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 5:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  16M     PCI1 IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 6:       64M     Cacheable, non-guarded
+        * 0xf000_0000  64M     LBC SDRAM
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_SDRAM_BASE, CFG_LBC_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 6, BOOKE_PAGESZ_64M, 1),
+
+#if !defined(CONFIG_SPD_EEPROM)
+       /*
+        * TLB 7:       256M    DDR
+        * 0x00000000   256M    DDR System memory
+        * Without SPD EEPROM configured DDR, this must be setup manually.
+        * Make sure the TLB count at the top of this table is correct.
+        * Likely it needs to be increased by two for these entries.
+        */
+
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE, CFG_DDR_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 7, BOOKE_PAGESZ_256M, 1),
+#endif
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 9feaf55cd1a04e76d221740e34e2668ad0be1f9e..86f8f13599e04a38b27ed3aad7c83f189ec8ce28 100644 (file)
@@ -35,7 +35,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/pm854/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -65,7 +64,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/pm854/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
index 29136508f582978c220d00246adcd4034c1fe24d..be243885be641cdc9af3bb01aa39535c368fcef3 100644 (file)
@@ -25,9 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o
-SOBJS  := init.o
-#SOBJS :=
+COBJS  := $(BOARD).o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/pm856/init.S b/board/pm856/init.S
deleted file mode 100644 (file)
index 0a403ab..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Copyright 2004 Freescale Semiconductor.
- * Copyright (C) 2002,2003, Motorola Inc.
- * Xianghua Xiao <X.Xiao@motorola.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long 13
-
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-#error("Update the number of table entries in tlb1_entry")
-#endif
-
-       /*
-        * TLB0         16K     Cacheable, non-guarded
-        * 0xd001_0000  16K     Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-
-       /*
-        * TLB 0:       64M     Non-cacheable, guarded
-        * 0xfc000000   64M     FLASH (8,16,32 or 64 MB)
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(0xfc000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(0xfc000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 1:       256M    Non-cacheable, guarded
-        * 0x80000000   256M    PCI1 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 2:       256M    Non-cacheable, guarded
-        * 0x90000000   256M    PCI1 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3:       256M    Non-cacheable, guarded
-        * 0xc0000000   256M    Rapid IO MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 4:       256M    Non-cacheable, guarded
-        * 0xd0000000   256M    Rapid IO MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 5:       64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  16M     PCI1 IO
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 6:       64M     Cacheable, non-guarded
-        * 0xf000_0000  64M     LBC SDRAM
-        */
-       .long FSL_BOOKE_MAS0(1, 6, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-#if !defined(CONFIG_SPD_EEPROM)
-       /*
-        * TLB 7:       256M    DDR
-        * 0x00000000   256M    DDR System memory
-        * Without SPD EEPROM configured DDR, this must be setup manually.
-        * Make sure the TLB count at the top of this table is correct.
-        * Likely it needs to be increased by two for these entries.
-        */
-
-       .long FSL_BOOKE_MAS0(1, 7, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#endif
-
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000     0x7fff_ffff     DDR                     2G
- * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
- * 0xc000_0000     0xdfff_ffff     RapidIO                 512M
- * 0xe000_0000     0xe000_ffff     CCSR                    1M
- * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M
- * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
- * 0xf800_0000     0xf80f_ffff     BCSR                    1M
- * 0xfc00_0000     0xffff_ffff     FLASH (boot bank)       64M
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- */
-
-#if !defined(CONFIG_SPD_EEPROM)
-#define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR0 (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_256M))
-#else
-#define LAWBAR0 0
-#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-#endif
-
-#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-/*
- * This is not so much the SDRAM map as it is the whole localbus map.
- */
-#define LAWBAR2 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
-
-#define LAWBAR3 ((CFG_PCI1_IO_BASE>>12) & 0xfffff)
-#define LAWAR3 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_16M))
-
-/*
- * Rapid IO at 0xc000_0000 for 512 M
- */
-#define LAWBAR4 ((CFG_RIO_MEM_BASE>>12) & 0xfffff)
-#define LAWAR4 (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-       .long 0x05
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       .long LAWBAR4,LAWAR4
-       entry_end
diff --git a/board/pm856/law.c b/board/pm856/law.c
new file mode 100644 (file)
index 0000000..cb6b37f
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000     0x7fff_ffff     DDR                     2G
+ * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
+ * 0xc000_0000     0xdfff_ffff     RapidIO                 512M
+ * 0xe000_0000     0xe000_ffff     CCSR                    1M
+ * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M
+ * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
+ * 0xf800_0000     0xf80f_ffff     BCSR                    1M
+ * 0xfc00_0000     0xffff_ffff     FLASH (boot bank)       64M
+ *
+ * Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ */
+
+struct law_entry law_table[] = {
+#ifndef CONFIG_SPD_EEPROM
+       SET_LAW_ENTRY(1, CFG_DDR_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_DDR),
+#endif
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI),
+       /* This is not so much the SDRAM map as it is the whole localbus map. */
+       SET_LAW_ENTRY(3, CFG_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+       SET_LAW_ENTRY(4, CFG_PCI1_IO_PHYS, LAW_SIZE_16M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(5, CFG_RIO_MEM_BASE, LAWAR_SIZE_512M, LAW_TRGT_IF_RIO),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/pm856/tlb.c b/board/pm856/tlb.c
new file mode 100644 (file)
index 0000000..5d87537
--- /dev/null
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /*
+        * TLB 0:       64M     Non-cacheable, guarded
+        * 0xfc000000   64M     FLASH (8,16,32 or 64 MB)
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, 0xfc000000, 0xfc000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_16M, 1),
+
+       /*
+        * TLB 1:       256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        * 0x90000000   256M    PCI1 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS + 0x10000000, CFG_PCI1_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        * 0xc0000000   256M    Rapid IO MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE, CFG_RIO_MEM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 4:       256M    Non-cacheable, guarded
+        * 0xd0000000   256M    Rapid IO MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE + 0x10000000, CFG_RIO_MEM_BASE + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 5:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  16M     PCI1 IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 6:       64M     Cacheable, non-guarded
+        * 0xf000_0000  64M     LBC SDRAM
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_SDRAM_BASE, CFG_LBC_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 6, BOOKE_PAGESZ_64M, 1),
+
+#if !defined(CONFIG_SPD_EEPROM)
+       /*
+        * TLB 7:       256M    DDR
+        * 0x00000000   256M    DDR System memory
+        * Without SPD EEPROM configured DDR, this must be setup manually.
+        * Make sure the TLB count at the top of this table is correct.
+        * Likely it needs to be increased by two for these entries.
+        */
+
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE, CFG_DDR_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 7, BOOKE_PAGESZ_256M, 1),
+#endif
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index c68f05a3fc02d8b3107eaa4a6a9aa473f25edf40..6cfddea2d4ac3c90a8aa57525ca965a78c8290ac 100644 (file)
@@ -36,7 +36,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/pm856/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -66,7 +65,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/pm856/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
diff --git a/board/qemu-mips/Makefile b/board/qemu-mips/Makefile
new file mode 100644 (file)
index 0000000..23be447
--- /dev/null
@@ -0,0 +1,45 @@
+#
+# (C) Copyright 2003-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  = $(BOARD).o flash.o
+SOBJS  = lowlevel_init.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):         $(OBJS) $(SOBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/qemu-mips/README b/board/qemu-mips/README
new file mode 100644 (file)
index 0000000..39570b1
--- /dev/null
@@ -0,0 +1,11 @@
+By Vlad Lungu vlad@comsys.ro 2007-Oct-01
+----------------------------------------
+Qemu is a full system emulator. See
+
+http://fabrice.bellard.free.fr/qemu
+
+Limitations & comments
+----------------------
+Supports the "-m mips" configuration of qemu: serial,NE2000,IDE.
+Support is big endian only for now (or at least this is what I tested).
+Derived from au1x00 with a lot of things cut out.
diff --git a/board/qemu-mips/config.mk b/board/qemu-mips/config.mk
new file mode 100644 (file)
index 0000000..4d4078a
--- /dev/null
@@ -0,0 +1,10 @@
+#
+# Qemu -M mips system emulator
+# See http://fabrice.bellard.free.fr/qemu
+#
+
+# ROM version
+TEXT_BASE = 0xbfc00000
+
+# RAM version
+#TEXT_BASE = 0x80001000
diff --git a/board/qemu-mips/flash.c b/board/qemu-mips/flash.c
new file mode 100644 (file)
index 0000000..e988272
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+/*-----------------------------------------------------------------------
+ * flash_init()
+ *
+ * sets up flash_info and returns size of FLASH (bytes)
+ */
+unsigned long flash_init(void)
+{
+       printf("Skipping flash_init\n");
+       return(0);
+}
+
+int write_buff(void *info, uchar *src, ulong addr, ulong cnt)
+{
+       printf("write_buff not implemented\n");
+       return(-1);
+}
diff --git a/board/qemu-mips/lowlevel_init.S b/board/qemu-mips/lowlevel_init.S
new file mode 100644 (file)
index 0000000..28166bc
--- /dev/null
@@ -0,0 +1,41 @@
+/* Memory sub-system initialization code */
+
+#include <config.h>
+#include <version.h>
+#include <asm/regdef.h>
+#include <asm/mipsregs.h>
+
+       .text
+       .set noreorder
+       .set mips32
+
+       .globl  lowlevel_init
+lowlevel_init:
+
+       /*
+        * Step 2) Establish Status Register
+        * (set BEV, clear ERL, clear EXL, clear IE)
+        */
+       li      t1, 0x00400000
+       mtc0    t1, CP0_STATUS
+
+       /*
+        * Step 3) Establish CP0 Config0
+        * (set K0=3)
+        */
+       li      t1, 0x00000003
+       mtc0    t1, CP0_CONFIG
+
+       /*
+        * Step 7) Establish Cause
+        * (set IV bit)
+        */
+       li      t1, 0x00800000
+       mtc0    t1, CP0_CAUSE
+
+       /* Establish Wired (and Random) */
+       mtc0    zero, CP0_WIRED
+       nop
+
+       j       ra
+       nop
diff --git a/board/qemu-mips/qemu-mips.c b/board/qemu-mips/qemu-mips.c
new file mode 100644 (file)
index 0000000..a6ad7b9
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * (C) Copyright 2007
+ * Vlad Lungu vlad@comsys.ro
+ *
+ * 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 <asm/mipsregs.h>
+#include <asm/io.h>
+
+long int initdram(int board_type)
+{
+       /* Sdram is setup by assembler code */
+       /* If memory could be changed, we should return the true value here */
+       return MEM_SIZE*1024*1024;
+}
+
+int checkboard(void)
+{
+       u32 proc_id;
+       u32 config1;
+
+       proc_id = read_32bit_cp0_register(CP0_PRID);
+       printf("Board: Qemu -M mips CPU: ");
+       switch (proc_id) {
+       case 0x00018000:
+               printf("4Kc");
+               break;
+       case 0x00018400:
+               printf("4KEcR1");
+               break;
+       case 0x00019000:
+               printf("4KEc");
+               break;
+       case 0x00019300:
+               config1 = read_mips32_cp0_config1();
+               if (config1 & 1)
+                       printf("24Kf");
+               else
+                       printf("24Kc");
+               break;
+       case 0x00019500:
+               printf("34Kf");
+               break;
+       case 0x00000400:
+               printf("R4000");
+               break;
+       case 0x00018100:
+               config1 = read_mips32_cp0_config1();
+               if (config1 & 1)
+                       printf("5Kf");
+               else
+                       printf("5Kc");
+               break;
+       case 0x000182a0:
+               printf("20Kc");
+               break;
+
+       default:
+               printf("unknown");
+       }
+       printf(" proc_id=0x%x\n", proc_id);
+
+       return 0;
+}
+
+int misc_init_r(void)
+{
+       set_io_port_base(0);
+       return 0;
+}
diff --git a/board/qemu-mips/u-boot.lds b/board/qemu-mips/u-boot.lds
new file mode 100644 (file)
index 0000000..c2a8566
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk 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
+ */
+
+/*
+OUTPUT_FORMAT("elf32-bigmips", "elf32-bigmips", "elf32-bigmips")
+*/
+OUTPUT_FORMAT("elf32-tradbigmips", "elf32-tradbigmips", "elf32-tradbigmips")
+OUTPUT_ARCH(mips)
+ENTRY(_start)
+SECTIONS
+{
+       . = 0x00000000;
+
+       . = ALIGN(4);
+       .text       :
+       {
+         *(.text)
+       }
+
+       . = ALIGN(4);
+       .rodata  : { *(.rodata) }
+
+       . = ALIGN(4);
+       .data  : { *(.data) }
+
+       . = .;
+       _gp = ALIGN(16) +0x7ff0;
+
+       .got  : {
+       __got_start = .;
+               *(.got)
+       __got_end = .;
+       }
+
+       . = ALIGN(4);
+       .sdata  : { *(.sdata) }
+
+       . = .;
+       .u_boot_cmd : {
+       __u_boot_cmd_start = .;
+       *(.u_boot_cmd)
+       __u_boot_cmd_end = .;
+       }
+
+       uboot_end_data = .;
+       num_got_entries = (__got_end - __got_start) >> 2;
+
+       . = ALIGN(4);
+       .sbss  : { *(.sbss) }
+       .bss  : { *(.bss) }
+       uboot_end = .;
+}
index 15965252f383b1b1546a7958e2e9fb21e1855333..4b2a9f61bcafcee24f5c31a677389fbb9488245a 100644 (file)
@@ -28,9 +28,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o
-SOBJS  := init.o
-#SOBJS :=
+COBJS  := $(BOARD).o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/sbc8548/init.S b/board/sbc8548/init.S
deleted file mode 100644 (file)
index cafa214..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright 2007 Wind River Systemes, Inc. <www.windriver.com>
- * Copyright 2007 Embedded Specialties, Inc.
- *
- * Copyright 2004 Freescale Semiconductor.
- * Copyright 2002,2003, Motorola Inc.
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long 13
-
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-#error("Update the number of table entries in tlb1_entry")
-#endif
-
-       /*
-        * TLB0         16K     Cacheable, non-guarded
-        * 0xe4010000   16K     Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0,
-                       (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0,
-                       (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0,
-                       (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 0:       16M     Non-cacheable, guarded
-        * 0xff800000   16M     TLB for 8MB FLASH
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 1:       256M    Non-cacheable, guarded
-        * 0x80000000   256M    PCI1 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 2:       256M    Non-cacheable, guarded
-        * 0x90000000   256M    PCI1 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0,
-                       (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3:       256M Cacheable, non-guarded
-        * 0x0          256M DDR SDRAM
-        */
-       #if !defined(CONFIG_SPD_EEPROM)
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-       #endif
-
-       /*
-        * TLB 4:       64M     Non-cacheable, guarded
-        * 0xe0000000   1M      CCSRBAR
-        * 0xe2000000   16M     PCI1 IO
-        */
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 5:       64M     Cacheable, non-guarded
-        * 0xf0000000   64M     LBC SDRAM
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 6:       16M     Cacheable, non-guarded
-        * 0xf8000000   1M      7-segment LED display
-        * 0xf8100000   1M      User switches
-        * 0xf8300000   1M      Board revision
-        * 0xf8b00000   1M      EEPROM
-        */
-       .long FSL_BOOKE_MAS0(1, 6, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
-       .long FSL_BOOKE_MAS2(CFG_EPLD_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_EPLD_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000 0x0fff_ffff     DDR                     256M
- * 0x8000_0000 0x9fff_ffff     PCI1 MEM                512M
- * 0xe000_0000 0xe000_ffff     CCSR                    1M
- * 0xe200_0000 0xe2ff_ffff     PCI1 IO                 16M
- * 0xf000_0000 0xf7ff_ffff     SDRAM                   128M
- * 0xf8b0_0000 0xf80f_ffff     EEPROM                  1M
- * 0xfb80_0000 0xff7f_ffff     FLASH (2nd bank)        64M
- * 0xff80_0000 0xffff_ffff     FLASH (boot bank)       8M
- *
- * Notes:
- *     CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *     If flash is 8M at default position (last 8M), no LAW needed.
- *
- *     The defines below are 1-off of the actual LAWAR0 usage.
- *     So LAWAR3 define uses the LAWAR4 register in the ECM.
- */
-
-
-#if !defined(CONFIG_SPD_EEPROM)
-       #define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
-       #define LAWAR0  (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_256M))
-#else
-       #define LAWBAR0 0
-       #define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_256M)) & ~LAWAR_EN)
-#endif
-
-#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-#define LAWBAR2 ((CFG_PCI1_IO_BASE>>12) & 0xfffff)
-#define LAWAR2         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_16M))
-
-/* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
-#define LAWBAR3 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR3         (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-
-law_entry:
-       entry_start
-       .long 4
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       entry_end
diff --git a/board/sbc8548/law.c b/board/sbc8548/law.c
new file mode 100644 (file)
index 0000000..d903cdc
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000 0x0fff_ffff     DDR                     256M
+ * 0x8000_0000 0x9fff_ffff     PCI1 MEM                512M
+ * 0xe000_0000 0xe000_ffff     CCSR                    1M
+ * 0xe200_0000 0xe2ff_ffff     PCI1 IO                 16M
+ * 0xf000_0000 0xf7ff_ffff     SDRAM                   128M
+ * 0xf8b0_0000 0xf80f_ffff     EEPROM                  1M
+ * 0xfb80_0000 0xff7f_ffff     FLASH (2nd bank)        64M
+ * 0xff80_0000 0xffff_ffff     FLASH (boot bank)       8M
+ *
+ * Notes:
+ *     CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *     If flash is 8M at default position (last 8M), no LAW needed.
+ */
+
+struct law_entry law_table[] = {
+#ifndef CONFIG_SPD_EEPROM
+       SET_LAW_ENTRY(1, CFG_DDR_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_DDR),
+#endif
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(3, CFG_PCI1_IO_PHYS, LAW_SIZE_16M, LAW_TRGT_IF_PCI),
+       /* LBC window - maps 256M 0xf0000000 -> 0xffffffff */
+       SET_LAW_ENTRY(4, CFG_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/sbc8548/tlb.c b/board/sbc8548/tlb.c
new file mode 100644 (file)
index 0000000..8d6625e
--- /dev/null
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /*
+        * TLB 0:       16M     Non-cacheable, guarded
+        * 0xff800000   16M     TLB for 8MB FLASH
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_16M, 1),
+
+       /*
+        * TLB 1:       256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        * 0x90000000   256M    PCI1 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS + 0x10000000, CFG_PCI1_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 3:       256M Cacheable, non-guarded
+        * 0x0          256M DDR SDRAM
+        */
+       #if !defined(CONFIG_SPD_EEPROM)
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE, CFG_DDR_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+       #endif
+
+       /*
+        * TLB 4:       64M     Non-cacheable, guarded
+        * 0xe0000000   1M      CCSRBAR
+        * 0xe2000000   16M     PCI1 IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 5:       64M     Cacheable, non-guarded
+        * 0xf0000000   64M     LBC SDRAM
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_SDRAM_BASE, CFG_LBC_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 6:       16M     Cacheable, non-guarded
+        * 0xf8000000   1M      7-segment LED display
+        * 0xf8100000   1M      User switches
+        * 0xf8300000   1M      Board revision
+        * 0xf8b00000   1M      EEPROM
+        */
+       SET_TLB_ENTRY(1, CFG_EPLD_BASE, CFG_EPLD_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 6, BOOKE_PAGESZ_16M, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 8e301d47a4379c9cd052ce40473cecb9036aa355..d701096f1d2ca2c5a8655c8140d34500bf3e0813 100644 (file)
@@ -34,7 +34,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/sbc8548/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -64,7 +63,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/sbc8548/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
index 15965252f383b1b1546a7958e2e9fb21e1855333..4b2a9f61bcafcee24f5c31a677389fbb9488245a 100644 (file)
@@ -28,9 +28,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o
-SOBJS  := init.o
-#SOBJS :=
+COBJS  := $(BOARD).o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/sbc8560/init.S b/board/sbc8560/init.S
deleted file mode 100644 (file)
index 95cb85a..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
-* Copyright (C) 2002,2003, Motorola Inc.
-* Xianghua Xiao <X.Xiao@motorola.com>
-*
-* (C) Copyright 2004 Wind River Systems Inc <www.windriver.com>.
-* Added support for Wind River SBC8560 board
-*
-* See file CREDITS for list of people who contributed to this
-* project.
-*
-* This program is free software; you can redistribute it and/or
-* modify it under the terms of the GNU General Public License as
-* published by the Free Software Foundation; either version 2 of
-* the License, or (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-* GNU General Public License for more details.
-*
-* You should have received a copy of the GNU General Public License
-* along with this program; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-* MA 02111-1307 USA
-*/
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-/* LAW(Local Access Window) configuration:
- * 0000_0000-0800_0000: DDR(512M) -or- larger
- * c000_0000-cfff_ffff: PCI(256M)
- * d000_0000-dfff_ffff: RapidIO(256M)
- * e000_0000-ffff_ffff: localbus(512M)
- *   e000_0000-e3ff_ffff: LBC 64M, 32-bit flash on CS6
- *   e400_0000-e7ff_ffff: LBC 64M, 32-bit flash on CS1
- *   e800_0000-efff_ffff: LBC 128M, nothing here
- *   f000_0000-f3ff_ffff: LBC 64M, SDRAM on CS3
- *   f400_0000-f7ff_ffff: LBC 64M, SDRAM on CS4
- *   f800_0000-fdff_ffff: LBC 64M, nothing here
- *   fc00_0000-fcff_ffff: LBC 16M, CSR,RTC,UART,etc on CS5
- *   fd00_0000-fdff_ffff: LBC 16M, nothing here
- *   fe00_0000-feff_ffff: LBC 16M, nothing here
- *   ff00_0000-ff6f_ffff: LBC 7M, nothing here
- *   ff70_0000-ff7f_ffff: CCSRBAR 1M
- *   ff80_0000-ffff_ffff: LBC 8M, 8-bit flash on CS0
- * Note: CCSRBAR and L2-as-SRAM don't need configure Local Access
- *       Window.
- * Note: If flash is 8M at default position(last 8M),no LAW needed.
- */
-
-#if !defined(CONFIG_SPD_EEPROM)
-  #define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
-  #define LAWAR0  (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_512M))
-#else
-  #define LAWBAR0 0
-  #define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_512M)) & ~LAWAR_EN)
-#endif
-
-#define LAWBAR1 ((CFG_PCI_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1  (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_256M))
-
-#define LAWBAR2 ((0xe0000000>>12) & 0xfffff)
-#define LAWAR2  (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-       .long 0x03
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2
-       entry_end
-
-/* TLB1 entries configuration: */
-
-       .section        .bootpg, "ax"
-       .globl          tlb1_entry
-
-tlb1_entry:
-       entry_start
-
-       .long 0x08      /* the following data table uses a few of 16 TLB entries */
-
-/* TLB for CCSRBAR (IMMR) */
-
-       .long FSL_BOOKE_MAS0(1,1,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR,(MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-/* TLB for Local Bus stuff, just map the whole 512M */
-/* note that the LBC SDRAM is cache-inhibit and guarded, like everything else */
-
-       .long FSL_BOOKE_MAS0(1,2,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(0xe0000000,(MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(0xe0000000,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1,3,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(0xf0000000,(MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(0xf0000000,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-#if !defined(CONFIG_SPD_EEPROM)
-       .long FSL_BOOKE_MAS0(1,4,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE,0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1,5,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE+0x10000000,0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE+0x10000000,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-       .long FSL_BOOKE_MAS0(1,4,0)
-       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(0,0)
-       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1,5,0)
-       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(0,0)
-       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-#endif
-
-       .long FSL_BOOKE_MAS0(1,6,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_16K)
-#ifdef CONFIG_L2_INIT_RAM
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR,0,0,0,1,0,0,0,0)
-#else
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR,0)
-#endif
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1,7,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI_MEM_BASE,(MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI_MEM_BASE,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       .long FSL_BOOKE_MAS0(1,15,0)
-       .long FSL_BOOKE_MAS1(1,1,0,0,BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT,(MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-       .long FSL_BOOKE_MAS0(1,15,0)
-       .long FSL_BOOKE_MAS1(0,0,0,0,BOOKE_PAGESZ_1M)
-       .long FSL_BOOKE_MAS2(0,0)
-       .long FSL_BOOKE_MAS3(0,0,(MAS3_SX|MAS3_SW|MAS3_SR))
-#endif
-       entry_end
diff --git a/board/sbc8560/law.c b/board/sbc8560/law.c
new file mode 100644 (file)
index 0000000..e370853
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/* LAW(Local Access Window) configuration:
+ * 0000_0000-0800_0000: DDR(512M) -or- larger
+ * c000_0000-cfff_ffff: PCI(256M)
+ * d000_0000-dfff_ffff: RapidIO(256M)
+ * e000_0000-ffff_ffff: localbus(512M)
+ *   e000_0000-e3ff_ffff: LBC 64M, 32-bit flash on CS6
+ *   e400_0000-e7ff_ffff: LBC 64M, 32-bit flash on CS1
+ *   e800_0000-efff_ffff: LBC 128M, nothing here
+ *   f000_0000-f3ff_ffff: LBC 64M, SDRAM on CS3
+ *   f400_0000-f7ff_ffff: LBC 64M, SDRAM on CS4
+ *   f800_0000-fdff_ffff: LBC 64M, nothing here
+ *   fc00_0000-fcff_ffff: LBC 16M, CSR,RTC,UART,etc on CS5
+ *   fd00_0000-fdff_ffff: LBC 16M, nothing here
+ *   fe00_0000-feff_ffff: LBC 16M, nothing here
+ *   ff00_0000-ff6f_ffff: LBC 7M, nothing here
+ *   ff70_0000-ff7f_ffff: CCSRBAR 1M
+ *   ff80_0000-ffff_ffff: LBC 8M, 8-bit flash on CS0
+ * Note: CCSRBAR and L2-as-SRAM don't need configure Local Access
+ *       Window.
+ * Note: If flash is 8M at default position(last 8M),no LAW needed.
+ */
+
+struct law_entry law_table[] = {
+#ifndef CONFIG_SPD_EEPROM
+       SET_LAW_ENTRY(1, CFG_DDR_SDRAM_BASE, LAW_SIZE_512M, LAW_TRGT_IF_DDR),
+#endif
+       SET_LAW_ENTRY(2, CFG_PCI_MEM_PHYS, LAW_SIZE_256M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(3, CFG_LBC_SDRAM_BASE, LAW_SIZE_512M, LAW_TRGT_IF_LBC),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/sbc8560/tlb.c b/board/sbc8560/tlb.c
new file mode 100644 (file)
index 0000000..155ff64
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+/* TLB for CCSRBAR (IMMR) */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_1M, 1),
+
+/* TLB for Local Bus stuff, just map the whole 512M */
+/* note that the LBC SDRAM is cache-inhibit and guarded, like everything else */
+
+       SET_TLB_ENTRY(1, 0xe0000000, 0xe0000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       SET_TLB_ENTRY(1, 0xf0000000, 0xf0000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+
+#if !defined(CONFIG_SPD_EEPROM)
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE, CFG_DDR_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 4, BOOKE_PAGESZ_256M, 1),
+
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE + 0x10000000, CFG_DDR_SDRAM_BASE + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 5, BOOKE_PAGESZ_256M, 1),
+#endif
+
+       SET_TLB_ENTRY(1, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 6, BOOKE_PAGESZ_16K, 1),
+
+       SET_TLB_ENTRY(1, CFG_PCI_MEM_PHYS, CFG_PCI_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 7, BOOKE_PAGESZ_256M, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 449fed8f76402b121d58aa3440d185c86ddac77c..f3dbf26a48bff475ec34b848396f7d2ae65dd6e1 100644 (file)
@@ -38,7 +38,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/sbc8560/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -68,7 +67,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/sbc8560/init.o (.text)
     cpu/mpc85xx/commproc.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
index 7d52f8cac13a7a8d1f0eb7af73c0cae9403fc676..28d6cb9976e01b39caea1008c3d46629242f5b7e 100644 (file)
@@ -25,9 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o flash.o
-SOBJS  := init.o
-#SOBJS :=
+COBJS  := $(BOARD).o flash.o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/stxgp3/init.S b/board/stxgp3/init.S
deleted file mode 100644 (file)
index f491a57..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (C) 2004 Embedded Edge, LLC
- * Dan Malek <dan@embeddededge.com>
- * Copied from ADS85xx.
- * Updates for Silicon Tx GP3 8560.  We only support 32-bit flash
- * and DDR with SPD EEPROM configuration.
- *
- * Copyright 2004 Freescale Semiconductor.
- * Copyright (C) 2002,2003, Motorola Inc.
- * Xianghua Xiao <X.Xiao@motorola.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long 13
-
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-#error("Update the number of table entries in tlb1_entry")
-#endif
-
-       /*
-        * TLB0         16K     Cacheable, non-guarded
-        * 0xd001_0000  16K     Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-
-       /*
-        * TLB 0:       16M     Non-cacheable, guarded
-        * 0xff000000   16M     FLASH
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 1:       256M    Non-cacheable, guarded
-        * 0x80000000   256M    PCI1 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 2:       256M    Non-cacheable, guarded
-        * 0x90000000   256M    PCI1 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3:       256M    Non-cacheable, guarded
-        * 0xc0000000   256M    Rapid IO MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 4:       256M    Non-cacheable, guarded
-        * 0xd0000000   256M    Rapid IO MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 5:       64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  16M     PCI1 IO
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 6:       64M     Cacheable, non-guarded
-        * 0xf000_0000  64M     LBC SDRAM
-        */
-       .long FSL_BOOKE_MAS0(1, 6, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_LBC_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 7:       16K     Non-cacheable, guarded
-        * 0xfc000000   16K     Configuration Latch register
-        */
-       .long FSL_BOOKE_MAS0(1, 7, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64K)
-       .long FSL_BOOKE_MAS2(CFG_LBC_LCLDEVS_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_LBC_LCLDEVS_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-#if !defined(CONFIG_SPD_EEPROM)
-       /*
-        * TLB 8, 9:    128M    DDR
-        * 0x00000000   64M     DDR System memory
-        * 0x04000000   64M     DDR System memory
-        * Without SPD EEPROM configured DDR, this must be setup manually.
-        * Make sure the TLB count at the top of this table is correct.
-        * Likely it needs to be increased by two for these entries.
-        */
-#error("Update the number of table entries in tlb1_entry")
-       .long FSL_BOOKE_MAS0(1, 8, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, 0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(1, 9, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE + 0x4000000, 0)
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE + 0x4000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#endif
-
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000     0x7fff_ffff     DDR                     2G
- * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
- * 0xc000_0000     0xdfff_ffff     RapidIO                 512M
- * 0xe000_0000     0xe000_ffff     CCSR                    1M
- * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M
- * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
- * 0xfc00_0000     0xfc00_ffff     Config Latch            64K
- * 0xff00_0000     0xffff_ffff     FLASH (boot bank)       16M
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- */
-
-#if !defined(CONFIG_SPD_EEPROM)
-#define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR0 (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M))
-#else
-#define LAWBAR0 0
-#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-#endif
-
-#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-/*
- * This is not so much the SDRAM map as it is the whole localbus map.
- */
-#define LAWBAR2 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
-
-#define LAWBAR3 ((CFG_PCI1_IO_BASE>>12) & 0xfffff)
-#define LAWAR3 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_16M))
-
-/*
- * Rapid IO at 0xc000_0000 for 512 M
- */
-#define LAWBAR4 ((CFG_RIO_MEM_BASE>>12) & 0xfffff)
-#define LAWAR4 (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-       .long 0x05
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       .long LAWBAR4,LAWAR4
-       entry_end
diff --git a/board/stxgp3/law.c b/board/stxgp3/law.c
new file mode 100644 (file)
index 0000000..312b3c5
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000     0x7fff_ffff     DDR                     2G
+ * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
+ * 0xc000_0000     0xdfff_ffff     RapidIO                 512M
+ * 0xe000_0000     0xe000_ffff     CCSR                    1M
+ * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M
+ * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M
+ * 0xfc00_0000     0xfc00_ffff     Config Latch            64K
+ * 0xff00_0000     0xffff_ffff     FLASH (boot bank)       16M
+ *
+ * Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ */
+
+struct law_entry law_table[] = {
+#ifndef CONFIG_SPD_EEPROM
+       SET_LAW_ENTRY(1, CFG_DDR_SDRAM_BASE, LAW_SIZE_128M, LAW_TRGT_IF_DDR),
+#endif
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI),
+       /* This is not so much the SDRAM map as it is the whole localbus map. */
+       SET_LAW_ENTRY(3, CFG_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),
+       SET_LAW_ENTRY(4, CFG_PCI1_IO_PHYS, LAW_SIZE_16M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(5, CFG_RIO_MEM_BASE, LAWAR_SIZE_512M, LAW_TRGT_IF_RIO),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/stxgp3/tlb.c b/board/stxgp3/tlb.c
new file mode 100644 (file)
index 0000000..529f230
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /*
+        * TLB 0:       16M     Non-cacheable, guarded
+        * 0xff000000   16M     FLASH
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_16M, 1),
+
+       /*
+        * TLB 1:       256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        * 0x90000000   256M    PCI1 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS + 0x10000000, CFG_PCI1_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        * 0xc0000000   256M    Rapid IO MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE, CFG_RIO_MEM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 4:       256M    Non-cacheable, guarded
+        * 0xd0000000   256M    Rapid IO MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE + 0x10000000, CFG_RIO_MEM_BASE + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 5:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  16M     PCI1 IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 6:       64M     Cacheable, non-guarded
+        * 0xf000_0000  64M     LBC SDRAM
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_SDRAM_BASE, CFG_LBC_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 6, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 7:       16K     Non-cacheable, guarded
+        * 0xfc000000   16K     Configuration Latch register
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_LCLDEVS_BASE, CFG_LBC_LCLDEVS_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 7, BOOKE_PAGESZ_16K, 1),
+
+#if !defined(CONFIG_SPD_EEPROM)
+       /*
+        * TLB 8, 9:    128M    DDR
+        * 0x00000000   64M     DDR System memory
+        * 0x04000000   64M     DDR System memory
+        * Without SPD EEPROM configured DDR, this must be setup manually.
+        * Make sure the TLB count at the top of this table is correct.
+        * Likely it needs to be increased by two for these entries.
+        */
+#error("Update the number of table entries in tlb1_entry")
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE, CFG_DDR_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 8, BOOKE_PAGESZ_64M, 1),
+
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE + 0x4000000, CFG_DDR_SDRAM_BASE + 0x4000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 9, BOOKE_PAGESZ_64M, 1),
+#endif
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index 3f9bc55b39de7e9543451a277a356fa55be59200..4a9a103bcb2101393ce05892864752c397835091 100644 (file)
@@ -40,7 +40,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/stxgp3/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -70,7 +69,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/stxgp3/init.o (.text)
     cpu/mpc85xx/commproc.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
index 344ecdfd79717eef7b129797c4e534e6241b0167..f1f5d0b1bfe01f3f3187786f800898231fdc47c7 100644 (file)
@@ -25,8 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o
-SOBJS  := init.o
+COBJS  := $(BOARD).o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/stxssa/init.S b/board/stxssa/init.S
deleted file mode 100644 (file)
index 82dafb8..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (C) 2005 Embedded Alley Solutions, Inc.
- * Dan Malek <dan@embeddedalley.com>
- * Copied from STx GP3.
- * Updates for Silicon Tx GP3 SSA.  We only support 32-bit flash
- * and DDR with SPD EEPROM configuration.
- *
- * Copyright 2004 Freescale Semiconductor.
- * Copyright (C) 2002,2003, Motorola Inc.
- * Xianghua Xiao <X.Xiao@motorola.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define        entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define        entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long 12
-
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /*
-        * TLB0         4K      Non-cacheable, guarded
-        * 0xff700000   4K      Initial CCSRBAR mapping
-        *
-        * This ends up at a TLB0 Index==0 entry, and must not collide
-        * with other TLB0 Entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR_DEFAULT, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR_DEFAULT, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-#else
-#error("Update the number of table entries in tlb1_entry")
-#endif
-
-       /*
-        * TLB0         16K     Cacheable, non-guarded
-        * 0xd001_0000  16K     Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-
-       /*
-        * TLB 0:       64M     Non-cacheable, guarded
-        * 0xfc000000   6M4     FLASH
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 1:       256M    Non-cacheable, guarded
-        * 0x80000000   256M    PCI1 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 2:       256M    Non-cacheable, guarded
-        * 0x90000000   256M    PCI1 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3:       256M    Non-cacheable, guarded
-        * 0xa0000000   256M    PCI2 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 4:       256M    Non-cacheable, guarded
-        * 0xb0000000   256M    PCI2 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI2_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI2_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 5:       64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  16M     PCI1 IO
-        * 0xe300_0000  16M     PCI2 IO
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 6:       256M    Non-cacheable, guarded
-        * 0xf0000000           Local bus expansion option.
-        * 0xfb000000           Configuration Latch register (one word)
-        * 0xfc000000           Up to 64M flash
-        */
-       .long FSL_BOOKE_MAS0(1, 7, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_LBC_OPTION_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_LBC_OPTION_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000     0x7fff_ffff     DDR                     2G
- * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
- * 0xa000_0000     0xbfff_ffff     PCI2 MEM                512M
- * 0xe000_0000     0xe000_ffff     CCSR                    1M
- * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M
- * 0xe300_0000     0xe3ff_ffff     PCI2 IO                 16M
- * 0xf000_0000     0xfaff_ffff     Local bus               128M
- * 0xfb00_0000     0xfb00_ffff     Config Latch            64K
- * 0xfc00_0000     0xffff_ffff     FLASH (boot bank)       64M
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- */
-
-#if !defined(CONFIG_SPD_EEPROM)
-#define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR0 (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M))
-#else
-#define LAWBAR0 0
-#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)
-#endif
-
-#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-#define LAWBAR2 ((CFG_PCI2_MEM_BASE>>12) & 0xfffff)
-#define LAWAR2         (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-#define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff)
-#define LAWAR3         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_16M))
-
-#define LAWBAR4 ((CFG_PCI2_IO_PHYS>>12) & 0xfffff)
-#define LAWAR4         (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_16M))
-
-/* Map the whole localbus, including flash and reset latch.
-*/
-#define LAWBAR5 ((CFG_LBC_OPTION_BASE>>12) & 0xfffff)
-#define LAWAR5 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M))
-
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-       .long 6
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       .long LAWBAR4,LAWAR4,LAWBAR5,LAWAR5
-       entry_end
diff --git a/board/stxssa/law.c b/board/stxssa/law.c
new file mode 100644 (file)
index 0000000..2b25292
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000     0x7fff_ffff     DDR                     2G
+ * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M
+ * 0xa000_0000     0xbfff_ffff     PCI2 MEM                512M
+ * 0xe000_0000     0xe000_ffff     CCSR                    1M
+ * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M
+ * 0xe300_0000     0xe3ff_ffff     PCI2 IO                 16M
+ * 0xf000_0000     0xfaff_ffff     Local bus               128M
+ * 0xfb00_0000     0xfb00_ffff     Config Latch            64K
+ * 0xfc00_0000     0xffff_ffff     FLASH (boot bank)       64M
+ *
+ * Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ */
+
+struct law_entry law_table[] = {
+#ifndef CONFIG_SPD_EEPROM
+       SET_LAW_ENTRY(1, CFG_DDR_SDRAM_BASE, LAW_SIZE_128M, LAW_TRGT_IF_DDR),
+#endif
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI_1),
+       SET_LAW_ENTRY(3, CFG_PCI2_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI_2),
+       SET_LAW_ENTRY(4, CFG_PCI1_IO_PHYS, LAW_SIZE_16M, LAW_TRGT_IF_PCI_1),
+       SET_LAW_ENTRY(5, CFG_PCI2_IO_PHYS, LAW_SIZE_16M, LAW_TRGT_IF_PCI_2),
+       /* Map the whole localbus, including flash and reset latch. */
+       SET_LAW_ENTRY(6, CFG_LBC_OPTION_BASE, LAWAR_SIZE_256M, LAW_TRGT_IF_LBC),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/stxssa/tlb.c b/board/stxssa/tlb.c
new file mode 100644 (file)
index 0000000..46b1440
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+       /*
+        * TLB 0:       64M     Non-cacheable, guarded
+        * 0xfc000000   6M4     FLASH
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 1:       256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        * 0x90000000   256M    PCI1 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS + 0x10000000, CFG_PCI1_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        * 0xa0000000   256M    PCI2 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI2_MEM_PHYS, CFG_PCI2_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 4:       256M    Non-cacheable, guarded
+        * 0xb0000000   256M    PCI2 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI2_MEM_PHYS + 0x10000000, CFG_PCI2_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 5:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  16M     PCI1 IO
+        * 0xe300_0000  16M     PCI2 IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 6:       256M    Non-cacheable, guarded
+        * 0xf0000000           Local bus expansion option.
+        * 0xfb000000           Configuration Latch register (one word)
+        * 0xfc000000           Up to 64M flash
+        */
+       SET_TLB_ENTRY(1, CFG_LBC_OPTION_BASE, CFG_LBC_OPTION_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 7, BOOKE_PAGESZ_256M, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index a0ba12595583ab09ff9d4b384fdec3e72b288d20..99a8a8b3779e88a73e69d30796233dfe06fda913 100644 (file)
@@ -40,7 +40,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o        (.bootpg)
-    board/stxssa/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -70,7 +69,6 @@ SECTIONS
   .text      :
   {
     cpu/mpc85xx/start.o        (.text)
-    board/stxssa/init.o (.text)
     cpu/mpc85xx/commproc.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
index cad7e1e1ed7a3f08862ec6640fa20449ebb50ef6..52f5ef9454a4e3e8155574fa08bc017d633a25a2 100644 (file)
@@ -25,9 +25,7 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o sdram.o
-SOBJS  := init.o
-#SOBJS :=
+COBJS  := $(BOARD).o sdram.o law.o tlb.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(COBJS))
diff --git a/board/tqm85xx/init.S b/board/tqm85xx/init.S
deleted file mode 100644 (file)
index dcb9386..0000000
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright 2004 Freescale Semiconductor.
- * Copyright (C) 2002,2003, Motorola Inc.
- * Xianghua Xiao <X.Xiao@motorola.com>
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <ppc_asm.tmpl>
-#include <ppc_defs.h>
-#include <asm/cache.h>
-#include <asm/mmu.h>
-#include <config.h>
-#include <mpc85xx.h>
-
-
-/*
- * TLB0 and TLB1 Entries
- *
- * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR.
- * However, CCSRBAR is then relocated to CFG_CCSRBAR right after
- * these TLB entries are established.
- *
- * The TLB entries for DDR are dynamically setup in spd_sdram()
- * and use TLB1 Entries 8 through 15 as needed according to the
- * size of DDR memory.
- *
- * MAS0: tlbsel, esel, nv
- * MAS1: valid, iprot, tid, ts, tsize
- * MAS2: epn, x0, x1, w, i, m, g, e
- * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr
- */
-
-#define entry_start \
-       mflr    r1      ;       \
-       bl      0f      ;
-
-#define entry_end \
-0:     mflr    r0      ;       \
-       mtlr    r1      ;       \
-       blr             ;
-
-
-       .section        .bootpg, "ax"
-       .globl  tlb1_entry
-tlb1_entry:
-       entry_start
-
-       /*
-        * Number of TLB0 and TLB1 entries in the following table
-        */
-       .long 13
-
-       /*
-        * TLB0         16K     Cacheable, non-guarded
-        * 0xd001_0000  16K     Temporary Global data for initialization
-        *
-        * Use four 4K TLB0 entries.  These entries must be cacheable
-        * as they provide the bootstrap memory before the memory
-        * controler and real memory have been configured.
-        *
-        * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c,
-        * and must not collide with other TLB0 entries.
-        */
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 4 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 4 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 8 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 8 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       .long FSL_BOOKE_MAS0(0, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 0, 0, 0, 0)
-       .long FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR + 12 * 1024, 0)
-       .long FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR + 12 * 1024, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-
-       /*
-        * TLB 0, 1:    128M    Non-cacheable, guarded
-        * 0xf8000000   128M    FLASH
-        * Out of reset this entry is only 4K.
-        */
-       .long FSL_BOOKE_MAS0(1, 1, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-       .long FSL_BOOKE_MAS0(1, 0, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_FLASH_BASE+0x4000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_FLASH_BASE+0x4000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 2:       256M    Non-cacheable, guarded
-        * 0x80000000   256M    PCI1 MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 2, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 3:       256M    Non-cacheable, guarded
-        * 0x90000000   256M    PCI1 MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 3, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_PCI1_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_PCI1_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 4:       256M    Non-cacheable, guarded
-        * 0xc0000000   256M    Rapid IO MEM First half
-        */
-       .long FSL_BOOKE_MAS0(1, 4, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 5:       256M    Non-cacheable, guarded
-        * 0xd0000000   256M    Rapid IO MEM Second half
-        */
-       .long FSL_BOOKE_MAS0(1, 5, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_RIO_MEM_BASE + 0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_RIO_MEM_BASE + 0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 6:       64M     Non-cacheable, guarded
-        * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  16M     PCI1 IO
-        */
-       .long FSL_BOOKE_MAS0(1, 6, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
-       .long FSL_BOOKE_MAS2(CFG_CCSRBAR, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_CCSRBAR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       /*
-        * TLB 7+8:     512M    DDR, cache disabled (needed for memory test)
-        * 0x00000000  512M     DDR System memory
-        * Without SPD EEPROM configured DDR, this must be setup manually.
-        * Make sure the TLB count at the top of this table is correct.
-        * Likely it needs to be increased by two for these entries.
-        */
-       .long FSL_BOOKE_MAS0(1, 7, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-       .long FSL_BOOKE_MAS0(1, 8, 0)
-       .long FSL_BOOKE_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long FSL_BOOKE_MAS2(CFG_DDR_SDRAM_BASE+0x10000000, (MAS2_I|MAS2_G))
-       .long FSL_BOOKE_MAS3(CFG_DDR_SDRAM_BASE+0x10000000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))
-
-       entry_end
-
-/*
- * LAW(Local Access Window) configuration:
- *
- * 0x0000_0000    0x7fff_ffff     DDR                     2G
- * 0x8000_0000    0x9fff_ffff     PCI1 MEM                512M
- * 0xc000_0000    0xdfff_ffff     RapidIO                 512M
- * 0xe000_0000    0xe000_ffff     CCSR                    1M
- * 0xe200_0000    0xe2ff_ffff     PCI1 IO                 16M
- * 0xf800_0000    0xf80f_ffff     BCSR                    1M
- * 0xfe00_0000    0xffff_ffff     FLASH (boot bank)       32M
- *
- * Notes:
- *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
- *    If flash is 8M at default position (last 8M), no LAW needed.
- */
-
-#define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff)
-#define LAWAR0 (LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff)
-#define LAWAR1 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-#define LAWBAR2 ((CFG_LBC_FLASH_BASE>>12) & 0xfffff)
-#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_128M))
-
-#define LAWBAR3 ((CFG_PCI1_IO_BASE>>12) & 0xfffff)
-#define LAWAR3 (LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_16M))
-
-/*
- * Rapid IO at 0xc000_0000 for 512 M
- */
-#define LAWBAR4 ((CFG_RIO_MEM_BASE>>12) & 0xfffff)
-#define LAWAR4 (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M))
-
-
-       .section .bootpg, "ax"
-       .globl  law_entry
-law_entry:
-       entry_start
-       .long 0x05
-       .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       .long LAWBAR4,LAWAR4
-       entry_end
diff --git a/board/tqm85xx/law.c b/board/tqm85xx/law.c
new file mode 100644 (file)
index 0000000..224af6c
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/mmu.h>
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ * 0x0000_0000    0x7fff_ffff     DDR                     2G
+ * 0x8000_0000    0x9fff_ffff     PCI1 MEM                512M
+ * 0xc000_0000    0xdfff_ffff     RapidIO                 512M
+ * 0xe000_0000    0xe000_ffff     CCSR                    1M
+ * 0xe200_0000    0xe2ff_ffff     PCI1 IO                 16M
+ * 0xf800_0000    0xf80f_ffff     BCSR                    1M
+ * 0xfe00_0000    0xffff_ffff     FLASH (boot bank)       32M
+ *
+ * Notes:
+ *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window.
+ *    If flash is 8M at default position (last 8M), no LAW needed.
+ */
+
+struct law_entry law_table[] = {
+       SET_LAW_ENTRY(1, CFG_DDR_SDRAM_BASE, LAW_SIZE_512M, LAW_TRGT_IF_DDR),
+       SET_LAW_ENTRY(2, CFG_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(3, CFG_LBC_FLASH_BASE, LAW_SIZE_128M, LAW_TRGT_IF_LBC),
+       SET_LAW_ENTRY(4, CFG_PCI1_IO_PHYS, LAW_SIZE_16M, LAW_TRGT_IF_PCI),
+       SET_LAW_ENTRY(5, CFG_RIO_MEM_BASE, LAWAR_SIZE_512M, LAW_TRGT_IF_RIO),
+};
+
+int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/tqm85xx/tlb.c b/board/tqm85xx/tlb.c
new file mode 100644 (file)
index 0000000..a178cfe
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/mmu.h>
+
+struct fsl_e_tlb_entry tlb_table[] = {
+       /* TLB 0 - for temp stack in cache */
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR, CFG_INIT_RAM_ADDR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 4 * 1024 , CFG_INIT_RAM_ADDR + 4 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 8 * 1024 , CFG_INIT_RAM_ADDR + 8 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+       SET_TLB_ENTRY(0, CFG_INIT_RAM_ADDR + 12 * 1024 , CFG_INIT_RAM_ADDR + 12 * 1024,
+                     MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                     0, 0, BOOKE_PAGESZ_4K, 0),
+
+
+       /*
+        * TLB 0, 1:    128M    Non-cacheable, guarded
+        * 0xf8000000   128M    FLASH
+        * Out of reset this entry is only 4K.
+        */
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE, CFG_FLASH_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 1, BOOKE_PAGESZ_64M, 1),
+       SET_TLB_ENTRY(1, CFG_FLASH_BASE + 0x4000000, CFG_FLASH_BASE + 0x4000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 0, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS, CFG_PCI1_MEM_PHYS,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 2, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        * 0x90000000   256M    PCI1 MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_PCI1_MEM_PHYS + 0x10000000, CFG_PCI1_MEM_PHYS + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 3, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 4:       256M    Non-cacheable, guarded
+        * 0xc0000000   256M    Rapid IO MEM First half
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE, CFG_RIO_MEM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 4, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 5:       256M    Non-cacheable, guarded
+        * 0xd0000000   256M    Rapid IO MEM Second half
+        */
+       SET_TLB_ENTRY(1, CFG_RIO_MEM_BASE + 0x10000000, CFG_RIO_MEM_BASE + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 5, BOOKE_PAGESZ_256M, 1),
+
+       /*
+        * TLB 6:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  16M     PCI1 IO
+        */
+       SET_TLB_ENTRY(1, CFG_CCSRBAR, CFG_CCSRBAR,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 6, BOOKE_PAGESZ_64M, 1),
+
+       /*
+        * TLB 7+8:     512M    DDR, cache disabled (needed for memory test)
+        * 0x00000000  512M     DDR System memory
+        * Without SPD EEPROM configured DDR, this must be setup manually.
+        * Make sure the TLB count at the top of this table is correct.
+        * Likely it needs to be increased by two for these entries.
+        */
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE, CFG_DDR_SDRAM_BASE,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 7, BOOKE_PAGESZ_256M, 1),
+
+       SET_TLB_ENTRY(1, CFG_DDR_SDRAM_BASE + 0x10000000, CFG_DDR_SDRAM_BASE + 0x10000000,
+                     MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                     0, 8, BOOKE_PAGESZ_256M, 1),
+};
+
+int num_tlb_entries = ARRAY_SIZE(tlb_table);
index a8ca3c89d16e82a9fbdebcb8f13bf01a501898dd..6c1f904830c2aa80eb42f67cedc6ccce48d6f69a 100644 (file)
@@ -35,7 +35,6 @@ SECTIONS
   .bootpg 0xFFFFF000 :
   {
     cpu/mpc85xx/start.o (.bootpg)
-    board/tqm85xx/init.o (.bootpg)
   } = 0xffff
 
   /* Read-only sections, merged into text segment: */
@@ -65,7 +64,6 @@ SECTIONS
   .text             :
   {
     cpu/mpc85xx/start.o (.text)
-    board/tqm85xx/init.o (.text)
     cpu/mpc85xx/traps.o (.text)
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
index 0add43285f31eb2bf7bf93066384cab904f645eb..faed8f763ca7c8fab218bf459de6eb6b07c9bd23 100644 (file)
@@ -33,7 +33,7 @@ U_BOOT_CMD(
        "mac     - display and program the system ID and MAC addresses in EEPROM\n",
        "[read|save|id|num|errata|date|ports|0|1|2|3|4|5|6|7]\n"
        "read\n"
-       "    - show content of mac\n"
+       "    - show content of EEPROM\n"
        "mac save\n"
        "    - save to the EEPROM\n"
        "mac id\n"
@@ -43,7 +43,7 @@ U_BOOT_CMD(
        "mac errata\n"
        "    - program errata data\n"
        "mac date\n"
-       "    - program data date\n"
+       "    - program date\n"
        "mac ports\n"
        "    - program the number of ports\n"
        "mac 0\n"
index 21682c09e93393aa3ac5a89f8f6e9a54279c685f..56eb684d555a0d9a5364d071465cbeafc26630a3 100644 (file)
@@ -87,7 +87,7 @@ int do_nfs (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 U_BOOT_CMD(
        nfs,    3,      1,      do_nfs,
        "nfs\t- boot image via network using NFS protocol\n",
-       "[loadAddress] [host ip addr:bootfilename]\n"
+       "[loadAddress] [[hostIPaddr:]bootfilename]\n"
 );
 #endif
 
diff --git a/cpu/mcf5227x/Makefile b/cpu/mcf5227x/Makefile
new file mode 100644 (file)
index 0000000..d0e9b45
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# (C) Copyright 2000-2004
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+# CFLAGS += -DET_DEBUG
+
+LIB    = lib$(CPU).a
+
+START  = start.o
+COBJS  = cpu.o speed.o cpu_init.o interrupts.o
+
+SRCS   := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+START  := $(addprefix $(obj),$(START))
+
+all:   $(obj).depend $(START) $(LIB)
+
+$(LIB):        $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+#########################################################################
+
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/cpu/mcf5227x/config.mk b/cpu/mcf5227x/config.mk
new file mode 100644 (file)
index 0000000..8d60fd6
--- /dev/null
@@ -0,0 +1,31 @@
+#
+# (C) Copyright 2003 Josef Baumgartner <josef.baumgartner@telex.de>
+#
+# (C) Copyright 2000-2004
+# 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
+#
+
+PLATFORM_RELFLAGS += -ffixed-d7 -msep-data
+ifeq ($(findstring 4.2,$(shell $(CC) --version)),4.2)
+PLATFORM_CPPFLAGS += -mcpu=5208 -fPIC
+else
+PLATFORM_CPPFLAGS += -m5307 -fPIC
+endif
diff --git a/cpu/mcf5227x/cpu.c b/cpu/mcf5227x/cpu.c
new file mode 100644 (file)
index 0000000..5792a1c
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ *
+ * (C) Copyright 2000-2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <watchdog.h>
+#include <command.h>
+
+#include <asm/immap.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int do_reset(cmd_tbl_t * cmdtp, bd_t * bd, int flag, int argc, char *argv[])
+{
+       volatile rcm_t *rcm = (rcm_t *) (MMAP_RCM);
+       udelay(1000);
+       rcm->rcr |= RCM_RCR_SOFTRST;
+
+       /* we don't return! */
+       return 0;
+};
+
+int checkcpu(void)
+{
+       volatile ccm_t *ccm = (ccm_t *) MMAP_CCM;
+       u16 msk;
+       u16 id = 0;
+       u8 ver;
+
+       puts("CPU:   ");
+       msk = (ccm->cir >> 6);
+       ver = (ccm->cir & 0x003f);
+       switch (msk) {
+       case 0x6c:
+               id = 52277;
+               break;
+       }
+
+       if (id) {
+               printf("Freescale MCF%d (Mask:%01x Version:%x)\n", id, msk,
+                      ver);
+               printf("       CPU CLK %d Mhz BUS CLK %d Mhz FLB CLK %d Mhz\n",
+                      (int)(gd->cpu_clk / 1000000),
+                      (int)(gd->bus_clk / 1000000),
+                      (int)(gd->flb_clk / 1000000));
+               printf("       INP CLK %d Mhz VCO CLK %d Mhz\n",
+                      (int)(gd->inp_clk / 1000000),
+                      (int)(gd->vco_clk / 1000000));
+       }
+
+       return 0;
+}
diff --git a/cpu/mcf5227x/cpu_init.c b/cpu/mcf5227x/cpu_init.c
new file mode 100644 (file)
index 0000000..71b053d
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ *
+ * (C) Copyright 2000-2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * (C) Copyright 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <watchdog.h>
+
+#include <asm/immap.h>
+#include <asm/rtc.h>
+
+/*
+ * Breath some life into the CPU...
+ *
+ * Set up the memory map,
+ * initialize a bunch of registers,
+ * initialize the UPM's
+ */
+void cpu_init_f(void)
+{
+       volatile scm1_t *scm1 = (scm1_t *) MMAP_SCM1;
+       volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO;
+       volatile fbcs_t *fbcs = (fbcs_t *) MMAP_FBCS;
+       volatile pll_t *pll = (volatile pll_t *)MMAP_PLL;
+
+       /* Workaround, must place before fbcs */
+       pll->psr = 0x12;
+
+       scm1->mpr = 0x77777777;
+       scm1->pacra = 0;
+       scm1->pacrb = 0;
+       scm1->pacrc = 0;
+       scm1->pacrd = 0;
+       scm1->pacre = 0;
+       scm1->pacrf = 0;
+       scm1->pacrg = 0;
+       scm1->pacri = 0;
+
+#if (defined(CFG_CS0_BASE) && defined(CFG_CS0_MASK) && defined(CFG_CS0_CTRL))
+       fbcs->csar0 = CFG_CS0_BASE;
+       fbcs->cscr0 = CFG_CS0_CTRL;
+       fbcs->csmr0 = CFG_CS0_MASK;
+#endif
+
+#if (defined(CFG_CS1_BASE) && defined(CFG_CS1_MASK) && defined(CFG_CS1_CTRL))
+       fbcs->csar1 = CFG_CS1_BASE;
+       fbcs->cscr1 = CFG_CS1_CTRL;
+       fbcs->csmr1 = CFG_CS1_MASK;
+#endif
+
+#if (defined(CFG_CS2_BASE) && defined(CFG_CS2_MASK) && defined(CFG_CS2_CTRL))
+       fbcs->csar2 = CFG_CS2_BASE;
+       fbcs->cscr2 = CFG_CS2_CTRL;
+       fbcs->csmr2 = CFG_CS2_MASK;
+#endif
+
+#if (defined(CFG_CS3_BASE) && defined(CFG_CS3_MASK) && defined(CFG_CS3_CTRL))
+       fbcs->csar3 = CFG_CS3_BASE;
+       fbcs->cscr3 = CFG_CS3_CTRL;
+       fbcs->csmr3 = CFG_CS3_MASK;
+#endif
+
+#if (defined(CFG_CS4_BASE) && defined(CFG_CS4_MASK) && defined(CFG_CS4_CTRL))
+       fbcs->csar4 = CFG_CS4_BASE;
+       fbcs->cscr4 = CFG_CS4_CTRL;
+       fbcs->csmr4 = CFG_CS4_MASK;
+#endif
+
+#if (defined(CFG_CS5_BASE) && defined(CFG_CS5_MASK) && defined(CFG_CS5_CTRL))
+       fbcs->csar5 = CFG_CS5_BASE;
+       fbcs->cscr5 = CFG_CS5_CTRL;
+       fbcs->csmr5 = CFG_CS5_MASK;
+#endif
+
+#ifdef CONFIG_FSL_I2C
+       gpio->par_i2c = GPIO_PAR_I2C_SCL_SCL | GPIO_PAR_I2C_SDA_SDA;
+#endif
+
+       icache_enable();
+}
+
+/*
+ * initialize higher level parts of CPU like timers
+ */
+int cpu_init_r(void)
+{
+#ifdef CONFIG_MCFTMR
+       volatile rtc_t *rtc = (volatile rtc_t *)(CFG_MCFRTC_BASE);
+       volatile rtcex_t *rtcex = (volatile rtcex_t *)&rtc->extended;
+       u32 oscillator = CFG_RTC_OSCILLATOR;
+
+       rtcex->gocu = (CFG_RTC_OSCILLATOR >> 16) & 0xFFFF;
+       rtcex->gocl = CFG_RTC_OSCILLATOR & 0xFFFF;
+#endif
+
+       return (0);
+}
+
+void uart_port_conf(void)
+{
+       volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO;
+
+       /* Setup Ports: */
+       switch (CFG_UART_PORT) {
+       case 0:
+               gpio->par_uart &=
+                   (GPIO_PAR_UART_U0TXD_MASK & GPIO_PAR_UART_U0RXD_MASK);
+               gpio->par_uart |=
+                   (GPIO_PAR_UART_U0TXD_U0TXD | GPIO_PAR_UART_U0RXD_U0RXD);
+               break;
+       case 1:
+               gpio->par_uart &=
+                   (GPIO_PAR_UART_U1TXD_MASK & GPIO_PAR_UART_U1RXD_MASK);
+               gpio->par_uart |=
+                   (GPIO_PAR_UART_U1TXD_U1TXD | GPIO_PAR_UART_U1RXD_U1RXD);
+               break;
+       case 2:
+               gpio->par_dspi &=
+                   (GPIO_PAR_DSPI_SIN_MASK & GPIO_PAR_DSPI_SOUT_MASK);
+               gpio->par_dspi =
+                   (GPIO_PAR_DSPI_SIN_U2RXD | GPIO_PAR_DSPI_SOUT_U2TXD);
+               break;
+       }
+}
diff --git a/cpu/mcf5227x/interrupts.c b/cpu/mcf5227x/interrupts.c
new file mode 100644 (file)
index 0000000..9572a7b
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ *
+ * (C) Copyright 2000-2004
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/* CPU specific interrupt routine */
+#include <common.h>
+#include <asm/immap.h>
+
+int interrupt_init(void)
+{
+       volatile int0_t *intp = (int0_t *) (CFG_INTR_BASE);
+
+       /* Make sure all interrupts are disabled */
+       intp->imrh0 |= 0xFFFFFFFF;
+       intp->imrl0 |= 0xFFFFFFFF;
+
+       enable_interrupts();
+       return 0;
+}
+
+#if defined(CONFIG_MCFTMR)
+void dtimer_intr_setup(void)
+{
+       volatile int0_t *intp = (int0_t *) (CFG_INTR_BASE);
+
+       intp->icr0[CFG_TMRINTR_NO] = CFG_TMRINTR_PRI;
+       intp->imrh0 &= ~CFG_TMRINTR_MASK;
+}
+#endif
diff --git a/cpu/mcf5227x/speed.c b/cpu/mcf5227x/speed.c
new file mode 100644 (file)
index 0000000..78c946f
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/processor.h>
+
+#include <asm/immap.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Low Power Divider specifications
+ */
+#define CLOCK_LPD_MIN          (1 << 0)        /* Divider (decoded) */
+#define CLOCK_LPD_MAX          (1 << 15)       /* Divider (decoded) */
+
+#define CLOCK_PLL_FVCO_MAX     540000000
+#define CLOCK_PLL_FVCO_MIN     300000000
+
+#define CLOCK_PLL_FSYS_MAX     266666666
+#define CLOCK_PLL_FSYS_MIN     100000000
+#define MHZ                    1000000
+
+void clock_enter_limp(int lpdiv)
+{
+       volatile ccm_t *ccm = (volatile ccm_t *)MMAP_CCM;
+       int i, j;
+
+       /* Check bounds of divider */
+       if (lpdiv < CLOCK_LPD_MIN)
+               lpdiv = CLOCK_LPD_MIN;
+       if (lpdiv > CLOCK_LPD_MAX)
+               lpdiv = CLOCK_LPD_MAX;
+
+       /* Round divider down to nearest power of two */
+       for (i = 0, j = lpdiv; j != 1; j >>= 1, i++) ;
+
+       /* Apply the divider to the system clock */
+       ccm->cdr = (ccm->cdr & 0xF0FF) | CCM_CDR_LPDIV(i);
+
+       /* Enable Limp Mode */
+       ccm->misccr |= CCM_MISCCR_LIMP;
+}
+
+/*
+ * brief   Exit Limp mode
+ * warning The PLL should be set and locked prior to exiting Limp mode
+ */
+void clock_exit_limp(void)
+{
+       volatile ccm_t *ccm = (volatile ccm_t *)MMAP_CCM;
+       volatile pll_t *pll = (volatile pll_t *)MMAP_PLL;
+
+       /* Exit Limp mode */
+       ccm->misccr &= ~CCM_MISCCR_LIMP;
+
+       /* Wait for the PLL to lock */
+       while (!(pll->psr & PLL_PSR_LOCK)) ;
+}
+
+/*
+ * get_clocks() fills in gd->cpu_clock and gd->bus_clk
+ */
+int get_clocks(void)
+{
+
+       volatile ccm_t *ccm = (volatile ccm_t *)MMAP_CCM;
+       volatile pll_t *pll = (volatile pll_t *)MMAP_PLL;
+       int vco, temp, pcrvalue, pfdr;
+       u8 bootmode;
+
+       bootmode = (ccm->ccr & 0x000C) >> 2;
+
+       pcrvalue = pll->pcr & 0xFF0F0FFF;
+       pfdr = pcrvalue >> 24;
+
+       if (pfdr != 0x1E) {
+               /* serial mode */
+       } else {
+               /* Normal Mode */
+               vco = pfdr * CFG_INPUT_CLKSRC;
+               gd->vco_clk = vco;
+       }
+
+       if ((ccm->ccr & CCM_MISCCR_LIMP) == CCM_MISCCR_LIMP) {
+               /* Limp mode */
+       } else {
+               gd->inp_clk = CFG_INPUT_CLKSRC; /* Input clock */
+
+               temp = (pll->pcr & PLL_PCR_OUTDIV1_MASK) + 1;
+               gd->cpu_clk = vco / temp;       /* cpu clock */
+
+               temp = ((pll->pcr & PLL_PCR_OUTDIV2_MASK) >> 4) + 1;
+               gd->flb_clk = vco / temp;       /* flexbus clock */
+               gd->bus_clk = gd->flb_clk;
+       }
+
+       return (0);
+}
diff --git a/cpu/mcf5227x/start.S b/cpu/mcf5227x/start.S
new file mode 100644 (file)
index 0000000..0e2db12
--- /dev/null
@@ -0,0 +1,356 @@
+/*
+ * Copyright (C) 2003  Josef Baumgartner <josef.baumgartner@telex.de>
+ * Based on code from Bernhard Kuhn <bkuhn@metrowerks.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <config.h>
+#include "version.h"
+
+#ifndef         CONFIG_IDENT_STRING
+#define         CONFIG_IDENT_STRING ""
+#endif
+
+/* last three long word reserved for cache status */
+#define ICACHE_STATUS  (CFG_INIT_RAM_ADDR+CFG_INIT_RAM_END- 4)
+#define DCACHE_STATUS  (CFG_INIT_RAM_ADDR+CFG_INIT_RAM_END- 8)
+#define CACR_STATUS    (CFG_INIT_RAM_ADDR+CFG_INIT_RAM_END-12)
+
+#define _START _start
+#define _FAULT _fault
+
+#define SAVE_ALL                                               \
+       move.w  #0x2700,%sr;            /* disable intrs */     \
+       subl    #60,%sp;                /* space for 15 regs */ \
+       moveml  %d0-%d7/%a0-%a6,%sp@;
+
+#define RESTORE_ALL                                            \
+       moveml  %sp@,%d0-%d7/%a0-%a6;                           \
+       addl    #60,%sp;                /* space for 15 regs */ \
+       rte;
+
+.text
+/*
+ *     Vector table. This is used for initial platform startup.
+ *     These vectors are to catch any un-intended traps.
+ */
+_vectors:
+
+INITSP:                .long   0x00000000      /* Initial SP   */
+INITPC:                .long   _START  /* Initial PC           */
+vector02:      .long   _FAULT  /* Access Error         */
+vector03:      .long   _FAULT  /* Address Error        */
+vector04:      .long   _FAULT  /* Illegal Instruction  */
+vector05:      .long   _FAULT  /* Reserved             */
+vector06:      .long   _FAULT  /* Reserved             */
+vector07:      .long   _FAULT  /* Reserved             */
+vector08:      .long   _FAULT  /* Privilege Violation  */
+vector09:      .long   _FAULT  /* Trace                */
+vector0A:      .long   _FAULT  /* Unimplemented A-Line */
+vector0B:      .long   _FAULT  /* Unimplemented F-Line */
+vector0C:      .long   _FAULT  /* Debug Interrupt      */
+vector0D:      .long   _FAULT  /* Reserved             */
+vector0E:      .long   _FAULT  /* Format Error         */
+vector0F:      .long   _FAULT  /* Unitialized Int.     */
+
+/* Reserved */
+vector10_17:
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+
+vector18:      .long   _FAULT  /* Spurious Interrupt   */
+vector19:      .long   _FAULT  /* Autovector Level 1   */
+vector1A:      .long   _FAULT  /* Autovector Level 2   */
+vector1B:      .long   _FAULT  /* Autovector Level 3   */
+vector1C:      .long   _FAULT  /* Autovector Level 4   */
+vector1D:      .long   _FAULT  /* Autovector Level 5   */
+vector1E:      .long   _FAULT  /* Autovector Level 6   */
+vector1F:      .long   _FAULT  /* Autovector Level 7   */
+
+/* TRAP #0 - #15 */
+vector20_2F:
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+
+/* Reserved    */
+vector30_3F:
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+
+vector64_127:
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+
+vector128_191:
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+
+vector192_255:
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+
+       .text
+
+       .globl  _start
+_start:
+       nop
+       nop
+       move.w #0x2700,%sr              /* Mask off Interrupt */
+
+       /* Set vector base register at the beginning of the Flash */
+       move.l  #CFG_FLASH_BASE, %d0
+       movec   %d0, %VBR
+
+       move.l  #(CFG_INIT_RAM_ADDR + CFG_INIT_RAM_CTRL), %d0
+       movec   %d0, %RAMBAR1
+
+       /* initialize general use internal ram */
+       move.l #0, %d0
+       move.l #(ICACHE_STATUS), %a1    /* icache */
+       move.l #(DCACHE_STATUS), %a2    /* icache */
+       move.l #(CACR_STATUS), %a3      /* CACR */
+       move.l %d0, (%a1)
+       move.l %d0, (%a2)
+       move.l %d0, (%a3)
+
+       /* invalidate and disable cache */
+       move.l  #0x01000000, %d0        /* Invalidate cache cmd */
+       movec   %d0, %CACR              /* Invalidate cache */
+       move.l  #0, %d0
+       movec   %d0, %ACR0
+       movec   %d0, %ACR1
+
+       /* set stackpointer to end of internal ram to get some stackspace for
+          the first c-code */
+       move.l  #(CFG_INIT_RAM_ADDR + CFG_INIT_SP_OFFSET), %sp
+       clr.l %sp@-
+
+       move.l #__got_start, %a5        /* put relocation table address to a5 */
+
+       bsr cpu_init_f                  /* run low-level CPU init code (from flash) */
+       bsr board_init_f                /* run low-level board init code (from flash) */
+
+       /* board_init_f() does not return */
+
+/*------------------------------------------------------------------------------*/
+
+/*
+ * void relocate_code (addr_sp, gd, addr_moni)
+ *
+ * This "function" does not return, instead it continues in RAM
+ * after relocating the monitor code.
+ *
+ * r3 = dest
+ * r4 = src
+ * r5 = length in bytes
+ * r6 = cachelinesize
+ */
+       .globl  relocate_code
+relocate_code:
+       link.w %a6,#0
+       move.l 8(%a6), %sp              /* set new stack pointer */
+
+       move.l 12(%a6), %d0             /* Save copy of Global Data pointer */
+       move.l 16(%a6), %a0             /* Save copy of Destination Address */
+
+       move.l #CFG_MONITOR_BASE, %a1
+       move.l #__init_end, %a2
+       move.l %a0, %a3
+
+       /* copy the code to RAM */
+1:
+       move.l (%a1)+, (%a3)+
+       cmp.l  %a1,%a2
+       bgt.s    1b
+
+/*
+ * We are done. Do not return, instead branch to second part of board
+ * initialization, now running from RAM.
+ */
+       move.l  %a0, %a1
+       add.l   #(in_ram - CFG_MONITOR_BASE), %a1
+       jmp     (%a1)
+
+in_ram:
+
+clear_bss:
+       /*
+        * Now clear BSS segment
+        */
+       move.l  %a0, %a1
+       add.l   #(_sbss - CFG_MONITOR_BASE),%a1
+       move.l  %a0, %d1
+       add.l   #(_ebss - CFG_MONITOR_BASE),%d1
+6:
+       clr.l   (%a1)+
+       cmp.l   %a1,%d1
+       bgt.s   6b
+
+       /*
+        * fix got table in RAM
+        */
+       move.l  %a0, %a1
+       add.l   #(__got_start - CFG_MONITOR_BASE),%a1
+       move.l  %a1,%a5                 /* * fix got pointer register a5 */
+
+       move.l  %a0, %a2
+       add.l   #(__got_end - CFG_MONITOR_BASE),%a2
+
+7:
+       move.l  (%a1),%d1
+       sub.l   #_start,%d1
+       add.l   %a0,%d1
+       move.l  %d1,(%a1)+
+       cmp.l   %a2, %a1
+       bne     7b
+
+       /* calculate relative jump to board_init_r in ram */
+       move.l %a0, %a1
+       add.l #(board_init_r - CFG_MONITOR_BASE), %a1
+
+       /* set parameters for board_init_r */
+       move.l %a0,-(%sp)               /* dest_addr */
+       move.l %d0,-(%sp)               /* gd */
+       jsr     (%a1)
+
+/*------------------------------------------------------------------------------*/
+/* exception code */
+       .globl _fault
+_fault:
+       jmp _fault
+       .globl  _exc_handler
+
+_exc_handler:
+       SAVE_ALL
+       movel   %sp,%sp@-
+       bsr exc_handler
+       addql   #4,%sp
+       RESTORE_ALL
+
+       .globl  _int_handler
+_int_handler:
+       SAVE_ALL
+       movel   %sp,%sp@-
+       bsr int_handler
+       addql   #4,%sp
+       RESTORE_ALL
+
+/*------------------------------------------------------------------------------*/
+/* cache functions */
+       .globl  icache_enable
+icache_enable:
+       move.l  #0x01200000, %d0        /* Invalid cache */
+       movec   %d0, %CACR
+
+       move.l  #(CFG_SDRAM_BASE + 0x1c000), %d0
+       movec   %d0, %ACR0
+
+       move.l  #0x81600610, %d0        /* Enable cache */
+       movec   %d0, %CACR
+
+       move.l  #(ICACHE_STATUS), %a1
+       moveq   #1, %d0
+       move.l  %d0, (%a1)
+       rts
+
+       .globl  icache_disable
+icache_disable:
+       move.l  #0x01F00000, %d0        /* Setup cache mask */
+       movec   %d0, %CACR              /* Invalidate icache */
+       clr.l   %d0
+       movec   %d0, %ACR0
+       movec   %d0, %ACR1
+
+       move.l  #(ICACHE_STATUS), %a1
+       moveq   #0, %d0
+       move.l  %d0, (%a1)
+       rts
+
+       .globl  icache_status
+icache_status:
+       move.l  #(ICACHE_STATUS), %a1
+       move.l  (%a1), %d0
+       rts
+
+       .globl  icache_invalid
+icache_invalid:
+       move.l  #0x80600610, %d0        /* Invalidate icache */
+       movec   %d0, %CACR              /* Enable and invalidate cache */
+       rts
+
+       .globl  dcache_enable
+dcache_enable:
+       move.l  #0x01200000, %d0        /* Invalid cache */
+       movec   %d0, %CACR
+
+       move.l  #0x81300610, %d0
+       movec   %d0, %CACR
+
+       move.l  #(DCACHE_STATUS), %a1
+       moveq   #1, %d0
+       move.l  %d0, (%a1)
+       rts
+
+       .globl  dcache_disable
+dcache_disable:
+       move.l  #0x81600610, %d0        /* Setup cache mask */
+       movec   %d0, %CACR              /* Invalidate icache */
+
+       move.l  #(DCACHE_STATUS), %a1
+       moveq   #0, %d0
+       move.l  %d0, (%a1)
+       rts
+
+       .globl  dcache_invalid
+dcache_invalid:
+       move.l  #0x81100610, %d0        /* Setup cache mask */
+       movec   %d0, %CACR              /* Enable and invalidate cache */
+       rts
+
+       .globl  dcache_status
+dcache_status:
+       move.l  #(DCACHE_STATUS), %a1
+       move.l  (%a1), %d0
+       rts
+
+/*------------------------------------------------------------------------------*/
+
+       .globl  version_string
+version_string:
+       .ascii U_BOOT_VERSION
+       .ascii " (", __DATE__, " - ", __TIME__, ")"
+       .ascii CONFIG_IDENT_STRING, "\0"
index 89cc8ad93070f56349484eddb9ee91efcf0a734d..61541ab0f15fbbeaf2abdb22ba674c1ba6566341 100644 (file)
@@ -64,6 +64,18 @@ int checkcpu(void)
        case 0x61:
                id = 5327;
                break;
+       case 0x65:
+               id = 5373;
+               break;
+       case 0x68:
+               id = 53721;
+               break;
+       case 0x69:
+               id = 5372;
+               break;
+       case 0x6B:
+               id = 5372;
+               break;
        }
 
        if (id) {
@@ -84,6 +96,7 @@ void watchdog_reset(void)
        volatile wdog_t *wdp = (wdog_t *) (MMAP_WDOG);
 
        wdp->sr = 0x5555;       /* Count register */
+       wdp->sr = 0xAAAA;       /* Count register */
 }
 
 int watchdog_disable(void)
@@ -104,8 +117,11 @@ int watchdog_init(void)
 
        /* set timeout and enable watchdog */
        wdog_module = ((CFG_CLK / 1000) * CONFIG_WATCHDOG_TIMEOUT);
-       wdog_module |= (wdog_module / 8192);
-       wdp->mr = wdog_module;
+#ifdef CONFIG_M5329
+       wdp->mr = (wdog_module / 8192);
+#else
+       wdp->mr = (wdog_module / 4096);
+#endif
 
        wdp->cr = WTM_WCR_EN;
        puts("WATCHDOG:enabled\n");
index 6622eeea9814ddc5ef5972607647541f2f11f094..585216d6e6f6ed51132091f42df8970b17e101de 100644 (file)
@@ -113,7 +113,6 @@ int cpu_init_r(void)
 #ifdef CONFIG_MCFTMR
        volatile rtc_t *rtc = (volatile rtc_t *)(CFG_MCFRTC_BASE);
        volatile rtcex_t *rtcex = (volatile rtcex_t *)&rtc->extended;
-       u32 oscillator = CFG_RTC_OSCILLATOR;
 
        rtcex->gocu = (CFG_RTC_OSCILLATOR >> 16) & 0xFFFF;
        rtcex->gocl = CFG_RTC_OSCILLATOR & 0xFFFF;
index 8ace53630f87cace58ccd038a8d7eb3c7254d4eb..0398469280e5da9afd26f136f8595479d8071255 100644 (file)
@@ -46,48 +46,18 @@ int pci_##rw##_cfg_##size(struct pci_controller *hose,                      \
        u16 cfg_type = 0;                                               \
        addr = ((offset & 0xfc) | cfg_type | (dev)  | 0x80000000);      \
        out_be32(hose->cfg_addr, addr);                                 \
-       __asm__ __volatile__("nop");                                    \
        cfg_##rw(val, hose->cfg_data + (offset & mask), type, op);      \
        out_be32(hose->cfg_addr, addr & 0x7fffffff);                    \
-       __asm__ __volatile__("nop");                                    \
        return 0;                                                       \
 }
 
 PCI_OP(read, byte, u8 *, in_8, 3)
 PCI_OP(read, word, u16 *, in_le16, 2)
+PCI_OP(read, dword, u32 *, in_le32, 0)
 PCI_OP(write, byte, u8, out_8, 3)
 PCI_OP(write, word, u16, out_le16, 2)
 PCI_OP(write, dword, u32, out_le32, 0)
 
-int pci_read_cfg_dword(struct pci_controller *hose, pci_dev_t dev,
-                      int offset, u32 * val)
-{
-       u32 addr;
-       u32 tmpv;
-       u32 mask = 2;           /* word access */
-       /* Read lower 16 bits */
-       addr = ((offset & 0xfc) | (dev) | 0x80000000);
-       out_be32(hose->cfg_addr, addr);
-       __asm__ __volatile__("nop");
-       *val = (u32) in_le16((u16 *) (hose->cfg_data + (offset & mask)));
-       out_be32(hose->cfg_addr, addr & 0x7fffffff);
-       __asm__ __volatile__("nop");
-
-       /* Read upper 16 bits */
-       offset += 2;
-       addr = ((offset & 0xfc) | 1 | (dev) | 0x80000000);
-       out_be32(hose->cfg_addr, addr);
-       __asm__ __volatile__("nop");
-       tmpv = (u32) in_le16((u16 *) (hose->cfg_data + (offset & mask)));
-       out_be32(hose->cfg_addr, addr & 0x7fffffff);
-       __asm__ __volatile__("nop");
-
-       /* combine results into dword value */
-       *val = (tmpv << 16) | *val;
-
-       return 0;
-}
-
 void pci_mcf5445x_init(struct pci_controller *hose)
 {
        volatile pci_t *pci = (volatile pci_t *)MMAP_PCI;
@@ -95,7 +65,7 @@ void pci_mcf5445x_init(struct pci_controller *hose)
        volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO;
        u32 barEn = 0;
 
-       pciarb->acr = 0x001f001f;
+       pciarb->acr = 0x001F001F;
 
        /* Set PCIGNT1, PCIREQ1, PCIREQ0/PCIGNTIN, PCIGNT0/PCIREQOUT,
           PCIREQ2, PCIGNT2 */
@@ -104,53 +74,58 @@ void pci_mcf5445x_init(struct pci_controller *hose)
            GPIO_PAR_PCI_GNT0 | GPIO_PAR_PCI_REQ3_REQ3 | GPIO_PAR_PCI_REQ2 |
            GPIO_PAR_PCI_REQ1 | GPIO_PAR_PCI_REQ0;
 
+       /* Assert reset bit */
+       pci->gscr |= PCI_GSCR_PR;
+
        pci->tcr1 |= PCI_TCR1_P;
 
        /* Initiator windows */
-       pci->iw0btar = CFG_PCI_MEM_PHYS;
-       pci->iw1btar = CFG_PCI_IO_PHYS;
-       pci->iw2btar = CFG_PCI_CFG_PHYS;
+       pci->iw0btar = CFG_PCI_MEM_PHYS | (CFG_PCI_MEM_PHYS >> 16);
+       pci->iw1btar = CFG_PCI_IO_PHYS | (CFG_PCI_IO_PHYS >> 16);
+       pci->iw2btar = CFG_PCI_CFG_PHYS | (CFG_PCI_CFG_PHYS >> 16);
 
        pci->iwcr =
            PCI_IWCR_W0C_EN | PCI_IWCR_W1C_EN | PCI_IWCR_W1C_IO |
            PCI_IWCR_W2C_EN | PCI_IWCR_W2C_IO;
 
+       pci->icr = 0;
+
        /* Enable bus master and mem access */
-       pci->scr = PCI_SCR_MW | PCI_SCR_B | PCI_SCR_M;
+       pci->scr = PCI_SCR_B | PCI_SCR_M;
 
        /* Cache line size and master latency */
-       pci->cr1 = PCI_CR1_CLS(8) | PCI_CR1_LTMR(0xFF);
+       pci->cr1 = PCI_CR1_CLS(8) | PCI_CR1_LTMR(0xF8);
        pci->cr2 = 0;
 
 #ifdef CFG_PCI_BAR0
        pci->bar0 = PCI_BAR_BAR0(CFG_PCI_BAR0);
        pci->tbatr0 = CFG_PCI_TBATR0 | PCI_TBATR_EN;
-       barEn |= PCI_TCR1_B0E;
+       barEn |= PCI_TCR2_B0E;
 #endif
 #ifdef CFG_PCI_BAR1
        pci->bar1 = PCI_BAR_BAR1(CFG_PCI_BAR1);
        pci->tbatr1 = CFG_PCI_TBATR1 | PCI_TBATR_EN;
-       barEn |= PCI_TCR1_B1E;
+       barEn |= PCI_TCR2_B1E;
 #endif
 #ifdef CFG_PCI_BAR2
        pci->bar2 = PCI_BAR_BAR2(CFG_PCI_BAR2);
        pci->tbatr2 = CFG_PCI_TBATR2 | PCI_TBATR_EN;
-       barEn |= PCI_TCR1_B2E;
+       barEn |= PCI_TCR2_B2E;
 #endif
 #ifdef CFG_PCI_BAR3
        pci->bar3 = PCI_BAR_BAR3(CFG_PCI_BAR3);
        pci->tbatr3 = CFG_PCI_TBATR3 | PCI_TBATR_EN;
-       barEn |= PCI_TCR1_B3E;
+       barEn |= PCI_TCR2_B3E;
 #endif
 #ifdef CFG_PCI_BAR4
        pci->bar4 = PCI_BAR_BAR4(CFG_PCI_BAR4);
        pci->tbatr4 = CFG_PCI_TBATR4 | PCI_TBATR_EN;
-       barEn |= PCI_TCR1_B4E;
+       barEn |= PCI_TCR2_B4E;
 #endif
 #ifdef CFG_PCI_BAR5
        pci->bar5 = PCI_BAR_BAR5(CFG_PCI_BAR5);
        pci->tbatr5 = CFG_PCI_TBATR5 | PCI_TBATR_EN;
-       barEn |= PCI_TCR1_B5E;
+       barEn |= PCI_TCR2_B5E;
 #endif
 
        pci->tcr2 = barEn;
index 423583d04adbf30c54d2b306265abc4cd0be8928..d64c5af0db8771c9ded63545822fc75998267204 100644 (file)
@@ -279,14 +279,13 @@ icache_enable:
        move.l  (%a1), %d1
 
        move.l  #0x00040100, %d0        /* Invalidate icache */
-       or.l    %d1, %d0
        movec   %d0, %CACR
 
-       move.l  #(CFG_SDRAM_BASE + 0xc000), %d0 /* Setup icache */
+       move.l  #(CFG_SDRAM_BASE + 0x1c000), %d0        /* Setup icache */
        movec   %d0, %ACR2
 
-       or.l    #0x00088400, %d1        /* Enable bcache and icache */
-       movec   %d1, %CACR
+       move.l  #0x04088020, %d0        /* Enable bcache and icache */
+       movec   %d0, %CACR
 
        move.l #(ICACHE_STATUS), %a1
        moveq   #1, %d0
@@ -298,7 +297,7 @@ icache_disable:
        move.l #(CACR_STATUS), %a1      /* read CACR Status */
        move.l  (%a1), %d0
 
-       and.l   #0xFFF77BFF, %d0
+       move.l  #0xFFF77BFF, %d0
        or.l    #0x00040100, %d0        /* Setup cache mask */
        movec   %d0, %CACR              /* Invalidate icache */
        clr.l   %d0
@@ -321,7 +320,7 @@ icache_invalid:
        move.l #(CACR_STATUS), %a1      /* read CACR Status */
        move.l  (%a1), %d0
 
-       or.l    #0x00040100, %d0        /* Invalidate icache */
+       move.l  #0x00040100, %d0        /* Invalidate icache */
        movec   %d0, %CACR              /* Enable and invalidate cache */
        rts
 
@@ -330,17 +329,11 @@ dcache_enable:
        move.l #(CACR_STATUS), %a1      /* read CACR Status */
        move.l  (%a1), %d1
 
-       move.l  #0x01000000, %d0
-       or.l    %d1, %d0
+       move.l  #0x01040100, %d0
        movec   %d0, %CACR              /* Invalidate dcache */
 
-       move.l  #(CFG_SDRAM_BASE + 0xc000), %d0
-       movec   %d0, %ACR0
-       move.l  #0, %d0
-       movec   %d0, %ACR1
-
-       or.l    #0x80000000, %d1        /* Enable bcache and icache */
-       movec   %d1, %CACR
+       move.l  #0x80088020, %d0        /* Enable bcache and icache */
+       movec   %d0, %CACR
 
        move.l #(DCACHE_STATUS), %a1
        moveq   #1, %d0
@@ -369,7 +362,7 @@ dcache_invalid:
        move.l #(CACR_STATUS), %a1      /* read CACR Status */
        move.l  (%a1), %d0
 
-       or.l    #0x01000000, %d0        /* Setup cache mask */
+       move.l  #0x81088020, %d0        /* Setup cache mask */
        movec   %d0, %CACR              /* Enable and invalidate cache */
        rts
 
diff --git a/cpu/mcf547x_8x/Makefile b/cpu/mcf547x_8x/Makefile
new file mode 100644 (file)
index 0000000..e12bef1
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# (C) Copyright 2000-2004
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+# CFLAGS += -DET_DEBUG
+
+LIB    = lib$(CPU).a
+
+START  =
+COBJS  = cpu.o speed.o cpu_init.o pci.o interrupts.o slicetimer.o
+
+SRCS   := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
+START  := $(addprefix $(obj),$(START))
+
+all:   $(obj).depend $(START) $(LIB)
+
+$(LIB):        $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+#########################################################################
+
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/cpu/mcf547x_8x/config.mk b/cpu/mcf547x_8x/config.mk
new file mode 100644 (file)
index 0000000..e5f4385
--- /dev/null
@@ -0,0 +1,31 @@
+#
+# (C) Copyright 2003 Josef Baumgartner <josef.baumgartner@telex.de>
+#
+# (C) Copyright 2000-2004
+# 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
+#
+
+PLATFORM_RELFLAGS += -ffixed-d7 -msep-data
+ifeq ($(findstring 4.2,$(shell $(CC) --version)),4.2)
+PLATFORM_CPPFLAGS += -mcpu=5485 -fPIC
+else
+PLATFORM_CPPFLAGS += -m5407 -fPIC
+endif
diff --git a/cpu/mcf547x_8x/cpu.c b/cpu/mcf547x_8x/cpu.c
new file mode 100644 (file)
index 0000000..528bca6
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ *
+ * (C) Copyright 2000-2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <watchdog.h>
+#include <command.h>
+
+#include <asm/immap.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int do_reset(cmd_tbl_t * cmdtp, bd_t * bd, int flag, int argc, char *argv[])
+{
+       volatile gptmr_t *gptmr = (gptmr_t *) (MMAP_GPTMR);
+
+       gptmr->pre = 10;
+       gptmr->cnt = 1;
+
+       /* enable watchdog, set timeout to 0 and wait */
+       gptmr->mode = GPT_TMS_SGPIO;
+       gptmr->ctrl = GPT_CTRL_WDEN | GPT_CTRL_CE;
+
+       /* we don't return! */
+       return 1;
+};
+
+int checkcpu(void)
+{
+       volatile siu_t *siu = (siu_t *) MMAP_SIU;
+       u16 id = 0;
+
+       puts("CPU:   ");
+
+       switch ((siu->jtagid & 0x000FF000) >> 12) {
+       case 0x0C:
+               id = 5485;
+               break;
+       case 0x0D:
+               id = 5484;
+               break;
+       case 0x0E:
+               id = 5483;
+               break;
+       case 0x0F:
+               id = 5482;
+               break;
+       case 0x10:
+               id = 5481;
+               break;
+       case 0x11:
+               id = 5480;
+               break;
+       case 0x12:
+               id = 5475;
+               break;
+       case 0x13:
+               id = 5474;
+               break;
+       case 0x14:
+               id = 5473;
+               break;
+       case 0x15:
+               id = 5472;
+               break;
+       case 0x16:
+               id = 5471;
+               break;
+       case 0x17:
+               id = 5470;
+               break;
+       }
+
+       if (id) {
+               printf("Freescale MCF%d\n", id);
+               printf("       CPU CLK %d Mhz BUS CLK %d Mhz\n",
+                      (int)(gd->cpu_clk / 1000000),
+                      (int)(gd->bus_clk / 1000000));
+       }
+
+       return 0;
+};
+
+#if defined(CONFIG_HW_WATCHDOG)
+/* Called by macro WATCHDOG_RESET */
+void hw_watchdog_reset(void)
+{
+       volatile gptmr_t *gptmr = (gptmr_t *) (MMAP_GPTMR);
+
+       gptmr->ocpw = 0xa5;
+}
+
+int watchdog_disable(void)
+{
+       volatile gptmr_t *gptmr = (gptmr_t *) (MMAP_GPTMR);
+
+       /* UserManual, once the wdog is disabled, wdog cannot be re-enabled */
+       gptmr->mode = 0;
+       gptmr->ctrl = 0;
+
+       puts("WATCHDOG:disabled\n");
+
+       return (0);
+}
+
+int watchdog_init(void)
+{
+
+       volatile gptmr_t *gptmr = (gptmr_t *) (MMAP_GPTMR);
+
+       gptmr->pre = CONFIG_WATCHDOG_TIMEOUT;
+       gptmr->cnt = CFG_TIMER_PRESCALER * 1000;
+
+       gptmr->mode = GPT_TMS_SGPIO;
+       gptmr->ctrl = GPT_CTRL_CE | GPT_CTRL_WDEN;
+       puts("WATCHDOG:enabled\n");
+
+       return (0);
+}
+#endif                         /* CONFIG_HW_WATCHDOG */
diff --git a/cpu/mcf547x_8x/cpu_init.c b/cpu/mcf547x_8x/cpu_init.c
new file mode 100644 (file)
index 0000000..11154c6
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ *
+ * (C) Copyright 2000-2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * (C) Copyright 2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <MCD_dma.h>
+#include <asm/immap.h>
+
+/*
+ * Breath some life into the CPU...
+ *
+ * Set up the memory map,
+ * initialize a bunch of registers,
+ * initialize the UPM's
+ */
+void cpu_init_f(void)
+{
+       volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO;
+       volatile fbcs_t *fbcs = (fbcs_t *) MMAP_FBCS;
+       volatile xlbarb_t *xlbarb = (volatile xlbarb_t *) MMAP_XARB;
+
+       xlbarb->adrto = 0x2000;
+       xlbarb->datto = 0x2000;
+       xlbarb->busto = 0x3000;
+
+       xlbarb->cfg = XARB_SR_AT | XARB_SR_DT;
+
+       /* Master Priority Enable */
+       xlbarb->pri = 0;
+       xlbarb->prien = 0xff;
+
+#if (defined(CFG_CS0_BASE) && defined(CFG_CS0_MASK) && defined(CFG_CS0_CTRL))
+       fbcs->csar0 = CFG_CS0_BASE;
+       fbcs->cscr0 = CFG_CS0_CTRL;
+       fbcs->csmr0 = CFG_CS0_MASK;
+#endif
+
+#if (defined(CFG_CS1_BASE) && defined(CFG_CS1_MASK) && defined(CFG_CS1_CTRL))
+       fbcs->csar1 = CFG_CS1_BASE;
+       fbcs->cscr1 = CFG_CS1_CTRL;
+       fbcs->csmr1 = CFG_CS1_MASK;
+#endif
+
+#if (defined(CFG_CS2_BASE) && defined(CFG_CS2_MASK) && defined(CFG_CS2_CTRL))
+       fbcs->csar2 = CFG_CS2_BASE;
+       fbcs->cscr2 = CFG_CS2_CTRL;
+       fbcs->csmr2 = CFG_CS2_MASK;
+#endif
+
+#if (defined(CFG_CS3_BASE) && defined(CFG_CS3_MASK) && defined(CFG_CS3_CTRL))
+       fbcs->csar3 = CFG_CS3_BASE;
+       fbcs->cscr3 = CFG_CS3_CTRL;
+       fbcs->csmr3 = CFG_CS3_MASK;
+#endif
+
+#if (defined(CFG_CS4_BASE) && defined(CFG_CS4_MASK) && defined(CFG_CS4_CTRL))
+       fbcs->csar4 = CFG_CS4_BASE;
+       fbcs->cscr4 = CFG_CS4_CTRL;
+       fbcs->csmr4 = CFG_CS4_MASK;
+#endif
+
+#if (defined(CFG_CS5_BASE) && defined(CFG_CS5_MASK) && defined(CFG_CS5_CTRL))
+       fbcs->csar5 = CFG_CS5_BASE;
+       fbcs->cscr5 = CFG_CS5_CTRL;
+       fbcs->csmr5 = CFG_CS5_MASK;
+#endif
+
+#ifdef CONFIG_FSL_I2C
+       gpio->par_feci2cirq = GPIO_PAR_FECI2CIRQ_SCL | GPIO_PAR_FECI2CIRQ_SDA;
+#endif
+
+       icache_enable();
+}
+
+/*
+ * initialize higher level parts of CPU like timers
+ */
+int cpu_init_r(void)
+{
+#if defined(CONFIG_CMD_NET) && defined(CONFIG_FSLDMAFEC)
+       MCD_initDma((dmaRegs *) (MMAP_MCDMA), (void *)(MMAP_SRAM + 512),
+                   MCD_RELOC_TASKS);
+#endif
+       return (0);
+}
+
+void uart_port_conf(void)
+{
+       volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO;
+       volatile u8 *pscsicr = (u8 *) (CFG_UART_BASE + 0x40);
+
+       /* Setup Ports: */
+       switch (CFG_UART_PORT) {
+       case 0:
+               gpio->par_psc0 = (GPIO_PAR_PSC0_TXD0 | GPIO_PAR_PSC0_RXD0);
+               break;
+       case 1:
+               gpio->par_psc1 = (GPIO_PAR_PSC1_TXD1 | GPIO_PAR_PSC1_RXD1);
+               break;
+       case 2:
+               gpio->par_psc2 = (GPIO_PAR_PSC2_TXD2 | GPIO_PAR_PSC2_RXD2);
+               break;
+       case 3:
+               gpio->par_psc3 = (GPIO_PAR_PSC3_TXD3 | GPIO_PAR_PSC3_RXD3);
+               break;
+       }
+
+       *pscsicr &= 0xF8;
+}
diff --git a/cpu/mcf547x_8x/interrupts.c b/cpu/mcf547x_8x/interrupts.c
new file mode 100644 (file)
index 0000000..d684ffe
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/* CPU specific interrupt routine */
+#include <common.h>
+#include <asm/immap.h>
+
+int interrupt_init(void)
+{
+       volatile int0_t *intp = (int0_t *) (CFG_INTR_BASE);
+
+       /* Make sure all interrupts are disabled */
+       intp->imrh0 |= 0xFFFFFFFF;
+       intp->imrl0 |= 0xFFFFFFFF;
+
+       enable_interrupts();
+
+       return 0;
+}
+
+#if defined(CONFIG_SLTTMR)
+void dtimer_intr_setup(void)
+{
+       volatile int0_t *intp = (int0_t *) (CFG_INTR_BASE);
+
+       intp->icr0[CFG_TMRINTR_NO] = CFG_TMRINTR_PRI;
+       intp->imrh0 &= ~CFG_TMRINTR_MASK;
+}
+#endif
diff --git a/cpu/mcf547x_8x/pci.c b/cpu/mcf547x_8x/pci.c
new file mode 100644 (file)
index 0000000..70378b0
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * PCI Configuration space access support
+ */
+#include <common.h>
+#include <pci.h>
+#include <asm/io.h>
+#include <asm/immap.h>
+
+#if defined(CONFIG_PCI)
+/* System RAM mapped over PCI */
+#define CFG_PCI_SYS_MEM_BUS    CFG_SDRAM_BASE
+#define CFG_PCI_SYS_MEM_PHYS   CFG_SDRAM_BASE
+#define CFG_PCI_SYS_MEM_SIZE   (1024 * 1024 * 1024)
+
+#define cfg_read(val, addr, type, op)          *val = op((type)(addr));
+#define cfg_write(val, addr, type, op)         op((type *)(addr), (val));
+
+#define PCI_OP(rw, size, type, op, mask)                               \
+int pci_##rw##_cfg_##size(struct pci_controller *hose,                 \
+       pci_dev_t dev, int offset, type val)                            \
+{                                                                      \
+       u32 addr = 0;                                                   \
+       u16 cfg_type = 0;                                               \
+       addr = ((offset & 0xfc) | cfg_type | (dev)  | 0x80000000);      \
+       out_be32(hose->cfg_addr, addr);                                 \
+       cfg_##rw(val, hose->cfg_data + (offset & mask), type, op);      \
+       __asm__ __volatile__("nop");                                    \
+       __asm__ __volatile__("nop");                                    \
+       out_be32(hose->cfg_addr, addr & 0x7fffffff);                    \
+       return 0;                                                       \
+}
+
+PCI_OP(read, byte, u8 *, in_8, 3)
+PCI_OP(read, word, u16 *, in_le16, 2)
+PCI_OP(write, byte, u8, out_8, 3)
+PCI_OP(write, word, u16, out_le16, 2)
+PCI_OP(write, dword, u32, out_le32, 0)
+
+int pci_read_cfg_dword(struct pci_controller *hose, pci_dev_t dev,
+                      int offset, u32 * val)
+{
+       u32 addr;
+       u32 tmpv;
+       u32 mask = 2;           /* word access */
+       /* Read lower 16 bits */
+       addr = ((offset & 0xfc) | (dev) | 0x80000000);
+       out_be32(hose->cfg_addr, addr);
+       *val = (u32) in_le16((u16 *) (hose->cfg_data + (offset & mask)));
+       __asm__ __volatile__("nop");
+       out_be32(hose->cfg_addr, addr & 0x7fffffff);
+
+       /* Read upper 16 bits */
+       offset += 2;
+       addr = ((offset & 0xfc) | 1 | (dev) | 0x80000000);
+       out_be32(hose->cfg_addr, addr);
+       tmpv = (u32) in_le16((u16 *) (hose->cfg_data + (offset & mask)));
+       __asm__ __volatile__("nop");
+       out_be32(hose->cfg_addr, addr & 0x7fffffff);
+
+       /* combine results into dword value */
+       *val = (tmpv << 16) | *val;
+
+       return 0;
+}
+
+void pci_mcf547x_8x_init(struct pci_controller *hose)
+{
+       volatile pci_t *pci = (volatile pci_t *) MMAP_PCI;
+       volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO;
+
+       /* Port configuration */
+       gpio->par_pcibg =
+           GPIO_PAR_PCIBG_PCIBG0(3) | GPIO_PAR_PCIBG_PCIBG1(3) |
+           GPIO_PAR_PCIBG_PCIBG2(3) | GPIO_PAR_PCIBG_PCIBG3(3) |
+           GPIO_PAR_PCIBG_PCIBG4(3);
+       gpio->par_pcibr =
+           GPIO_PAR_PCIBR_PCIBR0(3) | GPIO_PAR_PCIBR_PCIBR1(3) |
+           GPIO_PAR_PCIBR_PCIBR2(3) | GPIO_PAR_PCIBR_PCIBR3(3) |
+           GPIO_PAR_PCIBR_PCIBR4(3);
+
+       /* Assert reset bit */
+       pci->gscr |= PCI_GSCR_PR;
+
+       pci->tcr1 = PCI_TCR1_P;
+
+       /* Initiator windows */
+       pci->iw0btar = CFG_PCI_MEM_PHYS | (CFG_PCI_MEM_PHYS >> 16);
+       pci->iw1btar = CFG_PCI_IO_PHYS | (CFG_PCI_IO_PHYS >> 16);
+       pci->iw2btar = CFG_PCI_CFG_PHYS | (CFG_PCI_CFG_PHYS >> 16);
+
+       pci->iwcr =
+           PCI_IWCR_W0C_EN | PCI_IWCR_W1C_EN | PCI_IWCR_W1C_IO |
+           PCI_IWCR_W2C_EN | PCI_IWCR_W2C_IO;
+
+       pci->icr = 0;
+
+       /* Enable bus master and mem access */
+       pci->scr = PCI_SCR_B | PCI_SCR_M;
+
+       /* Cache line size and master latency */
+       pci->cr1 = PCI_CR1_CLS(8) | PCI_CR1_LTMR(0xF8);
+       pci->cr2 = 0;
+
+#ifdef CFG_PCI_BAR0
+       pci->bar0 = PCI_BAR_BAR0(CFG_PCI_BAR0);
+       pci->tbatr0a = CFG_PCI_TBATR0 | PCI_TBATR_EN;
+#endif
+#ifdef CFG_PCI_BAR1
+       pci->bar1 = PCI_BAR_BAR1(CFG_PCI_BAR1);
+       pci->tbatr1a = CFG_PCI_TBATR1 | PCI_TBATR_EN;
+#endif
+
+       /* Deassert reset bit */
+       pci->gscr &= ~PCI_GSCR_PR;
+       udelay(1000);
+
+       /* Enable PCI bus master support */
+       hose->first_busno = 0;
+       hose->last_busno = 0xff;
+
+       pci_set_region(hose->regions + 0, CFG_PCI_MEM_BUS, CFG_PCI_MEM_PHYS,
+                      CFG_PCI_MEM_SIZE, PCI_REGION_MEM);
+
+       pci_set_region(hose->regions + 1, CFG_PCI_IO_BUS, CFG_PCI_IO_PHYS,
+                      CFG_PCI_IO_SIZE, PCI_REGION_IO);
+
+       pci_set_region(hose->regions + 2, CFG_PCI_SYS_MEM_BUS,
+                      CFG_PCI_SYS_MEM_PHYS, CFG_PCI_SYS_MEM_SIZE,
+                      PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+       hose->region_count = 3;
+
+       hose->cfg_addr = &(pci->car);
+       hose->cfg_data = (volatile unsigned char *)CFG_PCI_CFG_BUS;
+
+       pci_set_ops(hose, pci_read_cfg_byte, pci_read_cfg_word,
+                   pci_read_cfg_dword, pci_write_cfg_byte, pci_write_cfg_word,
+                   pci_write_cfg_dword);
+
+       /* Hose scan */
+       pci_register_hose(hose);
+       hose->last_busno = pci_hose_scan(hose);
+}
+#endif                         /* CONFIG_PCI */
diff --git a/cpu/mcf547x_8x/slicetimer.c b/cpu/mcf547x_8x/slicetimer.c
new file mode 100644 (file)
index 0000000..494f98f
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+ * (C) Copyright 2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+
+#include <asm/timer.h>
+#include <asm/immap.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static ulong timestamp;
+
+#if defined(CONFIG_SLTTMR)
+#ifndef CFG_UDELAY_BASE
+#      error   "uDelay base not defined!"
+#endif
+
+#if !defined(CFG_TMR_BASE) || !defined(CFG_INTR_BASE) || !defined(CFG_TMRINTR_NO) || !defined(CFG_TMRINTR_MASK)
+#      error   "TMR_BASE, INTR_BASE, TMRINTR_NO or TMRINTR_MASk not defined!"
+#endif
+extern void dtimer_intr_setup(void);
+
+void udelay(unsigned long usec)
+{
+       volatile slt_t *timerp = (slt_t *) (CFG_UDELAY_BASE);
+       u32 now, freq;
+
+       /* 1 us period */
+       freq = CFG_TIMER_PRESCALER;
+
+       timerp->cr = 0;         /* Disable */
+       timerp->tcnt = usec * freq;
+       timerp->cr = SLT_CR_TEN;
+
+       now = timerp->cnt;
+       while (now != 0)
+               now = timerp->cnt;
+
+       timerp->sr |= SLT_SR_ST;
+       timerp->cr = 0;
+}
+
+void dtimer_interrupt(void *not_used)
+{
+       volatile slt_t *timerp = (slt_t *) (CFG_TMR_BASE);
+
+       /* check for timer interrupt asserted */
+       if ((CFG_TMRPND_REG & CFG_TMRINTR_MASK) == CFG_TMRINTR_PEND) {
+               timerp->sr |= SLT_SR_ST;
+               timestamp++;
+               return;
+       }
+}
+
+void timer_init(void)
+{
+       volatile slt_t *timerp = (slt_t *) (CFG_TMR_BASE);
+
+       timestamp = 0;
+
+       timerp->cr = 0;         /* disable timer */
+       timerp->tcnt = 0;
+       timerp->sr = SLT_SR_BE | SLT_SR_ST;     /* clear status */
+
+       /* initialize and enable timer interrupt */
+       irq_install_handler(CFG_TMRINTR_NO, dtimer_interrupt, 0);
+
+       /* Interrupt every ms */
+       timerp->tcnt = 1000 * CFG_TIMER_PRESCALER;
+
+       dtimer_intr_setup();
+
+       /* set a period of 1us, set timer mode to restart and
+          enable timer and interrupt */
+       timerp->cr = SLT_CR_RUN | SLT_CR_IEN | SLT_CR_TEN;
+}
+
+void reset_timer(void)
+{
+       timestamp = 0;
+}
+
+ulong get_timer(ulong base)
+{
+       return (timestamp - base);
+}
+
+void set_timer(ulong t)
+{
+       timestamp = t;
+}
+#endif                         /* CONFIG_SLTTMR */
diff --git a/cpu/mcf547x_8x/speed.c b/cpu/mcf547x_8x/speed.c
new file mode 100644 (file)
index 0000000..389e7c9
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ *
+ * (C) Copyright 2000-2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/processor.h>
+
+#include <asm/immap.h>
+
+/*
+ * get_clocks() fills in gd->cpu_clock and gd->bus_clk
+ */
+int get_clocks(void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       gd->bus_clk = CFG_CLK;
+       gd->cpu_clk = (gd->bus_clk * 2);
+       return (0);
+}
diff --git a/cpu/mcf547x_8x/start.S b/cpu/mcf547x_8x/start.S
new file mode 100644 (file)
index 0000000..442665f
--- /dev/null
@@ -0,0 +1,361 @@
+/*
+ * Copyright (C) 2003  Josef Baumgartner <josef.baumgartner@telex.de>
+ * Based on code from Bernhard Kuhn <bkuhn@metrowerks.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <config.h>
+#include "version.h"
+
+#ifndef         CONFIG_IDENT_STRING
+#define         CONFIG_IDENT_STRING ""
+#endif
+
+/* last three long word reserved for cache status */
+#define ICACHE_STATUS  (CFG_INIT_RAM_ADDR+CFG_INIT_RAM_END- 4)
+#define DCACHE_STATUS  (CFG_INIT_RAM_ADDR+CFG_INIT_RAM_END- 8)
+#define CACR_STATUS    (CFG_INIT_RAM_ADDR+CFG_INIT_RAM_END-12)
+
+#define _START _start
+#define _FAULT _fault
+
+#define SAVE_ALL                                               \
+       move.w  #0x2700,%sr;            /* disable intrs */     \
+       subl    #60,%sp;                /* space for 15 regs */ \
+       moveml  %d0-%d7/%a0-%a6,%sp@;
+
+#define RESTORE_ALL                                            \
+       moveml  %sp@,%d0-%d7/%a0-%a6;                           \
+       addl    #60,%sp;                /* space for 15 regs */ \
+       rte;
+
+.text
+/*
+ *     Vector table. This is used for initial platform startup.
+ *     These vectors are to catch any un-intended traps.
+ */
+_vectors:
+
+INITSP:                .long   0x00000000      /* Initial SP   */
+INITPC:                .long   _START  /* Initial PC           */
+vector02:      .long   _FAULT  /* Access Error         */
+vector03:      .long   _FAULT  /* Address Error        */
+vector04:      .long   _FAULT  /* Illegal Instruction  */
+vector05:      .long   _FAULT  /* Reserved             */
+vector06:      .long   _FAULT  /* Reserved             */
+vector07:      .long   _FAULT  /* Reserved             */
+vector08:      .long   _FAULT  /* Privilege Violation  */
+vector09:      .long   _FAULT  /* Trace                */
+vector0A:      .long   _FAULT  /* Unimplemented A-Line */
+vector0B:      .long   _FAULT  /* Unimplemented F-Line */
+vector0C:      .long   _FAULT  /* Debug Interrupt      */
+vector0D:      .long   _FAULT  /* Reserved             */
+vector0E:      .long   _FAULT  /* Format Error         */
+vector0F:      .long   _FAULT  /* Unitialized Int.     */
+
+/* Reserved */
+vector10_17:
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+
+vector18:      .long   _FAULT  /* Spurious Interrupt   */
+vector19:      .long   _FAULT  /* Autovector Level 1   */
+vector1A:      .long   _FAULT  /* Autovector Level 2   */
+vector1B:      .long   _FAULT  /* Autovector Level 3   */
+vector1C:      .long   _FAULT  /* Autovector Level 4   */
+vector1D:      .long   _FAULT  /* Autovector Level 5   */
+vector1E:      .long   _FAULT  /* Autovector Level 6   */
+vector1F:      .long   _FAULT  /* Autovector Level 7   */
+
+/* TRAP #0 - #15 */
+vector20_2F:
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+
+/* Reserved    */
+vector30_3F:
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+
+vector64_127:
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+
+vector128_191:
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+
+vector192_255:
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+.long  _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT, _FAULT
+
+       .text
+
+       .globl  _start
+_start:
+       nop
+       nop
+       move.w #0x2700,%sr              /* Mask off Interrupt */
+
+       /* Set vector base register at the beginning of the Flash */
+       move.l  #CFG_FLASH_BASE, %d0
+       movec   %d0, %VBR
+
+       move.l  #(CFG_INIT_RAM_ADDR + CFG_INIT_RAM_CTRL), %d0
+       movec   %d0, %RAMBAR0
+
+       move.l  #(CFG_INIT_RAM1_ADDR + CFG_INIT_RAM1_CTRL), %d0
+       movec   %d0, %RAMBAR1
+
+       move.l  #CFG_MBAR, %d0          /* set MBAR address */
+       move.c  %d0, %MBAR
+
+       /* invalidate and disable cache */
+       move.l  #0x01040100, %d0        /* Invalidate cache cmd */
+       movec   %d0, %CACR              /* Invalidate cache */
+       move.l  #0, %d0
+       movec   %d0, %ACR0
+       movec   %d0, %ACR1
+       movec   %d0, %ACR2
+       movec   %d0, %ACR3
+
+       /* initialize general use internal ram */
+       move.l #0, %d0
+       move.l #(ICACHE_STATUS), %a1    /* icache */
+       move.l #(DCACHE_STATUS), %a2    /* icache */
+       move.l #(CACR_STATUS), %a3      /* CACR */
+       move.l %d0, (%a1)
+       move.l %d0, (%a2)
+       move.l %d0, (%a3)
+
+       /* set stackpointer to end of internal ram to get some stackspace for the
+          first c-code */
+       move.l  #(CFG_INIT_RAM_ADDR + CFG_INIT_SP_OFFSET), %sp
+       clr.l %sp@-
+
+       move.l #__got_start, %a5        /* put relocation table address to a5 */
+
+       bsr cpu_init_f                  /* run low-level CPU init code (from flash) */
+       bsr board_init_f                /* run low-level board init code (from flash) */
+
+       /* board_init_f() does not return */
+
+/*------------------------------------------------------------------------------*/
+
+/*
+ * void relocate_code (addr_sp, gd, addr_moni)
+ *
+ * This "function" does not return, instead it continues in RAM
+ * after relocating the monitor code.
+ *
+ * r3 = dest
+ * r4 = src
+ * r5 = length in bytes
+ * r6 = cachelinesize
+ */
+       .globl  relocate_code
+relocate_code:
+       link.w %a6,#0
+       move.l 8(%a6), %sp              /* set new stack pointer */
+
+       move.l 12(%a6), %d0             /* Save copy of Global Data pointer */
+       move.l 16(%a6), %a0             /* Save copy of Destination Address */
+
+       move.l #CFG_MONITOR_BASE, %a1
+       move.l #__init_end, %a2
+       move.l %a0, %a3
+
+       /* copy the code to RAM */
+1:
+       move.l (%a1)+, (%a3)+
+       cmp.l  %a1,%a2
+       bgt.s    1b
+
+/*
+ * We are done. Do not return, instead branch to second part of board
+ * initialization, now running from RAM.
+ */
+       move.l  %a0, %a1
+       add.l   #(in_ram - CFG_MONITOR_BASE), %a1
+       jmp     (%a1)
+
+in_ram:
+
+clear_bss:
+       /*
+        * Now clear BSS segment
+        */
+       move.l  %a0, %a1
+       add.l   #(_sbss - CFG_MONITOR_BASE),%a1
+       move.l  %a0, %d1
+       add.l   #(_ebss - CFG_MONITOR_BASE),%d1
+6:
+       clr.l   (%a1)+
+       cmp.l   %a1,%d1
+       bgt.s   6b
+
+       /*
+        * fix got table in RAM
+        */
+       move.l  %a0, %a1
+       add.l   #(__got_start - CFG_MONITOR_BASE),%a1
+       move.l  %a1,%a5         /* * fix got pointer register a5 */
+
+       move.l  %a0, %a2
+       add.l   #(__got_end - CFG_MONITOR_BASE),%a2
+
+7:
+       move.l  (%a1),%d1
+       sub.l   #_start,%d1
+       add.l   %a0,%d1
+       move.l  %d1,(%a1)+
+       cmp.l   %a2, %a1
+       bne     7b
+
+       /* calculate relative jump to board_init_r in ram */
+       move.l %a0, %a1
+       add.l #(board_init_r - CFG_MONITOR_BASE), %a1
+
+       /* set parameters for board_init_r */
+       move.l %a0,-(%sp)               /* dest_addr */
+       move.l %d0,-(%sp)               /* gd */
+       jsr     (%a1)
+
+/*------------------------------------------------------------------------------*/
+/* exception code */
+       .globl _fault
+_fault:
+       jmp _fault
+       .globl  _exc_handler
+
+_exc_handler:
+       SAVE_ALL
+       movel   %sp,%sp@-
+       bsr exc_handler
+       addql   #4,%sp
+       RESTORE_ALL
+
+       .globl  _int_handler
+_int_handler:
+       SAVE_ALL
+       movel   %sp,%sp@-
+       bsr int_handler
+       addql   #4,%sp
+       RESTORE_ALL
+
+/*------------------------------------------------------------------------------*/
+/* cache functions */
+       .globl  icache_enable
+icache_enable:
+       move.l  #(CFG_SDRAM_BASE + 0x1c000), %d0
+       movec   %d0, %ACR2                      /* Enable cache */
+
+       move.l  #0x020C8100, %d0                /* Setup cache mask */
+       movec   %d0, %CACR                      /* Enable cache */
+       nop
+
+       move.l #(ICACHE_STATUS), %a1
+       moveq   #1, %d0
+       move.l  %d0, (%a1)
+       rts
+
+       .globl  icache_disable
+icache_disable:
+       move.l  #0x000C8100, %d0                /* Setup cache mask */
+       movec   %d0, %CACR                      /* Disable cache */
+       clr.l   %d0                             /* Setup cache mask */
+       movec   %d0, %ACR2
+       movec   %d0, %ACR3
+
+       move.l #(ICACHE_STATUS), %a1
+       moveq   #0, %d0
+       move.l  %d0, (%a1)
+       rts
+
+       .globl  icache_invalid
+icache_invalid:
+       move.l  #0x000C8100, %d0                /* Setup cache mask */
+       movec   %d0, %CACR                      /* Enable cache */
+       rts
+
+       .globl  icache_status
+icache_status:
+       move.l #(ICACHE_STATUS), %a1
+       move.l  (%a1), %d0
+       rts
+
+       .globl  dcache_enable
+dcache_enable:
+       bsr     icache_disable
+
+       move.l  #(CFG_SDRAM_BASE + 0xc000), %d0
+       movec   %d0, %ACR0                      /* Enable cache */
+
+       move.l  #0xA30C8100, %d0                /* Invalidate cache cmd */
+       movec   %d0, %CACR                      /* Invalidate cache */
+
+       move.l #(DCACHE_STATUS), %a1
+       moveq   #1, %d0
+       move.l  %d0, (%a1)
+       rts
+
+       .globl  dcache_disable
+dcache_disable:
+       move.l  #0xA30C8100, %d0                /* Setup cache mask */
+       movec   %d0, %CACR                      /* Disable cache */
+       clr.l   %d0                             /* Setup cache mask */
+       movec   %d0, %ACR0
+       movec   %d0, %ACR1
+
+       move.l #(DCACHE_STATUS), %a1
+       moveq   #0, %d0
+       move.l  %d0, (%a1)
+       rts
+
+       .globl  dcache_status
+dcache_status:
+       move.l #(DCACHE_STATUS), %a1
+       move.l  (%a1), %d0
+       rts
+
+/*------------------------------------------------------------------------------*/
+
+       .globl  version_string
+version_string:
+       .ascii U_BOOT_VERSION
+       .ascii " (", __DATE__, " - ", __TIME__, ")"
+       .ascii CONFIG_IDENT_STRING, "\0"
index 3337d8cc3304c567829311c41f0b7181d603f5b0..e643037d2745690afcff59de3636c2683b71d51c 100644 (file)
@@ -73,11 +73,6 @@ void cpu_init_f (volatile immap_t * im)
                          (CFG_ACR_PIPE_DEP << ACR_PIPE_DEP_SHIFT);
 #endif
 
-#ifdef CFG_SPCR_TSECEP
-       /* eTSEC Emergency priority */
-       im->sysconf.spcr = (im->sysconf.spcr & ~SPCR_TSECEP) | (CFG_SPCR_TSECEP << SPCR_TSECEP_SHIFT);
-#endif
-
 #ifdef CFG_ACR_RPTCNT
        /* Arbiter repeat count */
        im->arbiter.acr = (im->arbiter.acr & ~(ACR_RPTCNT)) |
@@ -85,7 +80,7 @@ void cpu_init_f (volatile immap_t * im)
 #endif
 
 #ifdef CFG_SPCR_TSECEP
-       /* all TSEC's Emergency priority */
+       /* all eTSEC's Emergency priority */
        im->sysconf.spcr = (im->sysconf.spcr & ~SPCR_TSECEP) |
                           (CFG_SPCR_TSECEP << SPCR_TSECEP_SHIFT);
 #endif
index 61c937981c3bd270e1f3fc333c335d651e4c8dde..f598699b2c6271564850c8ae5e549072fd39cd1b 100644 (file)
@@ -367,17 +367,17 @@ int get_clocks(void)
 #endif
 
 #if defined(CONFIG_MPC837X) || defined(CONFIG_MPC8315)
-       switch ((sccr & SCCR_SATACM) >> SCCR_SATACM_SHIFT) {
-       case SCCR_SATACM_0:
+       switch ((sccr & SCCR_SATA1CM) >> SCCR_SATA1CM_SHIFT) {
+       case 0:
                sata_clk = 0;
                break;
-       case SCCR_SATACM_1:
+       case 1:
                sata_clk = csb_clk;
                break;
-       case SCCR_SATACM_2:
+       case 2:
                sata_clk = csb_clk / 2;
                break;
-       case SCCR_SATACM_3:
+       case 3:
                sata_clk = csb_clk / 3;
                break;
        default:
index d179d701bddcb2a13f009c465cb6ac24c681f200..2205dca02437efb63f38f3152f080c31b27c60f6 100644 (file)
@@ -30,7 +30,7 @@ LIB   = $(obj)lib$(CPU).a
 
 START  = start.o resetvec.o
 COBJS-$(CONFIG_OF_LIBFDT) += fdt.o
-COBJS  = traps.o cpu.o cpu_init.o speed.o interrupts.o \
+COBJS  = traps.o cpu.o cpu_init.o speed.o interrupts.o tlb.o \
          pci.o serial_scc.o commproc.o ether_fcc.o spd_sdram.o qe_io.o \
          $(COBJS-y)
 
index fdb9ecbd509b47f84077cca8cd5ac8c07c0a5229..c0ff1d5120d5237efdde7689934d6ce30f6586a2 100644 (file)
@@ -31,6 +31,8 @@
 #include <asm/processor.h>
 #include <ioports.h>
 #include <asm/io.h>
+#include <asm/mmu.h>
+#include <asm/fsl_law.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -122,6 +124,34 @@ void config_8560_ioports (volatile ccsr_cpm_t * cpm)
 }
 #endif
 
+/* We run cpu_init_early_f in AS = 1 */
+void cpu_init_early_f(void)
+{
+       set_tlb(0, CFG_CCSRBAR, CFG_CCSRBAR,
+               MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+               1, 0, BOOKE_PAGESZ_4K, 0);
+
+       /* set up CCSR if we want it moved */
+#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
+       {
+               u32 temp;
+
+               set_tlb(0, CFG_CCSRBAR_DEFAULT, CFG_CCSRBAR_DEFAULT,
+                       MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
+                       1, 1, BOOKE_PAGESZ_4K, 0);
+
+               temp = in_be32((volatile u32 *)CFG_CCSRBAR_DEFAULT);
+               out_be32((volatile u32 *)CFG_CCSRBAR_DEFAULT, CFG_CCSRBAR >> 12);
+
+               temp = in_be32((volatile u32 *)CFG_CCSRBAR);
+       }
+#endif
+
+       init_laws();
+       invalidate_tlb(0);
+       init_tlbs();
+}
+
 /*
  * Breathe some life into the CPU...
  *
@@ -134,13 +164,15 @@ void cpu_init_f (void)
        volatile ccsr_lbc_t *memctl = (void *)(CFG_MPC85xx_LBC_ADDR);
        extern void m8560_cpm_reset (void);
 
+       disable_tlb(14);
+       disable_tlb(15);
+
        /* Pointer is writable since we allocated a register for it */
        gd = (gd_t *) (CFG_INIT_RAM_ADDR + CFG_GBL_DATA_OFFSET);
 
        /* Clear initial global data */
        memset ((void *) gd, 0, sizeof (gd_t));
 
-
 #ifdef CONFIG_CPM2
        config_8560_ioports((ccsr_cpm_t *)CFG_MPC85xx_CPM_ADDR);
 #endif
@@ -222,11 +254,15 @@ void cpu_init_f (void)
 int cpu_init_r(void)
 {
 #ifdef CONFIG_CLEAR_LAW0
+#ifdef CONFIG_FSL_LAW
+       disable_law(0);
+#else
        volatile ccsr_local_ecm_t *ecm = (void *)(CFG_MPC85xx_ECM_ADDR);
 
        /* clear alternate boot location LAW (used for sdram, or ddr bank) */
        ecm->lawar0 = 0;
 #endif
+#endif
 
 #if defined(CONFIG_L2_CACHE)
        volatile ccsr_l2cache_t *l2cache = (void *)CFG_MPC85xx_L2_ADDR;
index adc9c4dd40ec356d241569a2e4ca00aebabb1690..abc63c414bd70a3f937906262b84718151bc65e6 100644 (file)
@@ -27,6 +27,7 @@
 #include <i2c.h>
 #include <spd.h>
 #include <asm/mmu.h>
+#include <asm/fsl_law.h>
 
 
 #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
@@ -1022,7 +1023,6 @@ spd_sdram(void)
 static unsigned int
 setup_laws_and_tlbs(unsigned int memsize)
 {
-       volatile ccsr_local_ecm_t *ecm = (void *)(CFG_MPC85xx_ECM_ADDR);
        unsigned int tlb_size;
        unsigned int law_size;
        unsigned int ram_tlb_index;
@@ -1071,19 +1071,9 @@ setup_laws_and_tlbs(unsigned int memsize)
        ram_tlb_address = (unsigned int)CFG_DDR_SDRAM_BASE;
        while (ram_tlb_address < (memsize * 1024 * 1024)
              && ram_tlb_index < 16) {
-               mtspr(MAS0, FSL_BOOKE_MAS0(1, ram_tlb_index, 0));
-               mtspr(MAS1, FSL_BOOKE_MAS1(1, 1, 0, 0, tlb_size));
-               mtspr(MAS2, FSL_BOOKE_MAS2(ram_tlb_address, 0));
-               mtspr(MAS3, FSL_BOOKE_MAS3(ram_tlb_address, 0,
-                       (MAS3_SX|MAS3_SW|MAS3_SR)));
-               asm volatile("isync;msync;tlbwe;isync");
-
-               debug("DDR: MAS0=0x%08x\n", FSL_BOOKE_MAS0(1, ram_tlb_index, 0));
-               debug("DDR: MAS1=0x%08x\n", FSL_BOOKE_MAS1(1, 1, 0, 0, tlb_size));
-               debug("DDR: MAS2=0x%08x\n", FSL_BOOKE_MAS2(ram_tlb_address, 0));
-               debug("DDR: MAS3=0x%08x\n",
-                       FSL_BOOKE_MAS3(ram_tlb_address, 0,
-                                     (MAS3_SX|MAS3_SW|MAS3_SR)));
+               set_tlb(1, ram_tlb_address, ram_tlb_address,
+                       MAS3_SX|MAS3_SW|MAS3_SR, 0,
+                       0, ram_tlb_index, tlb_size, 1);
 
                ram_tlb_address += (0x1000 << ((tlb_size - 1) * 2));
                ram_tlb_index++;
@@ -1098,12 +1088,10 @@ setup_laws_and_tlbs(unsigned int memsize)
        /*
         * Set up LAWBAR for all of DDR.
         */
-       ecm->lawbar1 = ((CFG_DDR_SDRAM_BASE >> 12) & 0xfffff);
-       ecm->lawar1 = (LAWAR_EN
-                      | LAWAR_TRGT_IF_DDR
-                      | (LAWAR_SIZE & law_size));
-       debug("DDR: LAWBAR1=0x%08x\n", ecm->lawbar1);
-       debug("DDR: LARAR1=0x%08x\n", ecm->lawar1);
+
+#ifdef CONFIG_FSL_LAW
+       set_law(1, CFG_DDR_SDRAM_BASE, law_size, LAW_TRGT_IF_DDR);
+#endif
 
        /*
         * Confirm that the requested amount of memory was mapped.
index b489d2ff0ca2b33cefbd461995740f8952f096b0..e8e5eb297de7cf97aacac084b5bcf091b1015e01 100644 (file)
@@ -143,84 +143,8 @@ _start_e500:
        li      r1,0x0f00
        mtspr   IVOR15,r1       /* 15: Debug */
 
-
-       /*
-        * After reset, CCSRBAR is located at CFG_CCSRBAR_DEFAULT, i.e.
-        * 0xff700000-0xff800000. We need add a TLB1 entry for this 1MB
-        * region before we can access any CCSR registers such as L2
-        * registers, Local Access Registers,etc. We will also re-allocate
-        * CFG_CCSRBAR_DEFAULT to CFG_CCSRBAR immediately after TLB1 setup.
-        *
-        * Please refer to board-specif directory for TLB1 entry configuration.
-        * (e.g. board/<yourboard>/init.S)
-        *
-        */
-       bl      tlb1_entry
-       mr      r5,r0
-       lwzu    r4,0(r5)        /* how many TLB1 entries we actually use */
-       mtctr   r4
-
-0:     lwzu    r6,4(r5)
-       lwzu    r7,4(r5)
-       lwzu    r8,4(r5)
-       lwzu    r9,4(r5)
-       mtspr   MAS0,r6
-       mtspr   MAS1,r7
-       mtspr   MAS2,r8
-       mtspr   MAS3,r9
-       isync
-       msync
-       tlbwe
-       isync
-       bdnz    0b
-
-1:
-#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
-       /* Special sequence needed to update CCSRBAR itself */
-       lis     r4,CFG_CCSRBAR_DEFAULT@h
-       ori     r4,r4,CFG_CCSRBAR_DEFAULT@l
-
-       lis     r5,CFG_CCSRBAR@h
-       ori     r5,r5,CFG_CCSRBAR@l
-       srwi    r6,r5,12
-       stw     r6,0(r4)
-       isync
-
-       lis     r5,0xffff
-       ori     r5,r5,0xf000
-       lwz     r5,0(r5)
-       isync
-
-       lis     r3,CFG_CCSRBAR@h
-       lwz     r5,CFG_CCSRBAR@l(r3)
-       isync
-#endif
-
-
-       /* set up local access windows, defined at board/<boardname>/init.S */
-       lis     r7,CFG_CCSRBAR@h
-       ori     r7,r7,CFG_CCSRBAR@l
-
-       bl      law_entry
-       mr      r6,r0
-       lwzu    r5,0(r6)        /* how many windows we actually use */
-       mtctr   r5
-
-       li      r2,0x0c28       /* the first pair is reserved for */
-       li      r1,0x0c30       /* boot-over-rio-or-pci */
-
-0:     lwzu    r4,4(r6)
-       lwzu    r3,4(r6)
-       stwx    r4,r7,r2
-       stwx    r3,r7,r1
-       addi    r2,r2,0x0020
-       addi    r1,r1,0x0020
-       bdnz    0b
-
        /* Clear and set up some registers. */
-       li      r0,0
-       mtmsr   r0
-       li      r0,0x0000
+       li      r0,0x0000
        lis     r1,0xffff
        mtspr   DEC,r0                  /* prevent dec exceptions */
        mttbl   r0                      /* prevent fit & wdt exceptions */
@@ -230,18 +154,13 @@ _start_e500:
        mtspr   ESR,r0                  /* clear exception syndrome register */
        mtspr   MCSR,r0                 /* machine check syndrome register */
        mtxer   r0                      /* clear integer exception register */
-       lis     r1,0x0002               /* set CE bit (Critical Exceptions) */
-       ori     r1,r1,0x1200            /* set ME/DE bit */
-       mtmsr   r1                      /* change MSR */
-       isync
 
        /* Enable Time Base and Select Time Base Clock */
        lis     r0,HID0_EMCP@h          /* Enable machine check */
 #if defined(CONFIG_ENABLE_36BIT_PHYS)
-       ori     r0,r0,(HID0_TBEN|HID0_ENMAS7)@l /* Enable Timebase & MAS7 */
-#else
-       ori     r0,r0,HID0_TBEN@l       /* enable Timebase */
+       ori     r0,r0,HID0_ENMAS7@l     /* Enable MAS7 */
 #endif
+       ori     r0,r0,HID0_TBEN@l       /* Enable Timebase */
        mtspr   HID0,r0
 
        li      r0,(HID1_ASTME|HID1_ABE)@l      /* Addr streaming & broadcast */
@@ -262,6 +181,58 @@ _start_e500:
        mtspr   DBCR0,r0
 #endif
 
+       /* create a temp mapping in AS=1 to the boot window */
+       lis     r6,FSL_BOOKE_MAS0(1, 15, 0)@h
+       ori     r6,r6,FSL_BOOKE_MAS0(1, 15, 0)@l
+
+       lis     r7,FSL_BOOKE_MAS1(1, 1, 0, 1, BOOKE_PAGESZ_16M)@h
+       ori     r7,r7,FSL_BOOKE_MAS1(1, 1, 0, 1, BOOKE_PAGESZ_16M)@l
+
+       lis     r8,FSL_BOOKE_MAS2(TEXT_BASE, (MAS2_I|MAS2_G))@h
+       ori     r8,r8,FSL_BOOKE_MAS2(TEXT_BASE, (MAS2_I|MAS2_G))@l
+
+       lis     r9,FSL_BOOKE_MAS3(0xff800000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@h
+       ori     r9,r9,FSL_BOOKE_MAS3(0xff800000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@l
+
+       mtspr   MAS0,r6
+       mtspr   MAS1,r7
+       mtspr   MAS2,r8
+       mtspr   MAS3,r9
+       isync
+       msync
+       tlbwe
+
+       /* create a temp mapping in AS=1 to the stack */
+       lis     r6,FSL_BOOKE_MAS0(1, 14, 0)@h
+       ori     r6,r6,FSL_BOOKE_MAS0(1, 14, 0)@l
+
+       lis     r7,FSL_BOOKE_MAS1(1, 1, 0, 1, BOOKE_PAGESZ_16K)@h
+       ori     r7,r7,FSL_BOOKE_MAS1(1, 1, 0, 1, BOOKE_PAGESZ_16K)@l
+
+       lis     r8,FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)@h
+       ori     r8,r8,FSL_BOOKE_MAS2(CFG_INIT_RAM_ADDR, 0)@l
+
+       lis     r9,FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@h
+       ori     r9,r9,FSL_BOOKE_MAS3(CFG_INIT_RAM_ADDR, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@l
+
+       mtspr   MAS0,r6
+       mtspr   MAS1,r7
+       mtspr   MAS2,r8
+       mtspr   MAS3,r9
+       isync
+       msync
+       tlbwe
+
+       lis     r6,MSR_CE|MSR_ME|MSR_DE|MSR_IS|MSR_DS@h
+       ori     r6,r6,MSR_CE|MSR_ME|MSR_DE|MSR_IS|MSR_DS@l
+       lis     r7,switch_as@h
+       ori     r7,r7,switch_as@l
+
+       mtspr   SPRN_SRR0,r7
+       mtspr   SPRN_SRR1,r6
+       rfi
+
+switch_as:
 /* L1 DCache is used for initial RAM */
 
        /* Allocate Initial RAM in data cache.
@@ -321,6 +292,14 @@ _start_cont:
        stw     r0,+12(r1)              /* Save return addr (underflow vect) */
 
        GET_GOT
+       bl      cpu_init_early_f
+
+       /* switch back to AS = 0 */
+       lis     r3,(MSR_CE|MSR_ME|MSR_DE)@h
+       ori     r3,r3,(MSR_CE|MSR_ME|MSR_DE)@l
+       mtmsr   r3
+       isync
+
        bl      cpu_init_f
        bl      board_init_f
        isync
diff --git a/cpu/mpc85xx/tlb.c b/cpu/mpc85xx/tlb.c
new file mode 100644 (file)
index 0000000..b2c799a
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/processor.h>
+#include <asm/mmu.h>
+
+void set_tlb(u8 tlb, u32 epn, u64 rpn,
+            u8 perms, u8 wimge,
+            u8 ts, u8 esel, u8 tsize, u8 iprot)
+{
+       u32 _mas0, _mas1, _mas2, _mas3, _mas7;
+
+       _mas0 = FSL_BOOKE_MAS0(tlb, esel, 0);
+       _mas1 = FSL_BOOKE_MAS1(1, iprot, 0, ts, tsize);
+       _mas2 = FSL_BOOKE_MAS2(epn, wimge);
+       _mas3 = FSL_BOOKE_MAS3(rpn, 0, perms);
+       _mas7 = rpn >> 32;
+
+       mtspr(MAS0, _mas0);
+       mtspr(MAS1, _mas1);
+       mtspr(MAS2, _mas2);
+       mtspr(MAS3, _mas3);
+#ifdef CONFIG_ENABLE_36BIT_PHYS
+       mtspr(MAS7, _mas7);
+#endif
+       asm volatile("isync;msync;tlbwe;isync");
+}
+
+void disable_tlb(u8 esel)
+{
+       u32 _mas0, _mas1, _mas2, _mas3, _mas7;
+
+       _mas0 = FSL_BOOKE_MAS0(1, esel, 0);
+       _mas1 = 0;
+       _mas2 = 0;
+       _mas3 = 0;
+       _mas7 = 0;
+
+       mtspr(MAS0, _mas0);
+       mtspr(MAS1, _mas1);
+       mtspr(MAS2, _mas2);
+       mtspr(MAS3, _mas3);
+#ifdef CONFIG_ENABLE_36BIT_PHYS
+       mtspr(MAS7, _mas7);
+#endif
+       asm volatile("isync;msync;tlbwe;isync");
+}
+
+void invalidate_tlb(u8 tlb)
+{
+       if (tlb == 0)
+               mtspr(MMUCSR0, 0x4);
+       if (tlb == 1)
+               mtspr(MMUCSR0, 0x2);
+}
+
+void init_tlbs(void)
+{
+       int i;
+
+       for (i = 0; i < num_tlb_entries; i++) {
+               set_tlb(tlb_table[i].tlb, tlb_table[i].epn, tlb_table[i].rpn,
+                       tlb_table[i].perms, tlb_table[i].wimge,
+                       tlb_table[i].ts, tlb_table[i].esel, tlb_table[i].tsize,
+                       tlb_table[i].iprot);
+       }
+
+       return ;
+}
+
index 3ac2cdcf7f469f7126309f4105c6fc3b88adf776..3bafea3a95834b37e6a83e4f103c0f93b831cccb 100644 (file)
@@ -387,9 +387,9 @@ long int initdram(int board_type)
        unsigned char spd1[MAX_SPD_BYTES];
        unsigned char *dimm_spd[MAXDIMMS];
        unsigned long dimm_populated[MAXDIMMS];
-       unsigned long num_dimm_banks;               /* on board dimm banks */
+       unsigned long num_dimm_banks;           /* on board dimm banks */
        unsigned long val;
-       ddr_cas_id_t  selected_cas;
+       ddr_cas_id_t selected_cas = DDR_CAS_5;  /* preset to silence compiler */
        int write_recovery;
        unsigned long dram_size = 0;
 
diff --git a/doc/README.m52277evb b/doc/README.m52277evb
new file mode 100644 (file)
index 0000000..de1daba
--- /dev/null
@@ -0,0 +1,237 @@
+Freescale MCF52277EVB ColdFire Development Board
+================================================
+
+TsiChung Liew(Tsi-Chung.Liew@freescale.com)
+Created Jan 8, 2008
+===========================================
+
+
+Changed files:
+==============
+
+- board/freescale/m52277evb/m52277evb.c        Dram setup
+- board/freescale/m52277evb/Makefile   Makefile
+- board/freescale/m52277evb/config.mk  config make
+- board/freescale/m52277evb/u-boot.lds Linker description
+
+- cpu/mcf5227x/cpu.c           cpu specific code
+- cpu/mcf5227x/cpu_init.c      FBCS, Mux pins, icache and RTC extra regs
+- cpu/mcf5227x/interrupts.c    cpu specific interrupt support
+- cpu/mcf5227x/speed.c         system, flexbus, and cpu clock
+- cpu/mcf5227x/Makefile                Makefile
+- cpu/mcf5227x/config.mk       config make
+- cpu/mcf5227x/start.S         start up assembly code
+
+- doc/README.m52277evb         This readme file
+
+- drivers/serial/mcfuart.c     ColdFire common UART driver
+- drivers/rtc/mcfrtc.c         Realtime clock Driver
+
+- include/asm-m68k/bitops.h            Bit operation function export
+- include/asm-m68k/byteorder.h         Byte order functions
+- include/asm-m68k/crossbar.h          CrossBar structure and definition
+- include/asm-m68k/dspi.h              DSPI structure and definition
+- include/asm-m68k/edma.h              eDMA structure and definition
+- include/asm-m68k/flexbus.h           FlexBus structure and definition
+- include/asm-m68k/fsl_i2c.h           I2C structure and definition
+- include/asm-m68k/global_data.h       Global data structure
+- include/asm-m68k/immap.h             ColdFire specific header file and driver macros
+- include/asm-m68k/immap_5227x.h       mcf5227x specific header file
+- include/asm-m68k/io.h                        io functions
+- include/asm-m68k/lcd.h               LCD structure and definition
+- include/asm-m68k/m5227x.h            mcf5227x specific header file
+- include/asm-m68k/posix_types.h       Posix
+- include/asm-m68k/processor.h         header file
+- include/asm-m68k/ptrace.h            Exception structure
+- include/asm-m68k/rtc.h               Realtime clock header file
+- include/asm-m68k/ssi.h               SSI structure and definition
+- include/asm-m68k/string.h            String function export
+- include/asm-m68k/timer.h             Timer structure and definition
+- include/asm-m68k/types.h             Data types definition
+- include/asm-m68k/uart.h              Uart structure and definition
+- include/asm-m68k/u-boot.h            u-boot structure
+
+- include/configs/M52277EVB.h          Board specific configuration file
+
+- lib_m68k/board.c                     board init function
+- lib_m68k/cache.c
+- lib_m68k/interrupts                  Coldfire common interrupt functions
+- lib_m68k/m68k_linux.c
+- lib_m68k/time.c                      Timer functions (Dma timer and PIT)
+- lib_m68k/traps.c                     Exception init code
+
+1 MCF52277 specific Options/Settings
+====================================
+1.1 pre-loader is no longer suppoer in this coldfire family
+
+1.2 Configuration settings for M52277EVB Development Board
+CONFIG_MCF5227x                -- define for all MCF5227x CPUs
+CONFIG_M52277          -- define for all Freescale MCF52277 CPUs
+CONFIG_M52277EVB       -- define for M52277EVB board
+
+CONFIG_MCFUART         -- define to use common CF Uart driver
+CFG_UART_PORT          -- define UART port number, start with 0, 1 and 2
+CONFIG_BAUDRATE                -- define UART baudrate
+
+CONFIG_MCFRTC          -- define to use common CF RTC driver
+CFG_MCFRTC_BASE                -- provide base address for RTC in immap.h
+CFG_RTC_OSCILLATOR     -- define RTC clock frequency
+RTC_DEBUG              -- define to show RTC debug message
+CONFIG_CMD_DATE                -- enable to use date feature in u-boot
+
+CONFIG_MCFTMR          -- define to use DMA timer
+CONFIG_MCFPIT          -- define to use PIT timer
+
+CONFIG_FSL_I2C         -- define to use FSL common I2C driver
+CONFIG_HARD_I2C                -- define for I2C hardware support
+CONFIG_SOFT_I2C                -- define for I2C bit-banged
+CFG_I2C_SPEED          -- define for I2C speed
+CFG_I2C_SLAVE          -- define for I2C slave address
+CFG_I2C_OFFSET         -- define for I2C base address offset
+CFG_IMMR               -- define for MBAR offset
+
+CFG_MBAR               -- define MBAR offset
+
+CONFIG_MONITOR_IS_IN_RAM -- Not support
+
+CFG_INIT_RAM_ADDR      -- defines the base address of the MCF52277 internal SRAM
+
+CFG_CSn_BASE   -- defines the Chip Select Base register
+CFG_CSn_MASK   -- defines the Chip Select Mask register
+CFG_CSn_CTRL   -- defines the Chip Select Control register
+
+CFG_SDRAM_BASE -- defines the DRAM Base
+
+CONFIG_LCD and CONFIG_CMD_USB are not supported in this current u-boot,
+update will be provided at later time
+
+2. MEMORY MAP UNDER U-BOOT AND LINUX KERNEL
+===========================================
+2.1. System memory map:
+       Flash:          0x00000000-0x3FFFFFFF (1024MB)
+       DDR:            0x40000000-0x7FFFFFFF (1024MB)
+       SRAM:           0x80000000-0x8FFFFFFF (256MB)
+       IP:             0xF0000000-0xFFFFFFFF (256MB)
+
+2.2. For the initial bringup, we adopted a consistent memory scheme between u-boot and
+       linux kernel, you can customize it based on your system requirements:
+       Flash0:         0x00000000-0x00FFFFFF (16MB)
+
+       DDR:            0x40000000-0x4FFFFFFF (64MB)
+       SRAM:           0x80000000-0x80007FFF (32KB)
+       IP:             0xFC000000-0xFC0FFFFF (64KB)
+
+3. COMPILATION
+==============
+3.1    To create U-Boot the gcc-4.1-xx compiler set (ColdFire ELF or
+uClinux version) from codesourcery.com was used. Download it from:
+http://www.codesourcery.com/gnu_toolchains/coldfire/download.html
+
+3.2 Compilation
+   export CROSS_COMPILE=cross-compile-prefix
+   cd u-boot-1.x.x
+   make distclean
+   make M52277EVB_config
+   make
+
+4. SCREEN DUMP
+==============
+4.1 M52277EVB Development board
+    (NOTE: May not show exactly the same)
+
+U-Boot 1.3.1 (Jan 8 2008 - 12:44:08)
+
+CPU:   Freescale MCF52277 (Mask:6c Version:0)
+       CPU CLK 160 Mhz BUS CLK 80 Mhz FLB CLK 80 MHZ
+       INP CLK 16 Mhz VCO CLK 480 Mhz
+Board: Freescale 52277 EVB
+I2C:   ready
+DRAM:  64 MB
+FLASH: 16 MB
+In:    serial
+Out:   serial
+Err:   serial
+-> print
+baudrate=115200
+hostname=M52277EVB
+inpclk=16000000
+loadaddr=(0x40000000 + 0x10000)
+load=tftp ${loadaddr) ${u-boot}
+upd=run load; run prog
+prog=prot off 0 3ffff;era 0 3ffff;cp.b ${loadaddr} 0 ${filesize};save
+u-boot=u-boot.bin
+stdin=serial
+stdout=serial
+stderr=serial
+mem=65024k
+
+Environment size: 280/32764 bytes
+-> bdinfo
+memstart    = 0x40000000
+memsize     = 0x04000000
+flashstart  = 0x00000000
+flashsize   = 0x01000000
+flashoffset = 0x00000000
+sramstart   = 0x80000000
+sramsize    = 0x00008000
+mbar        = 0xFC000000
+busfreq     =     80 MHz
+flbfreq     =     80 Mhz
+inpfreq     =     16 Mhz
+vcofreq     =    480 Mhz
+
+baudrate    = 115200 bps
+->
+-> help
+?       - alias for 'help'
+autoscr - run script from memory
+base    - print or set address offset
+bdinfo  - print Board Info structure
+boot    - boot default, i.e., run 'bootcmd'
+bootd   - boot default, i.e., run 'bootcmd'
+bootelf - Boot from an ELF image in memory
+bootm   - boot application image from memory
+bootp  - boot image via network using BootP/TFTP protocol
+bootvx  - Boot vxWorks from an ELF image
+cmp     - memory compare
+coninfo - print console devices and information
+cp      - memory copy
+crc32   - checksum calculation
+date    - get/set/reset date & time
+dcache  - enable or disable data cache
+echo    - echo args to console
+erase   - erase FLASH memory
+flinfo  - print FLASH memory information
+go      - start application at address 'addr'
+help    - print online help
+icache  - enable or disable instruction cache
+icrc32  - checksum calculation
+iloop   - infinite loop on address range
+imd     - i2c memory display
+iminfo  - print header information for application image
+imls    - list all images found in flash
+imm     - i2c memory modify (auto-incrementing)
+imw     - memory write (fill)
+inm     - memory modify (constant address)
+iprobe  - probe to discover valid I2C chip addresses
+itest  - return true/false on integer compare
+loadb   - load binary file over serial line (kermit mode)
+loads   - load S-Record file over serial line
+loady   - load binary file over serial line (ymodem mode)
+loop    - infinite loop on address range
+ls     - list files in a directory (default /)
+md      - memory display
+mm      - memory modify (auto-incrementing)
+mtest   - simple RAM test
+mw      - memory write (fill)
+nm      - memory modify (constant address)
+ping   - send ICMP ECHO_REQUEST to network host
+printenv- print environment variables
+protect - enable or disable FLASH write protection
+reset   - Perform RESET of the CPU
+run     - run commands in an environment variable
+saveenv - save environment variables to persistent storage
+setenv  - set environment variables
+sleep   - delay execution for some time
+version - print monitor version
+->
diff --git a/doc/README.m5373evb b/doc/README.m5373evb
new file mode 100644 (file)
index 0000000..4f33b7d
--- /dev/null
@@ -0,0 +1,333 @@
+Freescale MCF5373EVB ColdFire Development Board
+================================================
+
+TsiChung Liew(Tsi-Chung.Liew@freescale.com)
+Created 11/08/07
+===========================================
+
+
+Changed files:
+==============
+
+- board/freescale/m5373evb/m5373evb.c  Dram setup
+- board/freescale/m5373evb/mii.c       Mii access
+- board/freescale/m5373evb/Makefile    Makefile
+- board/freescale/m5373evb/config.mk   config make
+- board/freescale/m5373evb/u-boot.lds  Linker description
+
+- cpu/mcf532x/cpu.c            cpu specific code
+- cpu/mcf532x/cpu_init.c       FBCS, Mux pins, icache and RTC extra regs
+- cpu/mcf532x/interrupts.c     cpu specific interrupt support
+- cpu/mcf532x/speed.c          system, pci, flexbus, and cpu clock
+- cpu/mcf532x/Makefile         Makefile
+- cpu/mcf532x/config.mk                config make
+- cpu/mcf532x/start.S          start up assembly code
+
+- doc/README.m5373evb          This readme file
+
+- drivers/net/mcffec.c         ColdFire common FEC driver
+- drivers/serial/mcfuart.c     ColdFire common UART driver
+- drivers/rtc/mcfrtc.c         Realtime clock Driver
+
+- include/asm-m68k/bitops.h            Bit operation function export
+- include/asm-m68k/byteorder.h         Byte order functions
+- include/asm-m68k/fec.h               FEC structure and definition
+- include/asm-m68k/fsl_i2c.h           I2C structure and definition
+- include/asm-m68k/global_data.h       Global data structure
+- include/asm-m68k/immap.h             ColdFire specific header file and driver macros
+- include/asm-m68k/immap_532x.h                mcf532x specific header file
+- include/asm-m68k/io.h                        io functions
+- include/asm-m68k/m532x.h             mcf532x specific header file
+- include/asm-m68k/posix_types.h       Posix
+- include/asm-m68k/processor.h         header file
+- include/asm-m68k/ptrace.h            Exception structure
+- include/asm-m68k/rtc.h               Realtime clock header file
+- include/asm-m68k/string.h            String function export
+- include/asm-m68k/timer.h             Timer structure and definition
+- include/asm-m68k/types.h             Data types definition
+- include/asm-m68k/uart.h              Uart structure and definition
+- include/asm-m68k/u-boot.h            u-boot structure
+
+- include/configs/M5373EVB.h           Board specific configuration file
+
+- lib_m68k/board.c                     board init function
+- lib_m68k/cache.c
+- lib_m68k/interrupts                  Coldfire common interrupt functions
+- lib_m68k/m68k_linux.c
+- lib_m68k/time.c                      Timer functions (Dma timer and PIT)
+- lib_m68k/traps.c                     Exception init code
+
+1 MCF5373 specific Options/Settings
+====================================
+1.1 pre-loader is no longer suppoer in thie coldfire family
+
+1.2 Configuration settings for M5373EVB Development Board
+CONFIG_MCF532x         -- define for all MCF532x CPUs
+CONFIG_M5373           -- define for all Freescale MCF5373 CPUs
+CONFIG_M5373EVB                -- define for M5373EVB board
+
+CONFIG_MCFUART         -- define to use common CF Uart driver
+CFG_UART_PORT          -- define UART port number, start with 0, 1 and 2
+CONFIG_BAUDRATE                -- define UART baudrate
+
+CONFIG_MCFRTC          -- define to use common CF RTC driver
+CFG_MCFRTC_BASE                -- provide base address for RTC in immap.h
+CFG_RTC_OSCILLATOR     -- define RTC clock frequency
+RTC_DEBUG              -- define to show RTC debug message
+CONFIG_CMD_DATE                -- enable to use date feature in u-boot
+
+CONFIG_MCFFEC          -- define to use common CF FEC driver
+CONFIG_NET_MULTI       -- define to use multi FEC in u-boot
+CONFIG_MII             -- enable to use MII driver
+CONFIG_CF_DOMII                -- enable to use MII feature in cmd_mii.c
+CFG_DISCOVER_PHY       -- enable PHY discovery
+CFG_RX_ETH_BUFFER      -- Set FEC Receive buffer
+CFG_FAULT_ECHO_LINK_DOWN--
+CFG_FEC0_PINMUX                -- Set FEC0 Pin configuration
+CFG_FEC0_MIIBASE       -- Set FEC0 MII base register
+MCFFEC_TOUT_LOOP       -- set FEC timeout loop
+
+CONFIG_MCFTMR          -- define to use DMA timer
+CONFIG_MCFPIT          -- define to use PIT timer
+
+CONFIG_FSL_I2C         -- define to use FSL common I2C driver
+CONFIG_HARD_I2C                -- define for I2C hardware support
+CONFIG_SOFT_I2C                -- define for I2C bit-banged
+CFG_I2C_SPEED          -- define for I2C speed
+CFG_I2C_SLAVE          -- define for I2C slave address
+CFG_I2C_OFFSET         -- define for I2C base address offset
+CFG_IMMR               -- define for MBAR offset
+
+CFG_MBAR               -- define MBAR offset
+
+CONFIG_MONITOR_IS_IN_RAM -- Not support
+
+CFG_INIT_RAM_ADDR      -- defines the base address of the MCF5373 internal SRAM
+
+CFG_CSn_BASE   -- defines the Chip Select Base register
+CFG_CSn_MASK   -- defines the Chip Select Mask register
+CFG_CSn_CTRL   -- defines the Chip Select Control register
+
+CFG_SDRAM_BASE -- defines the DRAM Base
+
+2. MEMORY MAP UNDER U-BOOT AND LINUX KERNEL
+===========================================
+2.1. System memory map:
+       Flash:          0x00000000-0x3FFFFFFF (1024MB)
+       DDR:            0x40000000-0x7FFFFFFF (1024MB)
+       SRAM:           0x80000000-0x8FFFFFFF (256MB)
+       IP:             0xF0000000-0xFFFFFFFF (256MB)
+
+2.2. For the initial bringup, we adopted a consistent memory scheme between u-boot and
+       linux kernel, you can customize it based on your system requirements:
+       Flash0:         0x00000000-0x00FFFFFF (16MB)
+
+       DDR:            0x40000000-0x4FFFFFFF (256MB)
+       SRAM:           0x80000000-0x80007FFF (32KB)
+       IP:             0xFC000000-0xFC0FFFFF (64KB)
+
+3. COMPILATION
+==============
+3.1    To create U-Boot the gcc-4.1-xx compiler set (ColdFire ELF or
+uClinux version) from codesourcery.com was used. Download it from:
+http://www.codesourcery.com/gnu_toolchains/coldfire/download.html
+
+3.2 Compilation
+   export CROSS_COMPILE=cross-compile-prefix
+   cd u-boot-1.x.x
+   make distclean
+   make M5373EVB_config
+   make
+
+4. SCREEN DUMP
+==============
+4.1 M5373EVB Development board
+    (NOTE: May not show exactly the same)
+
+U-Boot 1.3.0 (Nov 8 2007 - 12:44:08)
+
+CPU:   Freescale MCF5373 (Mask:65 Version:1)
+       CPU CLK 240 Mhz BUS CLK 80 Mhz
+Board: Freescale FireEngine 5373 EVB
+I2C:   ready
+DRAM:  32 MB
+FLASH: 2 MB
+In:    serial
+Out:   serial
+Err:   serial
+NAND:  16 MiB
+Net:   FEC0
+-> print
+bootdelay=1
+baudrate=115200
+ethaddr=00:e0:0c:bc:e5:60
+hostname=M5373EVB
+netdev=eth0
+loadaddr=40010000
+load=tftp ${loadaddr) ${u-boot}
+upd=run load; run prog
+prog=prot off 0 2ffff;era 0 2ffff;cp.b ${loadaddr} 0 ${filesize};save
+ethact=FEC0
+u-boot=u-boot.bin
+gatewayip=192.168.1.1
+netmask=255.255.255.0
+ipaddr=192.168.1.3
+serverip=192.168.1.2
+stdin=serial
+stdout=serial
+stderr=serial
+mem=261632k
+
+Environment size: 401/8188 bytes
+-> bdinfo
+memstart    = 0x40000000
+memsize     = 0x02000000
+flashstart  = 0x00000000
+flashsize   = 0x00200000
+flashoffset = 0x00000000
+sramstart   = 0x80000000
+sramsize    = 0x00008000
+mbar        = 0xFC000000
+busfreq     =     80 MHz
+ethaddr     = 00:E0:0C:BC:E5:60
+ip_addr     = 192.168.1.3
+baudrate    = 115200 bps
+->
+-> help
+?       - alias for 'help'
+autoscr - run script from memory
+base    - print or set address offset
+bdinfo  - print Board Info structure
+boot    - boot default, i.e., run 'bootcmd'
+bootd   - boot default, i.e., run 'bootcmd'
+bootelf - Boot from an ELF image in memory
+bootm   - boot application image from memory
+bootp  - boot image via network using BootP/TFTP protocol
+bootvx  - Boot vxWorks from an ELF image
+cmp     - memory compare
+coninfo - print console devices and information
+cp      - memory copy
+crc32   - checksum calculation
+date    - get/set/reset date & time
+dcache  - enable or disable data cache
+echo    - echo args to console
+erase   - erase FLASH memory
+flinfo  - print FLASH memory information
+go      - start application at address 'addr'
+help    - print online help
+icache  - enable or disable instruction cache
+icrc32  - checksum calculation
+iloop   - infinite loop on address range
+imd     - i2c memory display
+iminfo  - print header information for application image
+imls    - list all images found in flash
+imm     - i2c memory modify (auto-incrementing)
+imw     - memory write (fill)
+inm     - memory modify (constant address)
+iprobe  - probe to discover valid I2C chip addresses
+itest  - return true/false on integer compare
+loadb   - load binary file over serial line (kermit mode)
+loads   - load S-Record file over serial line
+loady   - load binary file over serial line (ymodem mode)
+loop    - infinite loop on address range
+ls     - list files in a directory (default /)
+md      - memory display
+mii     - MII utility commands
+mm      - memory modify (auto-incrementing)
+mtest   - simple RAM test
+mw      - memory write (fill)
+nand   - NAND sub-system
+nboot  - boot from NAND device
+nfs    - boot image via network using NFS protocol
+nm      - memory modify (constant address)
+ping   - send ICMP ECHO_REQUEST to network host
+printenv- print environment variables
+protect - enable or disable FLASH write protection
+rarpboot- boot image via network using RARP/TFTP protocol
+reset   - Perform RESET of the CPU
+run     - run commands in an environment variable
+saveenv - save environment variables to persistent storage
+setenv  - set environment variables
+sleep   - delay execution for some time
+tftpboot- boot image via network using TFTP protocol
+version - print monitor version
+-> tftp 0x40800000 uImage
+Using FEC0 device
+TFTP from server 192.168.1.3; our IP address is 192.168.1.3 Filename 'uImage'.
+Load address: 0x40800000
+Loading: #################################################################
+          #################################################################
+          ##########
+done
+Bytes transferred = 2053270 (1f5496 hex)
+-> bootm 0x40800000
+## Booting image at 40800000 ...
+    Image Name:   Linux Kernel Image
+    Created:      2007-11-07  20:33:08 UTC
+    Image Type:   M68K Linux Kernel Image (gzip compressed)
+    Data Size:    2053206 Bytes =  2 MB
+    Load Address: 40020000
+    Entry Point:  40020000
+    Verifying Checksum ... OK
+    Uncompressing Kernel Image ... OK
+Linux version 2.6.22-uc1 (mattw@loa) (gcc version 4.2.1 (Sourcery G++ Lite 4.2-7
+
+
+uClinux/COLDFIRE(m537x)
+COLDFIRE port done by Greg Ungerer, gerg@snapgear.com Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne Built 1 zonelists.  Total pages: 8128 Kernel command line: rootfstype=romfs PID hash table entries: 128 (order: 7, 512 bytes) Dentry cache hash table entries: 4096 (order: 2, 16384 bytes) Inode-cache hash table entries: 2048 (order: 1, 8192 bytes) Memory available: 28092k/32768k RAM, (1788k kernel code, 244k data) Mount-cache hash table entries: 512
+NET: Registered protocol family 16
+USB-MCF537x: (HOST module) EHCI device is registered
+USB-MCF537x: (OTG module) EHCI device is registered
+USB-MCF537x: (OTG module) UDC device is registered
+usbcore: registered new interface driver usbfs
+usbcore: registered new interface driver hub
+usbcore: registered new device driver usb
+NET: Registered protocol family 2
+IP route cache hash table entries: 1024 (order: 0, 4096 bytes) TCP established hash table entries: 1024 (order: 1, 8192 bytes) TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
+TCP: Hash tables configured (established 1024 bind 1024) TCP reno registered
+JFFS2 version 2.2. (NAND) Â© 2001-2006 Red Hat, Inc.
+io scheduler noop registered
+io scheduler cfq registered (default)
+ColdFire internal UART serial driver version 1.00 ttyS0 at 0xfc060000 (irq = 90) is a builtin ColdFire UART
+ttyS1 at 0xfc064000 (irq = 91) is a builtin ColdFire UART
+ttyS2 at 0xfc068000 (irq = 92) is a builtin ColdFire UART RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
+loop: module loaded
+nbd: registered device at major 43
+usbcore: registered new interface driver ub FEC ENET Version 0.2
+fec: PHY @ 0x1, ID 0x20005c90 -- DP83848
+eth0: ethernet 00:e0:0c:bc:e5:60
+uclinux[mtd]: RAM probe address=0x4021c22c size=0x22b000 Creating 1 MTD partitions on "RAM":
+0x00000000-0x0022b000 : "ROMfs"
+uclinux[mtd]: set ROMfs to be root filesystem NAND device: Manufacturer ID: 0x20, Chip ID: 0x73 (ST Micro NAND 16MiB 3,3V 8-b) Scanning device for bad blocks Creating 1 MTD partitions on "NAND 16MiB 3,3V 8-bit":
+0x00000000-0x01000000 : "M53xx flash partition 1"
+QSPI: spi->max_speed_hz 300000
+QSPI: Baud set to 255
+SPI: Coldfire master initialized
+M537x - Disable UART1 when using Audio
+udc: Freescale MCF53xx UDC driver version 27 October 2006 init
+udc: MCF53xx USB Device is found. ID=0x5 Rev=0x41 i2c /dev entries driver
+usbcore: registered new interface driver usbhid
+drivers/hid/usbhid/hid-core.c: v2.6:USB HID core driver TCP cubic registered
+NET: Registered protocol family 1
+NET: Registered protocol family 17
+VFS: Mounted root (romfs filesystem) readonly.
+Freeing unused kernel memory: 64k freed (0x401f5000 - 0x40204000) init started:  BusyBox v1.00 (2007.11.07-19:57+0000) multi-call binary?Setting e Mounting filesystems
+mount: Mounting devpts on /dev/pts failed: No such device
+mount: Mounting usbfs on /proc/bus/usb failed: No such file or directory Starting syslogd and klogd Setting up networking on loopback device:
+Setting up networking on eth0:
+info, udhcpc (v0.9.9-pre) started
+eth0: config: auto-negotiation on, 100FDX, 100HDX, 10FDX, 10HDX.
+debug, Sending discover...
+debug, Sending discover...
+debug, Sending select for 172.27.0.130...
+info, Lease of 172.27.0.130 obtained, lease time 43200 deleting routers
+route: SIOC[ADD|DEL]RT: No such process
+adding dns 172.27.0.1
+Starting the boa webserver:
+Setting time from ntp server: ntp.cs.strath.ac.uk
+ntp.cs.strath.ac.uk: Unknown host
+
+
+BusyBox v1.00 (2007.11.07-19:57+0000) Built-in shell (msh) Enter 'help' for a list of built-in commands.
+
+#
diff --git a/doc/README.m5475evb b/doc/README.m5475evb
new file mode 100644 (file)
index 0000000..cec4fd0
--- /dev/null
@@ -0,0 +1,279 @@
+Freescale MCF5475EVB ColdFire Development Board
+================================================
+
+TsiChung Liew(Tsi-Chung.Liew@freescale.com)
+Created Jan 08, 2008
+===========================================
+
+
+Changed files:
+==============
+
+- board/freescale/m547xevb/m547xevb.c  Dram setup, IDE pre init, and PCI init
+- board/freescale/m547xevb/mii.c       MII init
+- board/freescale/m547xevb/Makefile    Makefile
+- board/freescale/m547xevb/config.mk   config make
+- board/freescale/m547xevb/u-boot.lds  Linker description
+
+- cpu/mcf547x_8x/cpu.c                 cpu specific code
+- cpu/mcf547x_8x/cpu_init.c            Flexbus ChipSelect, Mux pins setup, icache and RTC extra regs
+- cpu/mcf547x_8x/interrupts.c          cpu specific interrupt support
+- cpu/mcf547x_8x/slicetimer.c          Timer support
+- cpu/mcf547x_8x/speed.c               system, pci, flexbus, and cpu clock
+- cpu/mcf547x_8x/Makefile              Makefile
+- cpu/mcf547x_8x/config.mk             config make
+- cpu/mcf547x_8x/start.S               start up assembly code
+
+- doc/README.m5475evb                  This readme file
+
+- drivers/dma/MCD_dmaApi.c             DMA API functions
+- drivers/dma/MCD_tasks.c              DMA Tasks
+- drivers/dma/MCD_tasksInit.c          DMA Tasks Init
+- drivers/net/fsl_mcdmafec.c           ColdFire common DMA FEC driver
+- drivers/serial/mcfuart.c             ColdFire common UART driver
+
+- include/MCD_dma.h                    DMA header file
+- include/MCD_progCheck.h              DMA header file
+- include/MCD_tasksInit.h              DMA header file
+- include/asm-m68k/bitops.h            Bit operation function export
+- include/asm-m68k/byteorder.h         Byte order functions
+- include/asm-m68k/errno.h             Error Number definition
+- include/asm-m68k/fec.h               FEC structure and definition
+- include/asm-m68k/fsl_i2c.h           I2C structure and definition
+- include/asm-m68k/fsl_mcddmafec.h     DMA FEC structure and definition
+- include/asm-m68k/global_data.h       Global data structure
+- include/asm-m68k/immap.h             ColdFire specific header file and driver macros
+- include/asm-m68k/immap_547x_8x.h     mcf547x_8x specific header file
+- include/asm-m68k/io.h                        io functions
+- include/asm-m68k/m547x_8x.h          mcf547x_8x specific header file
+- include/asm-m68k/posix_types.h       Posix
+- include/asm-m68k/processor.h         header file
+- include/asm-m68k/ptrace.h            Exception structure
+- include/asm-m68k/rtc.h               Realtime clock header file
+- include/asm-m68k/string.h            String function export
+- include/asm-m68k/timer.h             Timer structure and definition
+- include/asm-m68k/types.h             Data types definition
+- include/asm-m68k/uart.h              Uart structure and definition
+- include/asm-m68k/u-boot.h            u-boot structure
+
+- include/configs/M5475EVB.h           Board specific configuration file
+
+- lib_m68k/board.c                     board init function
+- lib_m68k/cache.c
+- lib_m68k/interrupts                  Coldfire common interrupt functions
+- lib_m68k/m68k_linux.c
+- lib_m68k/traps.c                     Exception init code
+
+1 MCF547x specific Options/Settings
+====================================
+1.1 pre-loader is no longer suppoer in thie coldfire family
+
+1.2 Configuration settings for M5475EVB Development Board
+CONFIG_MCF547x_8x      -- define for all MCF547x_8x CPUs
+CONFIG_M547x           -- define for all Freescale MCF547x CPUs
+CONFIG_M5475           -- define for M5475EVB board
+
+CONFIG_MCFUART         -- define to use common CF Uart driver
+CFG_UART_PORT          -- define UART port number, start with 0, 1 and 2
+CONFIG_BAUDRATE                -- define UART baudrate
+
+CONFIG_FSLDMAFEC       -- define to use common dma FEC driver
+CONFIG_NET_MULTI       -- define to use multi FEC in u-boot
+CONFIG_MII             -- enable to use MII driver
+CONFIG_CF_DOMII                -- enable to use MII feature in cmd_mii.c
+CFG_DISCOVER_PHY       -- enable PHY discovery
+CFG_RX_ETH_BUFFER      -- Set FEC Receive buffer
+CFG_FAULT_ECHO_LINK_DOWN--
+CFG_FEC0_PINMUX                -- Set FEC0 Pin configuration
+CFG_FEC1_PINMUX                -- Set FEC1 Pin configuration
+CFG_FEC0_MIIBASE       -- Set FEC0 MII base register
+CFG_FEC1_MIIBASE       -- Set FEC0 MII base register
+MCFFEC_TOUT_LOOP       -- set FEC timeout loop
+CONFIG_HAS_ETH1                -- define to enable second FEC in u-boot
+
+CONFIG_CMD_USB         -- enable USB commands
+CONFIG_USB_OHCI_NEW    -- enable USB OHCI driver
+CONFIG_USB_STORAGE     -- enable USB Storage device
+CONFIG_DOS_PARTITION   -- enable DOS read/write
+
+CONFIG_SLTTMR          -- define to use SLT timer
+
+CONFIG_FSL_I2C         -- define to use FSL common I2C driver
+CONFIG_HARD_I2C                -- define for I2C hardware support
+CONFIG_SOFT_I2C                -- define for I2C bit-banged
+CFG_I2C_SPEED          -- define for I2C speed
+CFG_I2C_SLAVE          -- define for I2C slave address
+CFG_I2C_OFFSET         -- define for I2C base address offset
+CFG_IMMR               -- define for MBAR offset
+
+CONFIG_PCI              -- define for PCI support
+CONFIG_PCI_PNP          -- define for Plug n play support
+CONFIG_SKIPPCI_HOSTBRIDGE      -- SKIP PCI Host bridge
+CFG_PCI_MEM_BUS                -- PCI memory logical offset
+CFG_PCI_MEM_PHYS       -- PCI memory physical offset
+CFG_PCI_MEM_SIZE       -- PCI memory size
+CFG_PCI_IO_BUS         -- PCI IO logical offset
+CFG_PCI_IO_PHYS                -- PCI IO physical offset
+CFG_PCI_IO_SIZE                -- PCI IO size
+CFG_PCI_CFG_BUS                -- PCI Configuration logical offset
+CFG_PCI_CFG_PHYS       -- PCI Configuration physical offset
+CFG_PCI_CFG_SIZE       -- PCI Configuration size
+
+CFG_MBAR               -- define MBAR offset
+
+CONFIG_MONITOR_IS_IN_RAM -- Not support
+
+CFG_INIT_RAM_ADDR      -- defines the base address of the MCF547x internal SRAM
+
+CFG_CSn_BASE   -- defines the Chip Select Base register
+CFG_CSn_MASK   -- defines the Chip Select Mask register
+CFG_CSn_CTRL   -- defines the Chip Select Control register
+
+CFG_SDRAM_BASE -- defines the DRAM Base
+
+2. MEMORY MAP UNDER U-BOOT AND LINUX KERNEL
+===========================================
+2.1. System memory map:
+       Flash:          0xFF800000-0xFFFFFFFF (8MB)
+       DDR:            0x00000000-0x3FFFFFFF (1024MB)
+       SRAM:           0xF2000000-0xF2000FFF (4KB)
+       PCI:            0x70000000-0x8FFFFFFF (512MB)
+       IP:             0xF0000000-0xFFFFFFFF (256MB)
+
+3. COMPILATION
+==============
+3.1    To create U-Boot the gcc-4.x compiler set (ColdFire ELF or uclinux
+        version) from codesourcery.com was used. Download it from:
+       http://www.codesourcery.com/gnu_toolchains/coldfire/download.html
+
+3.2 Compilation
+   export CROSS_COMPILE=cross-compile-prefix
+   cd u-boot-1.x.x
+   make distclean
+   make M5475AFE_config, or    - boot 2MB, RAM 64MB
+   make M5475BFE_config, or    - boot 2MB, code 16MB, RAM 64MB
+   make M5475CFE_config, or    - boot 2MB, code 16MB, Video, USB, RAM 64MB
+   make M5475DFE_config, or    - boot 2MB, USB, RAM 64MB
+   make M5475EFE_config, or    - boot 2MB, Video, USB, RAM 64MB
+   make M5475FFE_config, or    - boot 2MB, code 32MB, Video, USB, RAM 128MB
+   make M5475GFE_config, or    - boot 2MB, RAM 64MB
+   make
+
+5. SCREEN DUMP
+==============
+5.1
+
+U-Boot 1.3.1 (Jan  8 2008 - 12:47:44)
+
+CPU:   Freescale MCF5475
+       CPU CLK 266 Mhz BUS CLK 133 Mhz
+Board: Freescale FireEngine 5475 EVB
+I2C:   ready
+DRAM:  64 MB
+FLASH: 18 MB
+In:    serial
+Out:   serial
+Err:   serial
+Net:   FEC0, FEC1
+-> pri
+bootdelay=1
+baudrate=115200
+ethaddr=00:e0:0c:bc:e5:60
+eth1addr=00:e0:0c:bc:e5:61
+ipaddr=192.162.1.2
+serverip=192.162.1.1
+gatewayip=192.162.1.1
+netmask=255.255.255.0
+hostname=M547xEVB
+netdev=eth0
+loadaddr=10000
+u-boot=u-boot.bin
+load=tftp ${loadaddr) ${u-boot}
+upd=run load; run prog
+prog=prot off bank 1;era ff800000 ff82ffff;cp.b ${loadaddr} ff800000 ${filesize};save
+stdin=serial
+stdout=serial
+stderr=serial
+ethact=FEC0
+mem=65024k
+
+Environment size: 433/8188 bytes
+-> bdin
+memstart    = 0x00000000
+memsize     = 0x04000000
+flashstart  = 0xFF800000
+flashsize   = 0x01200000
+flashoffset = 0x00000000
+sramstart   = 0xF2000000
+sramsize    = 0x00001000
+mbar        = 0xF0000000
+busfreq     = 133.333 MHz
+pcifreq     =      0 MHz
+ethaddr     = 00:E0:0C:BC:E5:60
+eth1addr    = 00:E0:0C:BC:E5:61
+ip_addr     = 192.162.1.2
+baudrate    = 115200 bps
+-> ?
+?       - alias for 'help'
+autoscr - run script from memory
+base    - print or set address offset
+bdinfo  - print Board Info structure
+boot    - boot default, i.e., run 'bootcmd'
+bootd   - boot default, i.e., run 'bootcmd'
+bootelf - Boot from an ELF image in memory
+bootm   - boot application image from memory
+bootp  - boot image via network using BootP/TFTP protocol
+bootvx  - Boot vxWorks from an ELF image
+cmp     - memory compare
+coninfo - print console devices and information
+cp      - memory copy
+crc32   - checksum calculation
+dcache  - enable or disable data cache
+echo    - echo args to console
+erase   - erase FLASH memory
+flinfo  - print FLASH memory information
+go      - start application at address 'addr'
+help    - print online help
+icache  - enable or disable instruction cache
+icrc32  - checksum calculation
+iloop   - infinite loop on address range
+imd     - i2c memory display
+iminfo  - print header information for application image
+imls    - list all images found in flash
+imm     - i2c memory modify (auto-incrementing)
+imw     - memory write (fill)
+inm     - memory modify (constant address)
+iprobe  - probe to discover valid I2C chip addresses
+itest  - return true/false on integer compare
+loadb   - load binary file over serial line (kermit mode)
+loads   - load S-Record file over serial line
+loady   - load binary file over serial line (ymodem mode)
+loop    - infinite loop on address range
+md      - memory display
+mii     - MII utility commands
+mm      - memory modify (auto-incrementing)
+mtest   - simple RAM test
+mw      - memory write (fill)
+nfs    - boot image via network using NFS protocol
+nm      - memory modify (constant address)
+pci     - list and access PCI Configuration Space
+ping   - send ICMP ECHO_REQUEST to network host
+printenv- print environment variables
+protect - enable or disable FLASH write protection
+rarpboot- boot image via network using RARP/TFTP protocol
+reset   - Perform RESET of the CPU
+run     - run commands in an environment variable
+saveenv - save environment variables to persistent storage
+setenv  - set environment variables
+sleep   - delay execution for some time
+tftpboot- boot image via network using TFTP protocol
+usb     - USB sub-system
+usbboot - boot from USB device
+version - print monitor version
+-> usb start
+(Re)start USB...
+USB:   OHCI pci controller (1131, 1561) found @(0:17:0)
+OHCI regs address 0x80000000
+scanning bus for devices... 2 USB Device(s) found
+       scanning bus for storage devices... 1 Storage Device(s) found
+->
diff --git a/drivers/dma/MCD_dmaApi.c b/drivers/dma/MCD_dmaApi.c
new file mode 100644 (file)
index 0000000..b0062b7
--- /dev/null
@@ -0,0 +1,1026 @@
+/*
+ * Copyright (C) 2004-2007 Freescale Semiconductor, 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
+ */
+
+/*Main C file for multi-channel DMA API. */
+
+#include <common.h>
+
+#ifdef CONFIG_FSLDMAFEC
+
+#include <MCD_dma.h>
+#include <MCD_tasksInit.h>
+#include <MCD_progCheck.h>
+
+/********************************************************************/
+/* This is an API-internal pointer to the DMA's registers */
+dmaRegs *MCD_dmaBar;
+
+/*
+ * These are the real and model task tables as generated by the
+ * build process
+ */
+extern TaskTableEntry MCD_realTaskTableSrc[NCHANNELS];
+extern TaskTableEntry MCD_modelTaskTableSrc[NUMOFVARIANTS];
+
+/*
+ * However, this (usually) gets relocated to on-chip SRAM, at which
+ * point we access them as these tables
+ */
+volatile TaskTableEntry *MCD_taskTable;
+TaskTableEntry *MCD_modelTaskTable;
+
+/*
+ * MCD_chStatus[] is an array of status indicators for remembering
+ * whether a DMA has ever been attempted on each channel, pausing
+ * status, etc.
+ */
+static int MCD_chStatus[NCHANNELS] = {
+       MCD_NO_DMA, MCD_NO_DMA, MCD_NO_DMA, MCD_NO_DMA,
+       MCD_NO_DMA, MCD_NO_DMA, MCD_NO_DMA, MCD_NO_DMA,
+       MCD_NO_DMA, MCD_NO_DMA, MCD_NO_DMA, MCD_NO_DMA,
+       MCD_NO_DMA, MCD_NO_DMA, MCD_NO_DMA, MCD_NO_DMA
+};
+
+/* Prototypes for local functions */
+static void MCD_memcpy(int *dest, int *src, u32 size);
+static void MCD_resmActions(int channel);
+
+/*
+ * Buffer descriptors used for storage of progress info for single Dmas
+ * Also used as storage for the DMA for CRCs for single DMAs
+ * Otherwise, the DMA does not parse these buffer descriptors
+ */
+#ifdef MCD_INCLUDE_EU
+extern MCD_bufDesc MCD_singleBufDescs[NCHANNELS];
+#else
+MCD_bufDesc MCD_singleBufDescs[NCHANNELS];
+#endif
+MCD_bufDesc *MCD_relocBuffDesc;
+
+/* Defines for the debug control register's functions */
+#define DBG_CTL_COMP1_TASK     (0x00002000)
+#define DBG_CTL_ENABLE         (DBG_CTL_AUTO_ARM       | \
+                                DBG_CTL_BREAK          | \
+                                DBG_CTL_INT_BREAK      | \
+                                DBG_CTL_COMP1_TASK)
+#define DBG_CTL_DISABLE                (DBG_CTL_AUTO_ARM       | \
+                                DBG_CTL_INT_BREAK      | \
+                                DBG_CTL_COMP1_TASK)
+#define DBG_KILL_ALL_STAT      (0xFFFFFFFF)
+
+/* Offset to context save area where progress info is stored */
+#define CSAVE_OFFSET           10
+
+/* Defines for Byte Swapping */
+#define MCD_BYTE_SWAP_KILLER   0xFFF8888F
+#define MCD_NO_BYTE_SWAP_ATALL 0x00040000
+
+/* Execution Unit Identifiers */
+#define MAC                    0       /* legacy - not used */
+#define LUAC                   1       /* legacy - not used */
+#define CRC                    2       /* legacy - not used */
+#define LURC                   3       /* Logic Unit with CRC */
+
+/* Task Identifiers */
+#define TASK_CHAINNOEU         0
+#define TASK_SINGLENOEU                1
+#ifdef MCD_INCLUDE_EU
+#define TASK_CHAINEU           2
+#define TASK_SINGLEEU          3
+#define TASK_FECRX             4
+#define TASK_FECTX             5
+#else
+#define TASK_CHAINEU           0
+#define TASK_SINGLEEU          1
+#define TASK_FECRX             2
+#define TASK_FECTX             3
+#endif
+
+/*
+ * Structure to remember which variant is on which channel
+ * TBD- need this?
+ */
+typedef struct MCD_remVariants_struct MCD_remVariant;
+struct MCD_remVariants_struct {
+       int remDestRsdIncr[NCHANNELS];  /* -1,0,1 */
+       int remSrcRsdIncr[NCHANNELS];   /* -1,0,1 */
+       s16 remDestIncr[NCHANNELS];     /* DestIncr */
+       s16 remSrcIncr[NCHANNELS];      /* srcIncr */
+       u32 remXferSize[NCHANNELS];     /* xferSize */
+};
+
+/* Structure to remember the startDma parameters for each channel */
+MCD_remVariant MCD_remVariants;
+/********************************************************************/
+/* Function: MCD_initDma
+ * Purpose:  Initializes the DMA API by setting up a pointer to the DMA
+ *           registers, relocating and creating the appropriate task
+ *           structures, and setting up some global settings
+ * Arguments:
+ *  dmaBarAddr    - pointer to the multichannel DMA registers
+ *  taskTableDest - location to move DMA task code and structs to
+ *  flags         - operational parameters
+ * Return Value:
+ *  MCD_TABLE_UNALIGNED if taskTableDest is not 512-byte aligned
+ *  MCD_OK otherwise
+ */
+extern u32 MCD_funcDescTab0[];
+
+int MCD_initDma(dmaRegs * dmaBarAddr, void *taskTableDest, u32 flags)
+{
+       int i;
+       TaskTableEntry *entryPtr;
+
+       /* setup the local pointer to register set */
+       MCD_dmaBar = dmaBarAddr;
+
+       /* do we need to move/create a task table */
+       if ((flags & MCD_RELOC_TASKS) != 0) {
+               int fixedSize;
+               u32 *fixedPtr;
+               /*int *tablePtr = taskTableDest;TBD */
+               int varTabsOffset, funcDescTabsOffset, contextSavesOffset;
+               int taskDescTabsOffset;
+               int taskTableSize, varTabsSize, funcDescTabsSize,
+                   contextSavesSize;
+               int taskDescTabSize;
+
+               int i;
+
+               /* check if physical address is aligned on 512 byte boundary */
+               if (((u32) taskTableDest & 0x000001ff) != 0)
+                       return (MCD_TABLE_UNALIGNED);
+
+               /* set up local pointer to task Table */
+               MCD_taskTable = taskTableDest;
+
+               /*
+                * Create a task table:
+                * - compute aligned base offsets for variable tables and
+                *   function descriptor tables, then
+                * - loop through the task table and setup the pointers
+                * - copy over model task table with the the actual task
+                *   descriptor tables
+                */
+
+               taskTableSize = NCHANNELS * sizeof(TaskTableEntry);
+               /* align variable tables to size */
+               varTabsOffset = taskTableSize + (u32) taskTableDest;
+               if ((varTabsOffset & (VAR_TAB_SIZE - 1)) != 0)
+                       varTabsOffset =
+                           (varTabsOffset + VAR_TAB_SIZE) & (~VAR_TAB_SIZE);
+               /* align function descriptor tables */
+               varTabsSize = NCHANNELS * VAR_TAB_SIZE;
+               funcDescTabsOffset = varTabsOffset + varTabsSize;
+
+               if ((funcDescTabsOffset & (FUNCDESC_TAB_SIZE - 1)) != 0)
+                       funcDescTabsOffset =
+                           (funcDescTabsOffset +
+                            FUNCDESC_TAB_SIZE) & (~FUNCDESC_TAB_SIZE);
+
+               funcDescTabsSize = FUNCDESC_TAB_NUM * FUNCDESC_TAB_SIZE;
+               contextSavesOffset = funcDescTabsOffset + funcDescTabsSize;
+               contextSavesSize = (NCHANNELS * CONTEXT_SAVE_SIZE);
+               fixedSize =
+                   taskTableSize + varTabsSize + funcDescTabsSize +
+                   contextSavesSize;
+
+               /* zero the thing out */
+               fixedPtr = (u32 *) taskTableDest;
+               for (i = 0; i < (fixedSize / 4); i++)
+                       fixedPtr[i] = 0;
+
+               entryPtr = (TaskTableEntry *) MCD_taskTable;
+               /* set up fixed pointers */
+               for (i = 0; i < NCHANNELS; i++) {
+                       /* update ptr to local value */
+                       entryPtr[i].varTab = (u32) varTabsOffset;
+                       entryPtr[i].FDTandFlags =
+                           (u32) funcDescTabsOffset | MCD_TT_FLAGS_DEF;
+                       entryPtr[i].contextSaveSpace = (u32) contextSavesOffset;
+                       varTabsOffset += VAR_TAB_SIZE;
+#ifdef MCD_INCLUDE_EU
+                       /* if not there is only one, just point to the
+                          same one */
+                       funcDescTabsOffset += FUNCDESC_TAB_SIZE;
+#endif
+                       contextSavesOffset += CONTEXT_SAVE_SIZE;
+               }
+               /* copy over the function descriptor table */
+               for (i = 0; i < FUNCDESC_TAB_NUM; i++) {
+                       MCD_memcpy((void *)(entryPtr[i].
+                                           FDTandFlags & ~MCD_TT_FLAGS_MASK),
+                                  (void *)MCD_funcDescTab0, FUNCDESC_TAB_SIZE);
+               }
+
+               /* copy model task table to where the context saves stuff
+                  leaves off */
+               MCD_modelTaskTable = (TaskTableEntry *) contextSavesOffset;
+
+               MCD_memcpy((void *)MCD_modelTaskTable,
+                          (void *)MCD_modelTaskTableSrc,
+                          NUMOFVARIANTS * sizeof(TaskTableEntry));
+
+               /* point to local version of model task table */
+               entryPtr = MCD_modelTaskTable;
+               taskDescTabsOffset = (u32) MCD_modelTaskTable +
+                   (NUMOFVARIANTS * sizeof(TaskTableEntry));
+
+               /* copy actual task code and update TDT ptrs in local
+                  model task table */
+               for (i = 0; i < NUMOFVARIANTS; i++) {
+                       taskDescTabSize =
+                           entryPtr[i].TDTend - entryPtr[i].TDTstart + 4;
+                       MCD_memcpy((void *)taskDescTabsOffset,
+                                  (void *)entryPtr[i].TDTstart,
+                                  taskDescTabSize);
+                       entryPtr[i].TDTstart = (u32) taskDescTabsOffset;
+                       taskDescTabsOffset += taskDescTabSize;
+                       entryPtr[i].TDTend = (u32) taskDescTabsOffset - 4;
+               }
+#ifdef MCD_INCLUDE_EU
+               /* Tack single DMA BDs onto end of code so API controls
+                  where they are since DMA might write to them */
+               MCD_relocBuffDesc =
+                   (MCD_bufDesc *) (entryPtr[NUMOFVARIANTS - 1].TDTend + 4);
+#else
+               /* DMA does not touch them so they can be wherever and we
+                  don't need to waste SRAM on them */
+               MCD_relocBuffDesc = MCD_singleBufDescs;
+#endif
+       } else {
+               /* point the would-be relocated task tables and the
+                  buffer descriptors to the ones the linker generated */
+
+               if (((u32) MCD_realTaskTableSrc & 0x000001ff) != 0)
+                       return (MCD_TABLE_UNALIGNED);
+
+               /* need to add code to make sure that every thing else is
+                  aligned properly TBD. this is problematic if we init
+                  more than once or after running tasks, need to add
+                  variable to see if we have aleady init'd */
+               entryPtr = MCD_realTaskTableSrc;
+               for (i = 0; i < NCHANNELS; i++) {
+                       if (((entryPtr[i].varTab & (VAR_TAB_SIZE - 1)) != 0) ||
+                           ((entryPtr[i].
+                             FDTandFlags & (FUNCDESC_TAB_SIZE - 1)) != 0))
+                               return (MCD_TABLE_UNALIGNED);
+               }
+
+               MCD_taskTable = MCD_realTaskTableSrc;
+               MCD_modelTaskTable = MCD_modelTaskTableSrc;
+               MCD_relocBuffDesc = MCD_singleBufDescs;
+       }
+
+       /* Make all channels as totally inactive, and remember them as such: */
+
+       MCD_dmaBar->taskbar = (u32) MCD_taskTable;
+       for (i = 0; i < NCHANNELS; i++) {
+               MCD_dmaBar->taskControl[i] = 0x0;
+               MCD_chStatus[i] = MCD_NO_DMA;
+       }
+
+       /* Set up pausing mechanism to inactive state: */
+       /* no particular values yet for either comparator registers */
+       MCD_dmaBar->debugComp1 = 0;
+       MCD_dmaBar->debugComp2 = 0;
+       MCD_dmaBar->debugControl = DBG_CTL_DISABLE;
+       MCD_dmaBar->debugStatus = DBG_KILL_ALL_STAT;
+
+       /* enable or disable commbus prefetch, really need an ifdef or
+          something to keep from trying to set this in the 8220 */
+       if ((flags & MCD_COMM_PREFETCH_EN) != 0)
+               MCD_dmaBar->ptdControl &= ~PTD_CTL_COMM_PREFETCH;
+       else
+               MCD_dmaBar->ptdControl |= PTD_CTL_COMM_PREFETCH;
+
+       return (MCD_OK);
+}
+
+/*********************** End of MCD_initDma() ***********************/
+
+/********************************************************************/
+/* Function:   MCD_dmaStatus
+ * Purpose:    Returns the status of the DMA on the requested channel
+ * Arguments:  channel - channel number
+ * Returns:    Predefined status indicators
+ */
+int MCD_dmaStatus(int channel)
+{
+       u16 tcrValue;
+
+       if ((channel < 0) || (channel >= NCHANNELS))
+               return (MCD_CHANNEL_INVALID);
+
+       tcrValue = MCD_dmaBar->taskControl[channel];
+       if ((tcrValue & TASK_CTL_EN) == 0) {    /* nothing running */
+               /* if last reported with task enabled */
+               if (MCD_chStatus[channel] == MCD_RUNNING
+                   || MCD_chStatus[channel] == MCD_IDLE)
+                       MCD_chStatus[channel] = MCD_DONE;
+       } else {                /* something is running */
+
+               /* There are three possibilities: paused, running or idle. */
+               if (MCD_chStatus[channel] == MCD_RUNNING
+                   || MCD_chStatus[channel] == MCD_IDLE) {
+                       MCD_dmaBar->ptdDebug = PTD_DBG_TSK_VLD_INIT;
+                       /* This register is selected to know which initiator is
+                          actually asserted. */
+                       if ((MCD_dmaBar->ptdDebug >> channel) & 0x1)
+                               MCD_chStatus[channel] = MCD_RUNNING;
+                       else
+                               MCD_chStatus[channel] = MCD_IDLE;
+                       /* do not change the status if it is already paused. */
+               }
+       }
+       return MCD_chStatus[channel];
+}
+
+/******************** End of MCD_dmaStatus() ************************/
+
+/********************************************************************/
+/* Function:    MCD_startDma
+ * Ppurpose:    Starts a particular kind of DMA
+ * Arguments:
+ * srcAddr     - the channel on which to run the DMA
+ * srcIncr     - the address to move data from, or buffer-descriptor address
+ * destAddr    - the amount to increment the source address per transfer
+ * destIncr    - the address to move data to
+ * dmaSize     - the amount to increment the destination address per transfer
+ * xferSize    - the number bytes in of each data movement (1, 2, or 4)
+ * initiator   - what device initiates the DMA
+ * priority    - priority of the DMA
+ * flags       - flags describing the DMA
+ * funcDesc    - description of byte swapping, bit swapping, and CRC actions
+ * srcAddrVirt - virtual buffer descriptor address TBD
+ * Returns:     MCD_CHANNEL_INVALID if channel is invalid, else MCD_OK
+ */
+
+int MCD_startDma(int channel, s8 * srcAddr, s16 srcIncr, s8 * destAddr,
+                s16 destIncr, u32 dmaSize, u32 xferSize, u32 initiator,
+                int priority, u32 flags, u32 funcDesc
+#ifdef MCD_NEED_ADDR_TRANS
+                s8 * srcAddrVirt
+#endif
+    )
+{
+       int srcRsdIncr, destRsdIncr;
+       int *cSave;
+       short xferSizeIncr;
+       int tcrCount = 0;
+#ifdef MCD_INCLUDE_EU
+       u32 *realFuncArray;
+#endif
+
+       if ((channel < 0) || (channel >= NCHANNELS))
+               return (MCD_CHANNEL_INVALID);
+
+       /* tbd - need to determine the proper response to a bad funcDesc when
+          not including EU functions, for now, assign a benign funcDesc, but
+          maybe should return an error */
+#ifndef MCD_INCLUDE_EU
+       funcDesc = MCD_FUNC_NOEU1;
+#endif
+
+#ifdef MCD_DEBUG
+       printf("startDma:Setting up params\n");
+#endif
+       /* Set us up for task-wise priority.  We don't technically need to do
+          this on every start, but since the register involved is in the same
+          longword as other registers that users are in control of, setting
+          it more than once is probably preferable.  That since the
+          documentation doesn't seem to be completely consistent about the
+          nature of the PTD control register. */
+       MCD_dmaBar->ptdControl |= (u16) 0x8000;
+
+       /* Not sure what we need to keep here rtm TBD */
+#if 1
+       /* Calculate additional parameters to the regular DMA calls. */
+       srcRsdIncr = srcIncr < 0 ? -1 : (srcIncr > 0 ? 1 : 0);
+       destRsdIncr = destIncr < 0 ? -1 : (destIncr > 0 ? 1 : 0);
+
+       xferSizeIncr = (xferSize & 0xffff) | 0x20000000;
+
+       /* Remember for each channel which variant is running. */
+       MCD_remVariants.remSrcRsdIncr[channel] = srcRsdIncr;
+       MCD_remVariants.remDestRsdIncr[channel] = destRsdIncr;
+       MCD_remVariants.remDestIncr[channel] = destIncr;
+       MCD_remVariants.remSrcIncr[channel] = srcIncr;
+       MCD_remVariants.remXferSize[channel] = xferSize;
+#endif
+
+       cSave =
+           (int *)(MCD_taskTable[channel].contextSaveSpace) + CSAVE_OFFSET +
+           CURRBD;
+
+#ifdef MCD_INCLUDE_EU
+       /* may move this to EU specific calls */
+       realFuncArray =
+           (u32 *) (MCD_taskTable[channel].FDTandFlags & 0xffffff00);
+       /* Modify the LURC's normal and byte-residue-loop functions according
+          to parameter. */
+       realFuncArray[(LURC * 16)] = xferSize == 4 ?
+           funcDesc : xferSize == 2 ?
+           funcDesc & 0xfffff00f : funcDesc & 0xffff000f;
+       realFuncArray[(LURC * 16 + 1)] =
+           (funcDesc & MCD_BYTE_SWAP_KILLER) | MCD_NO_BYTE_SWAP_ATALL;
+#endif
+       /* Write the initiator field in the TCR, and also set the
+          initiator-hold bit. Note that,due to a hardware quirk, this could
+          collide with an MDE access to the initiator-register file, so we
+          have to verify that the write reads back correctly. */
+
+       MCD_dmaBar->taskControl[channel] =
+           (initiator << 8) | TASK_CTL_HIPRITSKEN | TASK_CTL_HLDINITNUM;
+
+       while (((MCD_dmaBar->taskControl[channel] & 0x1fff) !=
+               ((initiator << 8) | TASK_CTL_HIPRITSKEN | TASK_CTL_HLDINITNUM))
+              && (tcrCount < 1000)) {
+               tcrCount++;
+               /*MCD_dmaBar->ptd_tcr[channel] = (initiator << 8) | 0x0020; */
+               MCD_dmaBar->taskControl[channel] =
+                   (initiator << 8) | TASK_CTL_HIPRITSKEN |
+                   TASK_CTL_HLDINITNUM;
+       }
+
+       MCD_dmaBar->priority[channel] = (u8) priority & PRIORITY_PRI_MASK;
+       /* should be albe to handle this stuff with only one write to ts reg
+          - tbd */
+       if (channel < 8 && channel >= 0) {
+               MCD_dmaBar->taskSize0 &= ~(0xf << (7 - channel) * 4);
+               MCD_dmaBar->taskSize0 |=
+                   (xferSize & 3) << (((7 - channel) * 4) + 2);
+               MCD_dmaBar->taskSize0 |= (xferSize & 3) << ((7 - channel) * 4);
+       } else {
+               MCD_dmaBar->taskSize1 &= ~(0xf << (15 - channel) * 4);
+               MCD_dmaBar->taskSize1 |=
+                   (xferSize & 3) << (((15 - channel) * 4) + 2);
+               MCD_dmaBar->taskSize1 |= (xferSize & 3) << ((15 - channel) * 4);
+       }
+
+       /* setup task table flags/options which mostly control the line
+          buffers */
+       MCD_taskTable[channel].FDTandFlags &= ~MCD_TT_FLAGS_MASK;
+       MCD_taskTable[channel].FDTandFlags |= (MCD_TT_FLAGS_MASK & flags);
+
+       if (flags & MCD_FECTX_DMA) {
+               /* TDTStart and TDTEnd */
+               MCD_taskTable[channel].TDTstart =
+                   MCD_modelTaskTable[TASK_FECTX].TDTstart;
+               MCD_taskTable[channel].TDTend =
+                   MCD_modelTaskTable[TASK_FECTX].TDTend;
+               MCD_startDmaENetXmit(srcAddr, srcAddr, destAddr, MCD_taskTable,
+                                    channel);
+       } else if (flags & MCD_FECRX_DMA) {
+               /* TDTStart and TDTEnd */
+               MCD_taskTable[channel].TDTstart =
+                   MCD_modelTaskTable[TASK_FECRX].TDTstart;
+               MCD_taskTable[channel].TDTend =
+                   MCD_modelTaskTable[TASK_FECRX].TDTend;
+               MCD_startDmaENetRcv(srcAddr, srcAddr, destAddr, MCD_taskTable,
+                                   channel);
+       } else if (flags & MCD_SINGLE_DMA) {
+               /* this buffer descriptor is used for storing off initial
+                  parameters for later progress query calculation and for the
+                  DMA to write the resulting checksum. The DMA does not use
+                  this to determine how to operate, that info is passed with
+                  the init routine */
+               MCD_relocBuffDesc[channel].srcAddr = srcAddr;
+               MCD_relocBuffDesc[channel].destAddr = destAddr;
+
+               /* definitely not its final value */
+               MCD_relocBuffDesc[channel].lastDestAddr = destAddr;
+
+               MCD_relocBuffDesc[channel].dmaSize = dmaSize;
+               MCD_relocBuffDesc[channel].flags = 0;   /* not used */
+               MCD_relocBuffDesc[channel].csumResult = 0;      /* not used */
+               MCD_relocBuffDesc[channel].next = 0;    /* not used */
+
+               /* Initialize the progress-querying stuff to show no
+                  progress: */
+               ((volatile int *)MCD_taskTable[channel].
+                contextSaveSpace)[SRCPTR + CSAVE_OFFSET] = (int)srcAddr;
+               ((volatile int *)MCD_taskTable[channel].
+                contextSaveSpace)[DESTPTR + CSAVE_OFFSET] = (int)destAddr;
+               ((volatile int *)MCD_taskTable[channel].
+                contextSaveSpace)[DCOUNT + CSAVE_OFFSET] = 0;
+               ((volatile int *)MCD_taskTable[channel].
+                contextSaveSpace)[CURRBD + CSAVE_OFFSET] =
+(u32) & (MCD_relocBuffDesc[channel]);
+               /* tbd - need to keep the user from trying to call the EU
+                  routine when MCD_INCLUDE_EU is not defined */
+               if (funcDesc == MCD_FUNC_NOEU1 || funcDesc == MCD_FUNC_NOEU2) {
+                       /* TDTStart and TDTEnd */
+                       MCD_taskTable[channel].TDTstart =
+                           MCD_modelTaskTable[TASK_SINGLENOEU].TDTstart;
+                       MCD_taskTable[channel].TDTend =
+                           MCD_modelTaskTable[TASK_SINGLENOEU].TDTend;
+                       MCD_startDmaSingleNoEu(srcAddr, srcIncr, destAddr,
+                                              destIncr, dmaSize, xferSizeIncr,
+                                              flags, (int *)
+                                              &(MCD_relocBuffDesc[channel]),
+                                              cSave, MCD_taskTable, channel);
+               } else {
+                       /* TDTStart and TDTEnd */
+                       MCD_taskTable[channel].TDTstart =
+                           MCD_modelTaskTable[TASK_SINGLEEU].TDTstart;
+                       MCD_taskTable[channel].TDTend =
+                           MCD_modelTaskTable[TASK_SINGLEEU].TDTend;
+                       MCD_startDmaSingleEu(srcAddr, srcIncr, destAddr,
+                                            destIncr, dmaSize, xferSizeIncr,
+                                            flags, (int *)
+                                            &(MCD_relocBuffDesc[channel]),
+                                            cSave, MCD_taskTable, channel);
+               }
+       } else {                /* chained DMAS */
+               /* Initialize the progress-querying stuff to show no
+                  progress: */
+#if 1
+               /* (!defined(MCD_NEED_ADDR_TRANS)) */
+               ((volatile int *)MCD_taskTable[channel].
+                contextSaveSpace)[SRCPTR + CSAVE_OFFSET]
+                   = (int)((MCD_bufDesc *) srcAddr)->srcAddr;
+               ((volatile int *)MCD_taskTable[channel].
+                contextSaveSpace)[DESTPTR + CSAVE_OFFSET]
+                   = (int)((MCD_bufDesc *) srcAddr)->destAddr;
+#else
+               /* if using address translation, need the virtual addr of the
+                  first buffdesc */
+               ((volatile int *)MCD_taskTable[channel].
+                contextSaveSpace)[SRCPTR + CSAVE_OFFSET]
+                   = (int)((MCD_bufDesc *) srcAddrVirt)->srcAddr;
+               ((volatile int *)MCD_taskTable[channel].
+                contextSaveSpace)[DESTPTR + CSAVE_OFFSET]
+                   = (int)((MCD_bufDesc *) srcAddrVirt)->destAddr;
+#endif
+               ((volatile int *)MCD_taskTable[channel].
+                contextSaveSpace)[DCOUNT + CSAVE_OFFSET] = 0;
+               ((volatile int *)MCD_taskTable[channel].
+                contextSaveSpace)[CURRBD + CSAVE_OFFSET] = (u32) srcAddr;
+
+               if (funcDesc == MCD_FUNC_NOEU1 || funcDesc == MCD_FUNC_NOEU2) {
+                       /*TDTStart and TDTEnd */
+                       MCD_taskTable[channel].TDTstart =
+                           MCD_modelTaskTable[TASK_CHAINNOEU].TDTstart;
+                       MCD_taskTable[channel].TDTend =
+                           MCD_modelTaskTable[TASK_CHAINNOEU].TDTend;
+                       MCD_startDmaChainNoEu((int *)srcAddr, srcIncr,
+                                             destIncr, xferSize,
+                                             xferSizeIncr, cSave,
+                                             MCD_taskTable, channel);
+               } else {
+                       /*TDTStart and TDTEnd */
+                       MCD_taskTable[channel].TDTstart =
+                           MCD_modelTaskTable[TASK_CHAINEU].TDTstart;
+                       MCD_taskTable[channel].TDTend =
+                           MCD_modelTaskTable[TASK_CHAINEU].TDTend;
+                       MCD_startDmaChainEu((int *)srcAddr, srcIncr, destIncr,
+                                           xferSize, xferSizeIncr, cSave,
+                                           MCD_taskTable, channel);
+               }
+       }
+       MCD_chStatus[channel] = MCD_IDLE;
+       return (MCD_OK);
+}
+
+/************************ End of MCD_startDma() *********************/
+
+/********************************************************************/
+/* Function:    MCD_XferProgrQuery
+ * Purpose:     Returns progress of DMA on requested channel
+ * Arguments:   channel - channel to retrieve progress for
+ *              progRep - pointer to user supplied MCD_XferProg struct
+ * Returns:     MCD_CHANNEL_INVALID if channel is invalid, else MCD_OK
+ *
+ * Notes:
+ *  MCD_XferProgrQuery() upon completing or after aborting a DMA, or
+ *  while the DMA is in progress, this function returns the first
+ *  DMA-destination address not (or not yet) used in the DMA. When
+ *  encountering a non-ready buffer descriptor, the information for
+ *  the last completed descriptor is returned.
+ *
+ *  MCD_XferProgQuery() has to avoid the possibility of getting
+ *  partially-updated information in the event that we should happen
+ *  to query DMA progress just as the DMA is updating it. It does that
+ *  by taking advantage of the fact context is not saved frequently for
+ *  the most part. We therefore read it at least twice until we get the
+ *  same information twice in a row.
+ *
+ *  Because a small, but not insignificant, amount of time is required
+ *  to write out the progress-query information, especially upon
+ *  completion of the DMA, it would be wise to guarantee some time lag
+ *  between successive readings of the progress-query information.
+ */
+
+/* How many iterations of the loop below to execute to stabilize values */
+#define STABTIME 0
+
+int MCD_XferProgrQuery(int channel, MCD_XferProg * progRep)
+{
+       MCD_XferProg prevRep;
+       int again;              /* true if we are to try again to ge
+                                  consistent results */
+       int i;                  /* used as a time-waste counter */
+       int destDiffBytes;      /* Total no of bytes that we think actually
+                                  got xfered. */
+       int numIterations;      /* number of iterations */
+       int bytesNotXfered;     /* bytes that did not get xfered. */
+       s8 *LWAlignedInitDestAddr, *LWAlignedCurrDestAddr;
+       int subModVal, addModVal;       /* Mode values to added and subtracted
+                                          from the final destAddr */
+
+       if ((channel < 0) || (channel >= NCHANNELS))
+               return (MCD_CHANNEL_INVALID);
+
+       /* Read a trial value for the progress-reporting values */
+       prevRep.lastSrcAddr =
+           (s8 *) ((volatile int *)MCD_taskTable[channel].
+                   contextSaveSpace)[SRCPTR + CSAVE_OFFSET];
+       prevRep.lastDestAddr =
+           (s8 *) ((volatile int *)MCD_taskTable[channel].
+                   contextSaveSpace)[DESTPTR + CSAVE_OFFSET];
+       prevRep.dmaSize =
+           ((volatile int *)MCD_taskTable[channel].contextSaveSpace)[DCOUNT +
+                                                                     CSAVE_OFFSET];
+       prevRep.currBufDesc =
+           (MCD_bufDesc *) ((volatile int *)MCD_taskTable[channel].
+                            contextSaveSpace)[CURRBD + CSAVE_OFFSET];
+       /* Repeatedly reread those values until they match previous values: */
+       do {
+               /* Waste a little bit of time to ensure stability: */
+               for (i = 0; i < STABTIME; i++) {
+                       /* make sure this loop does something so that it
+                          doesn't get optimized out */
+                       i += i >> 2;
+               }
+               /* Check them again: */
+               progRep->lastSrcAddr =
+                   (s8 *) ((volatile int *)MCD_taskTable[channel].
+                           contextSaveSpace)[SRCPTR + CSAVE_OFFSET];
+               progRep->lastDestAddr =
+                   (s8 *) ((volatile int *)MCD_taskTable[channel].
+                           contextSaveSpace)[DESTPTR + CSAVE_OFFSET];
+               progRep->dmaSize =
+                   ((volatile int *)MCD_taskTable[channel].
+                    contextSaveSpace)[DCOUNT + CSAVE_OFFSET];
+               progRep->currBufDesc =
+                   (MCD_bufDesc *) ((volatile int *)MCD_taskTable[channel].
+                                    contextSaveSpace)[CURRBD + CSAVE_OFFSET];
+               /* See if they match: */
+               if (prevRep.lastSrcAddr != progRep->lastSrcAddr
+                   || prevRep.lastDestAddr != progRep->lastDestAddr
+                   || prevRep.dmaSize != progRep->dmaSize
+                   || prevRep.currBufDesc != progRep->currBufDesc) {
+                       /* If they don't match, remember previous values and
+                          try again: */
+                       prevRep.lastSrcAddr = progRep->lastSrcAddr;
+                       prevRep.lastDestAddr = progRep->lastDestAddr;
+                       prevRep.dmaSize = progRep->dmaSize;
+                       prevRep.currBufDesc = progRep->currBufDesc;
+                       again = MCD_TRUE;
+               } else
+                       again = MCD_FALSE;
+       } while (again == MCD_TRUE);
+
+       /* Update the dCount, srcAddr and destAddr */
+       /* To calculate dmaCount, we consider destination address. C
+          overs M1,P1,Z for destination */
+       switch (MCD_remVariants.remDestRsdIncr[channel]) {
+       case MINUS1:
+               subModVal =
+                   ((int)progRep->
+                    lastDestAddr) & ((MCD_remVariants.remXferSize[channel]) -
+                                     1);
+               addModVal =
+                   ((int)progRep->currBufDesc->
+                    destAddr) & ((MCD_remVariants.remXferSize[channel]) - 1);
+               LWAlignedInitDestAddr =
+                   (progRep->currBufDesc->destAddr) - addModVal;
+               LWAlignedCurrDestAddr = (progRep->lastDestAddr) - subModVal;
+               destDiffBytes = LWAlignedInitDestAddr - LWAlignedCurrDestAddr;
+               bytesNotXfered =
+                   (destDiffBytes / MCD_remVariants.remDestIncr[channel]) *
+                   (MCD_remVariants.remDestIncr[channel]
+                    + MCD_remVariants.remXferSize[channel]);
+               progRep->dmaSize =
+                   destDiffBytes - bytesNotXfered + addModVal - subModVal;
+               break;
+       case ZERO:
+               progRep->lastDestAddr = progRep->currBufDesc->destAddr;
+               break;
+       case PLUS1:
+               /* This value has to be subtracted from the final
+                  calculated dCount. */
+               subModVal =
+                   ((int)progRep->currBufDesc->
+                    destAddr) & ((MCD_remVariants.remXferSize[channel]) - 1);
+               /* These bytes are already in lastDestAddr. */
+               addModVal =
+                   ((int)progRep->
+                    lastDestAddr) & ((MCD_remVariants.remXferSize[channel]) -
+                                     1);
+               LWAlignedInitDestAddr =
+                   (progRep->currBufDesc->destAddr) - subModVal;
+               LWAlignedCurrDestAddr = (progRep->lastDestAddr) - addModVal;
+               destDiffBytes = (progRep->lastDestAddr - LWAlignedInitDestAddr);
+               numIterations =
+                   (LWAlignedCurrDestAddr -
+                    LWAlignedInitDestAddr) /
+                   MCD_remVariants.remDestIncr[channel];
+               bytesNotXfered =
+                   numIterations * (MCD_remVariants.remDestIncr[channel]
+                                    - MCD_remVariants.remXferSize[channel]);
+               progRep->dmaSize = destDiffBytes - bytesNotXfered - subModVal;
+               break;
+       default:
+               break;
+       }
+
+       /* This covers M1,P1,Z for source */
+       switch (MCD_remVariants.remSrcRsdIncr[channel]) {
+       case MINUS1:
+               progRep->lastSrcAddr =
+                   progRep->currBufDesc->srcAddr +
+                   (MCD_remVariants.remSrcIncr[channel] *
+                    (progRep->dmaSize / MCD_remVariants.remXferSize[channel]));
+               break;
+       case ZERO:
+               progRep->lastSrcAddr = progRep->currBufDesc->srcAddr;
+               break;
+       case PLUS1:
+               progRep->lastSrcAddr =
+                   progRep->currBufDesc->srcAddr +
+                   (MCD_remVariants.remSrcIncr[channel] *
+                    (progRep->dmaSize / MCD_remVariants.remXferSize[channel]));
+               break;
+       default:
+               break;
+       }
+
+       return (MCD_OK);
+}
+
+/******************* End of MCD_XferProgrQuery() ********************/
+
+/********************************************************************/
+/* MCD_resmActions() does the majority of the actions of a DMA resume.
+ * It is called from MCD_killDma() and MCD_resumeDma().  It has to be
+ * a separate function because the kill function has to negate the task
+ * enable before resuming it, but the resume function has to do nothing
+ * if there is no DMA on that channel (i.e., if the enable bit is 0).
+ */
+static void MCD_resmActions(int channel)
+{
+       MCD_dmaBar->debugControl = DBG_CTL_DISABLE;
+       MCD_dmaBar->debugStatus = MCD_dmaBar->debugStatus;
+       /* This register is selected to know which initiator is
+          actually asserted. */
+       MCD_dmaBar->ptdDebug = PTD_DBG_TSK_VLD_INIT;
+
+       if ((MCD_dmaBar->ptdDebug >> channel) & 0x1)
+               MCD_chStatus[channel] = MCD_RUNNING;
+       else
+               MCD_chStatus[channel] = MCD_IDLE;
+}
+
+/********************* End of MCD_resmActions() *********************/
+
+/********************************************************************/
+/* Function:    MCD_killDma
+ * Purpose:     Halt the DMA on the requested channel, without any
+ *              intention of resuming the DMA.
+ * Arguments:   channel - requested channel
+ * Returns:     MCD_CHANNEL_INVALID if channel is invalid, else MCD_OK
+ *
+ * Notes:
+ *  A DMA may be killed from any state, including paused state, and it
+ *  always goes to the MCD_HALTED state even if it is killed while in
+ *  the MCD_NO_DMA or MCD_IDLE states.
+ */
+int MCD_killDma(int channel)
+{
+       /* MCD_XferProg progRep; */
+
+       if ((channel < 0) || (channel >= NCHANNELS))
+               return (MCD_CHANNEL_INVALID);
+
+       MCD_dmaBar->taskControl[channel] = 0x0;
+       MCD_resumeDma(channel);
+       /*
+        * This must be after the write to the TCR so that the task doesn't
+        * start up again momentarily, and before the status assignment so
+        * as to override whatever MCD_resumeDma() may do to the channel
+        * status.
+        */
+       MCD_chStatus[channel] = MCD_HALTED;
+
+       /*
+        * Update the current buffer descriptor's lastDestAddr field
+        *
+        * MCD_XferProgrQuery (channel, &progRep);
+        * progRep.currBufDesc->lastDestAddr = progRep.lastDestAddr;
+        */
+       return (MCD_OK);
+}
+
+/************************ End of MCD_killDma() **********************/
+
+/********************************************************************/
+/* Function:    MCD_continDma
+ * Purpose:     Continue a DMA which as stopped due to encountering an
+ *              unready buffer descriptor.
+ * Arguments:   channel - channel to continue the DMA on
+ * Returns:     MCD_CHANNEL_INVALID if channel is invalid, else MCD_OK
+ *
+ * Notes:
+ *  This routine does not check to see if there is a task which can
+ *  be continued. Also this routine should not be used with single DMAs.
+ */
+int MCD_continDma(int channel)
+{
+       if ((channel < 0) || (channel >= NCHANNELS))
+               return (MCD_CHANNEL_INVALID);
+
+       MCD_dmaBar->taskControl[channel] |= TASK_CTL_EN;
+       MCD_chStatus[channel] = MCD_RUNNING;
+
+       return (MCD_OK);
+}
+
+/********************** End of MCD_continDma() **********************/
+
+/*********************************************************************
+ * MCD_pauseDma() and MCD_resumeDma() below use the DMA's debug unit
+ * to freeze a task and resume it.  We freeze a task by breakpointing
+ * on the stated task.  That is, not any specific place in the task,
+ * but any time that task executes.  In particular, when that task
+ * executes, we want to freeze that task and only that task.
+ *
+ * The bits of the debug control register influence interrupts vs.
+ * breakpoints as follows:
+ * - Bits 14 and 0 enable or disable debug functions.  If enabled, you
+ *   will get the interrupt but you may or may not get a breakpoint.
+ * - Bits 2 and 1 decide whether you also get a breakpoint in addition
+ *   to an interrupt.
+ *
+ * The debug unit can do these actions in response to either internally
+ * detected breakpoint conditions from the comparators, or in response
+ * to the external breakpoint pin, or both.
+ * - Bits 14 and 1 perform the above-described functions for
+ *   internally-generated conditions, i.e., the debug comparators.
+ * - Bits 0 and 2 perform the above-described functions for external
+ *   conditions, i.e., the breakpoint external pin.
+ *
+ * Note that, although you "always" get the interrupt when you turn
+ * the debug functions, the interrupt can nevertheless, if desired, be
+ * masked by the corresponding bit in the PTD's IMR. Note also that
+ * this means that bits 14 and 0 must enable debug functions before
+ * bits 1 and 2, respectively, have any effect.
+ *
+ * NOTE: It's extremely important to not pause more than one DMA channel
+ *  at a time.
+ ********************************************************************/
+
+/********************************************************************/
+/* Function:    MCD_pauseDma
+ * Purpose:     Pauses the DMA on a given channel (if any DMA is running
+ *              on that channel).
+ * Arguments:   channel
+ * Returns:     MCD_CHANNEL_INVALID if channel is invalid, else MCD_OK
+ */
+int MCD_pauseDma(int channel)
+{
+       /* MCD_XferProg progRep; */
+
+       if ((channel < 0) || (channel >= NCHANNELS))
+               return (MCD_CHANNEL_INVALID);
+
+       if (MCD_dmaBar->taskControl[channel] & TASK_CTL_EN) {
+               MCD_dmaBar->debugComp1 = channel;
+               MCD_dmaBar->debugControl =
+                   DBG_CTL_ENABLE | (1 << (channel + 16));
+               MCD_chStatus[channel] = MCD_PAUSED;
+
+               /*
+                * Update the current buffer descriptor's lastDestAddr field
+                *
+                * MCD_XferProgrQuery (channel, &progRep);
+                * progRep.currBufDesc->lastDestAddr = progRep.lastDestAddr;
+                */
+       }
+       return (MCD_OK);
+}
+
+/************************* End of MCD_pauseDma() ********************/
+
+/********************************************************************/
+/* Function:    MCD_resumeDma
+ * Purpose:     Resumes the DMA on a given channel (if any DMA is
+ *              running on that channel).
+ * Arguments:   channel - channel on which to resume DMA
+ * Returns:     MCD_CHANNEL_INVALID if channel is invalid, else MCD_OK
+ */
+int MCD_resumeDma(int channel)
+{
+       if ((channel < 0) || (channel >= NCHANNELS))
+               return (MCD_CHANNEL_INVALID);
+
+       if (MCD_dmaBar->taskControl[channel] & TASK_CTL_EN)
+               MCD_resmActions(channel);
+
+       return (MCD_OK);
+}
+
+/************************ End of MCD_resumeDma() ********************/
+
+/********************************************************************/
+/* Function:    MCD_csumQuery
+ * Purpose:     Provide the checksum after performing a non-chained DMA
+ * Arguments:   channel - channel to report on
+ *              csum - pointer to where to write the checksum/CRC
+ * Returns:     MCD_ERROR if the channel is invalid, else MCD_OK
+ *
+ * Notes:
+ *
+ */
+int MCD_csumQuery(int channel, u32 * csum)
+{
+#ifdef MCD_INCLUDE_EU
+       if ((channel < 0) || (channel >= NCHANNELS))
+               return (MCD_CHANNEL_INVALID);
+
+       *csum = MCD_relocBuffDesc[channel].csumResult;
+       return (MCD_OK);
+#else
+       return (MCD_ERROR);
+#endif
+}
+
+/*********************** End of MCD_resumeDma() *********************/
+
+/********************************************************************/
+/* Function:    MCD_getCodeSize
+ * Purpose:     Provide the size requirements of the microcoded tasks
+ * Returns:     Size in bytes
+ */
+int MCD_getCodeSize(void)
+{
+#ifdef MCD_INCLUDE_EU
+       return (0x2b5c);
+#else
+       return (0x173c);
+#endif
+}
+
+/********************** End of MCD_getCodeSize() ********************/
+
+/********************************************************************/
+/* Function:    MCD_getVersion
+ * Purpose:     Provide the version string and number
+ * Arguments:   longVersion - user supplied pointer to a pointer to a char
+ *                    which points to the version string
+ * Returns:     Version number and version string (by reference)
+ */
+char MCD_versionString[] = "Multi-channel DMA API Alpha v0.3 (2004-04-26)";
+#define MCD_REV_MAJOR   0x00
+#define MCD_REV_MINOR   0x03
+
+int MCD_getVersion(char **longVersion)
+{
+       *longVersion = MCD_versionString;
+       return ((MCD_REV_MAJOR << 8) | MCD_REV_MINOR);
+}
+
+/********************** End of MCD_getVersion() *********************/
+
+/********************************************************************/
+/* Private version of memcpy()
+ * Note that everything this is used for is longword-aligned.
+ */
+static void MCD_memcpy(int *dest, int *src, u32 size)
+{
+       u32 i;
+
+       for (i = 0; i < size; i += sizeof(int), dest++, src++)
+               *dest = *src;
+}
+#endif                         /* CONFIG_FSLDMAFEC */
diff --git a/drivers/dma/MCD_tasks.c b/drivers/dma/MCD_tasks.c
new file mode 100644 (file)
index 0000000..694e780
--- /dev/null
@@ -0,0 +1,2428 @@
+/*
+ * Copyright (C) 2004-2007 Freescale Semiconductor, 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
+ */
+
+/* Contains task code and structures for Multi-channel DMA */
+
+#include <MCD_dma.h>
+
+u32 MCD_varTab0[];
+u32 MCD_varTab1[];
+u32 MCD_varTab2[];
+u32 MCD_varTab3[];
+u32 MCD_varTab4[];
+u32 MCD_varTab5[];
+u32 MCD_varTab6[];
+u32 MCD_varTab7[];
+u32 MCD_varTab8[];
+u32 MCD_varTab9[];
+u32 MCD_varTab10[];
+u32 MCD_varTab11[];
+u32 MCD_varTab12[];
+u32 MCD_varTab13[];
+u32 MCD_varTab14[];
+u32 MCD_varTab15[];
+
+u32 MCD_funcDescTab0[];
+#ifdef MCD_INCLUDE_EU
+u32 MCD_funcDescTab1[];
+u32 MCD_funcDescTab2[];
+u32 MCD_funcDescTab3[];
+u32 MCD_funcDescTab4[];
+u32 MCD_funcDescTab5[];
+u32 MCD_funcDescTab6[];
+u32 MCD_funcDescTab7[];
+u32 MCD_funcDescTab8[];
+u32 MCD_funcDescTab9[];
+u32 MCD_funcDescTab10[];
+u32 MCD_funcDescTab11[];
+u32 MCD_funcDescTab12[];
+u32 MCD_funcDescTab13[];
+u32 MCD_funcDescTab14[];
+u32 MCD_funcDescTab15[];
+#endif
+
+u32 MCD_contextSave0[];
+u32 MCD_contextSave1[];
+u32 MCD_contextSave2[];
+u32 MCD_contextSave3[];
+u32 MCD_contextSave4[];
+u32 MCD_contextSave5[];
+u32 MCD_contextSave6[];
+u32 MCD_contextSave7[];
+u32 MCD_contextSave8[];
+u32 MCD_contextSave9[];
+u32 MCD_contextSave10[];
+u32 MCD_contextSave11[];
+u32 MCD_contextSave12[];
+u32 MCD_contextSave13[];
+u32 MCD_contextSave14[];
+u32 MCD_contextSave15[];
+
+u32 MCD_realTaskTableSrc[] = {
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab0,      /* Task 0 Variable Table */
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave0, /* Task 0 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab1,      /* Task 1 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab1, /* Task 1 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave1, /* Task 1 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab2,      /* Task 2 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab2, /* Task 2 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave2, /* Task 2 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab3,      /* Task 3 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab3, /* Task 3 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave3, /* Task 3 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab4,      /* Task 4 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab4, /* Task 4 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave4, /* Task 4 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab5,      /* Task 5 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab5, /* Task 5 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave5, /* Task 5 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab6,      /* Task 6 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab6, /* Task 6 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave6, /* Task 6 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab7,      /* Task 7 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab7, /* Task 7 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave7, /* Task 7 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab8,      /* Task 8 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab8, /* Task 8 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave8, /* Task 8 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab9,      /* Task 9 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab9, /* Task 9 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave9, /* Task 9 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab10,     /* Task 10 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab10,        /* Task 10 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave10,        /* Task 10 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab11,     /* Task 11 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab11,        /* Task 11 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave11,        /* Task 11 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab12,     /* Task 12 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab12,        /* Task 12 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave12,        /* Task 12 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab13,     /* Task 13 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab13,        /* Task 13 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave13,        /* Task 13 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab14,     /* Task 14 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab14,        /* Task 14 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave14,        /* Task 14 context save space */
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_varTab15,     /* Task 15 Variable Table */
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_funcDescTab15,        /* Task 15 Fn Desc. Table & Flags */
+#else
+       (u32) MCD_funcDescTab0, /* Task 0 Fn Desc. Table & Flags */
+#endif
+       0x00000000,
+       0x00000000,
+       (u32) MCD_contextSave15,        /* Task 15 context save space */
+       0x00000000,
+};
+
+u32 MCD_varTab0[] = {          /* Task 0 Variable Table */
+       0x00000000,             /* var[0] */
+       0x00000000,             /* var[1] */
+       0x00000000,             /* var[2] */
+       0x00000000,             /* var[3] */
+       0x00000000,             /* var[4] */
+       0x00000000,             /* var[5] */
+       0x00000000,             /* var[6] */
+       0x00000000,             /* var[7] */
+       0x00000000,             /* var[8] */
+       0x00000000,             /* var[9] */
+       0x00000000,             /* var[10] */
+       0x00000000,             /* var[11] */
+       0x00000000,             /* var[12] */
+       0x00000000,             /* var[13] */
+       0x00000000,             /* var[14] */
+       0x00000000,             /* var[15] */
+       0x00000000,             /* var[16] */
+       0x00000000,             /* var[17] */
+       0x00000000,             /* var[18] */
+       0x00000000,             /* var[19] */
+       0x00000000,             /* var[20] */
+       0x00000000,             /* var[21] */
+       0x00000000,             /* var[22] */
+       0x00000000,             /* var[23] */
+       0xe0000000,             /* inc[0] */
+       0x20000000,             /* inc[1] */
+       0x2000ffff,             /* inc[2] */
+       0x00000000,             /* inc[3] */
+       0x00000000,             /* inc[4] */
+       0x00000000,             /* inc[5] */
+       0x00000000,             /* inc[6] */
+       0x00000000,             /* inc[7] */
+};
+
+u32 MCD_varTab1[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab2[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab3[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab4[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab5[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab6[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab7[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab8[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab9[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab10[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab11[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab12[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab13[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab14[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_varTab15[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xe0000000,
+       0x20000000,
+       0x2000ffff,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_funcDescTab0[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+#ifdef MCD_INCLUDE_EU
+u32 MCD_funcDescTab1[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab2[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab3[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab4[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab5[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab6[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab7[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab8[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab9[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab10[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab11[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab12[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab13[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab14[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+
+u32 MCD_funcDescTab15[] = {
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0xa0045670,
+       0xa0000000,
+       0xa0000000,
+       0x20000000,
+       0x21800000,
+       0x21e00000,
+       0x20400000,
+       0x20500000,
+       0x205a0000,
+       0x20a00000,
+       0x202fa000,
+       0x202f9000,
+       0x202ea000,
+       0x202da000,
+       0x202e2000,
+       0x202f2000,
+};
+#endif                         /*MCD_INCLUDE_EU */
+
+u32 MCD_contextSave0[128];     /* Task 0 context save space */
+u32 MCD_contextSave1[128];     /* Task 1 context save space */
+u32 MCD_contextSave2[128];     /* Task 2 context save space */
+u32 MCD_contextSave3[128];     /* Task 3 context save space */
+u32 MCD_contextSave4[128];     /* Task 4 context save space */
+u32 MCD_contextSave5[128];     /* Task 5 context save space */
+u32 MCD_contextSave6[128];     /* Task 6 context save space */
+u32 MCD_contextSave7[128];     /* Task 7 context save space */
+u32 MCD_contextSave8[128];     /* Task 8 context save space */
+u32 MCD_contextSave9[128];     /* Task 9 context save space */
+u32 MCD_contextSave10[128];    /* Task 10 context save space */
+u32 MCD_contextSave11[128];    /* Task 11 context save space */
+u32 MCD_contextSave12[128];    /* Task 12 context save space */
+u32 MCD_contextSave13[128];    /* Task 13 context save space */
+u32 MCD_contextSave14[128];    /* Task 14 context save space */
+u32 MCD_contextSave15[128];    /* Task 15 context save space */
+
+u32 MCD_ChainNoEu_TDT[];
+u32 MCD_SingleNoEu_TDT[];
+#ifdef MCD_INCLUDE_EU
+u32 MCD_ChainEu_TDT[];
+u32 MCD_SingleEu_TDT[];
+#endif
+u32 MCD_ENetRcv_TDT[];
+u32 MCD_ENetXmit_TDT[];
+
+u32 MCD_modelTaskTableSrc[] = {
+       (u32) MCD_ChainNoEu_TDT,
+       (u32) & ((u8 *) MCD_ChainNoEu_TDT)[0x0000016c],
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_SingleNoEu_TDT,
+       (u32) & ((u8 *) MCD_SingleNoEu_TDT)[0x000000d4],
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+#ifdef MCD_INCLUDE_EU
+       (u32) MCD_ChainEu_TDT,
+       (u32) & ((u8 *) MCD_ChainEu_TDT)[0x000001b4],
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_SingleEu_TDT,
+       (u32) & ((u8 *) MCD_SingleEu_TDT)[0x00000124],
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+#endif
+       (u32) MCD_ENetRcv_TDT,
+       (u32) & ((u8 *) MCD_ENetRcv_TDT)[0x0000009c],
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       (u32) MCD_ENetXmit_TDT,
+       (u32) & ((u8 *) MCD_ENetXmit_TDT)[0x000000d0],
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+       0x00000000,
+};
+
+u32 MCD_ChainNoEu_TDT[] = {
+       0x80004000,
+       0x8118801b,
+       0xb8c60018,
+       0x10002b10,
+       0x7000000d,
+       0x018cf89f,
+       0x6000000a,
+       0x080cf89f,
+       0x000001f8,
+       0x98180364,
+       0x8118801b,
+       0xf8c6001a,
+       0xb8c6601b,
+       0x10002710,
+       0x00000f18,
+       0xb8c6001d,
+       0x10001310,
+       0x60000007,
+       0x014cf88b,
+       0x98c6001c,
+       0x00000710,
+       0x98c70018,
+       0x10001f10,
+       0x0000c818,
+       0x000001f8,
+       0xc1476018,
+       0xc003231d,
+       0x811a601b,
+       0xc1862102,
+       0x849be009,
+       0x03fed7b8,
+       0xda9b001b,
+       0x9b9be01b,
+       0x1000cb20,
+       0x70000006,
+       0x088cf88f,
+       0x1000cb28,
+       0x70000006,
+       0x088cf88f,
+       0x1000cb30,
+       0x70000006,
+       0x088cf88f,
+       0x1000cb38,
+       0x0000c728,
+       0x000001f8,
+       0xc1476018,
+       0xc003241d,
+       0x811a601b,
+       0xda9b001b,
+       0x9b9be01b,
+       0x0000d3a0,
+       0xc1862102,
+       0x849be009,
+       0x0bfed7b8,
+       0xda9b001b,
+       0x9b9be01b,
+       0x1000cb20,
+       0x70000006,
+       0x088cf88f,
+       0x1000cb28,
+       0x70000006,
+       0x088cf88f,
+       0x1000cb30,
+       0x70000006,
+       0x088cf88f,
+       0x1000cb38,
+       0x0000c728,
+       0x000001f8,
+       0x8118801b,
+       0xd8c60018,
+       0x98c6601c,
+       0x6000000b,
+       0x0c8cfc9f,
+       0x000001f8,
+       0xa146001e,
+       0x10000b08,
+       0x10002050,
+       0xb8c60018,
+       0x10002b10,
+       0x7000000a,
+       0x080cf89f,
+       0x6000000d,
+       0x018cf89f,
+       0x000001f8,
+       0x8618801b,
+       0x7000000e,
+       0x084cf21f,
+       0xd8990336,
+       0x8019801b,
+       0x040001f8,
+       0x000001f8,
+       0x000001f8,
+};
+
+u32 MCD_SingleNoEu_TDT[] = {
+       0x8198001b,
+       0x7000000d,
+       0x080cf81f,
+       0x8198801b,
+       0x6000000e,
+       0x084cf85f,
+       0x000001f8,
+       0x8298001b,
+       0x7000000d,
+       0x010cf81f,
+       0x6000000e,
+       0x018cf81f,
+       0xc202601b,
+       0xc002221c,
+       0x809a601b,
+       0xc10420c2,
+       0x839be009,
+       0x03fed7b8,
+       0xda9b001b,
+       0x9b9be01b,
+       0x70000006,
+       0x088cf889,
+       0x1000cb28,
+       0x70000006,
+       0x088cf889,
+       0x1000cb30,
+       0x70000006,
+       0x088cf889,
+       0x0000cb38,
+       0x000001f8,
+       0xc202601b,
+       0xc002229c,
+       0x809a601b,
+       0xda9b001b,
+       0x9b9be01b,
+       0x0000d3a0,
+       0xc10420c2,
+       0x839be009,
+       0x0bfed7b8,
+       0xda9b001b,
+       0x9b9be01b,
+       0x70000006,
+       0x088cf889,
+       0x1000cb28,
+       0x70000006,
+       0x088cf889,
+       0x1000cb30,
+       0x70000006,
+       0x088cf889,
+       0x0000cb38,
+       0x000001f8,
+       0xc318022d,
+       0x8018801b,
+       0x040001f8,
+};
+
+#ifdef MCD_INCLUDE_EU
+u32 MCD_ChainEu_TDT[] = {
+       0x80004000,
+       0x8198801b,
+       0xb8c68018,
+       0x10002f10,
+       0x7000000d,
+       0x01ccf89f,
+       0x6000000a,
+       0x080cf89f,
+       0x000001f8,
+       0x981803a4,
+       0x8198801b,
+       0xf8c6801a,
+       0xb8c6e01b,
+       0x10002b10,
+       0x00001318,
+       0xb8c6801d,
+       0x10001710,
+       0x60000007,
+       0x018cf88c,
+       0x98c6801c,
+       0x00000b10,
+       0x98c78018,
+       0x10002310,
+       0x0000c820,
+       0x000001f8,
+       0x8698801b,
+       0x7000000f,
+       0x084cf2df,
+       0xd899042d,
+       0x8019801b,
+       0x60000003,
+       0x2cd7c7df,
+       0xd8990364,
+       0x8019801b,
+       0x60000003,
+       0x2c17c7df,
+       0x000001f8,
+       0xc1c7e018,
+       0xc003a35e,
+       0x819a601b,
+       0xc206a142,
+       0x851be009,
+       0x63fe0000,
+       0x0d4cfddf,
+       0xda9b001b,
+       0x9b9be01b,
+       0x70000002,
+       0x004cf81f,
+       0x1000cb20,
+       0x70000006,
+       0x088cf891,
+       0x1000cb28,
+       0x70000006,
+       0x088cf891,
+       0x1000cb30,
+       0x70000006,
+       0x088cf891,
+       0x1000cb38,
+       0x0000c728,
+       0x000001f8,
+       0xc1c7e018,
+       0xc003a49e,
+       0x819a601b,
+       0xda9b001b,
+       0x9b9be01b,
+       0x0000d3a0,
+       0xc206a142,
+       0x851be009,
+       0x6bfe0000,
+       0x0d4cfddf,
+       0xda9b001b,
+       0x9b9be01b,
+       0x70000002,
+       0x004cf81f,
+       0x1000cb20,
+       0x70000006,
+       0x088cf891,
+       0x1000cb28,
+       0x70000006,
+       0x088cf891,
+       0x1000cb30,
+       0x70000006,
+       0x088cf891,
+       0x1000cb38,
+       0x0000c728,
+       0x000001f8,
+       0x8198801b,
+       0xd8c68018,
+       0x98c6e01c,
+       0x6000000b,
+       0x0c8cfc9f,
+       0x0000cc08,
+       0xa1c6801e,
+       0x10000f08,
+       0x10002458,
+       0xb8c68018,
+       0x10002f10,
+       0x7000000a,
+       0x080cf89f,
+       0x6000000d,
+       0x01ccf89f,
+       0x000001f8,
+       0x8698801b,
+       0x7000000e,
+       0x084cf25f,
+       0xd899037f,
+       0x8019801b,
+       0x040001f8,
+       0x000001f8,
+       0x000001f8,
+};
+
+u32 MCD_SingleEu_TDT[] = {
+       0x8218001b,
+       0x7000000d,
+       0x080cf81f,
+       0x8218801b,
+       0x6000000e,
+       0x084cf85f,
+       0x000001f8,
+       0x8318001b,
+       0x7000000d,
+       0x014cf81f,
+       0x6000000e,
+       0x01ccf81f,
+       0x8498001b,
+       0x7000000f,
+       0x080cf19f,
+       0xd81882a4,
+       0x8019001b,
+       0x60000003,
+       0x2c97c7df,
+       0xd818826d,
+       0x8019001b,
+       0x60000003,
+       0x2c17c7df,
+       0x000001f8,
+       0xc282e01b,
+       0xc002a25e,
+       0x811a601b,
+       0xc184a102,
+       0x841be009,
+       0x63fe0000,
+       0x0d4cfddf,
+       0xda9b001b,
+       0x9b9be01b,
+       0x70000002,
+       0x004cf99f,
+       0x70000006,
+       0x088cf88b,
+       0x1000cb28,
+       0x70000006,
+       0x088cf88b,
+       0x1000cb30,
+       0x70000006,
+       0x088cf88b,
+       0x0000cb38,
+       0x000001f8,
+       0xc282e01b,
+       0xc002a31e,
+       0x811a601b,
+       0xda9b001b,
+       0x9b9be01b,
+       0x0000d3a0,
+       0xc184a102,
+       0x841be009,
+       0x6bfe0000,
+       0x0d4cfddf,
+       0xda9b001b,
+       0x9b9be01b,
+       0x70000002,
+       0x004cf99f,
+       0x70000006,
+       0x088cf88b,
+       0x1000cb28,
+       0x70000006,
+       0x088cf88b,
+       0x1000cb30,
+       0x70000006,
+       0x088cf88b,
+       0x0000cb38,
+       0x000001f8,
+       0x8144801c,
+       0x0000c008,
+       0xc398027f,
+       0x8018801b,
+       0x040001f8,
+};
+#endif
+u32 MCD_ENetRcv_TDT[] = {
+       0x80004000,
+       0x81988000,
+       0x10000788,
+       0x6000000a,
+       0x080cf05f,
+       0x98180209,
+       0x81c40004,
+       0x7000000e,
+       0x010cf05f,
+       0x7000000c,
+       0x01ccf05f,
+       0x70000004,
+       0x014cf049,
+       0x70000004,
+       0x004cf04a,
+       0x00000b88,
+       0xc4030150,
+       0x8119e012,
+       0x03e0cf90,
+       0x81188000,
+       0x000ac788,
+       0xc4030000,
+       0x8199e000,
+       0x70000004,
+       0x084cfc8b,
+       0x60000005,
+       0x0cccf841,
+       0x81c60000,
+       0xc399021b,
+       0x80198000,
+       0x00008400,
+       0x00000f08,
+       0x81988000,
+       0x10000788,
+       0x6000000a,
+       0x080cf05f,
+       0xc2188209,
+       0x80190000,
+       0x040001f8,
+       0x000001f8,
+};
+
+u32 MCD_ENetXmit_TDT[] = {
+       0x80004000,
+       0x81988000,
+       0x10000788,
+       0x6000000a,
+       0x080cf05f,
+       0x98180309,
+       0x80004003,
+       0x81c60004,
+       0x7000000e,
+       0x014cf05f,
+       0x7000000c,
+       0x028cf05f,
+       0x7000000d,
+       0x018cf05f,
+       0x70000004,
+       0x01ccf04d,
+       0x10000b90,
+       0x60000004,
+       0x020cf0a1,
+       0xc3188312,
+       0x83c70000,
+       0x00001f10,
+       0xc583a3c3,
+       0x81042325,
+       0x03e0c798,
+       0xd8990000,
+       0x9999e000,
+       0x000acf98,
+       0xd8992306,
+       0x9999e03f,
+       0x03eac798,
+       0xd8990000,
+       0x9999e000,
+       0x000acf98,
+       0xd8990000,
+       0x99832302,
+       0x0beac798,
+       0x81988000,
+       0x6000000b,
+       0x0c4cfc5f,
+       0x81c80000,
+       0xc5190312,
+       0x80198000,
+       0x00008400,
+       0x00000f08,
+       0x81988000,
+       0x10000788,
+       0x6000000a,
+       0x080cf05f,
+       0xc2988309,
+       0x80190000,
+       0x040001f8,
+       0x000001f8,
+};
+
+#ifdef MCD_INCLUDE_EU
+MCD_bufDesc MCD_singleBufDescs[NCHANNELS];
+#endif
diff --git a/drivers/dma/MCD_tasksInit.c b/drivers/dma/MCD_tasksInit.c
new file mode 100644 (file)
index 0000000..0d28713
--- /dev/null
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+
+/* Functions for initializing variable tables of different types of tasks. */
+
+/*
+ * Do not edit!
+ */
+
+#ifdef CONFIG_FSLDMAFEC
+
+#include <MCD_dma.h>
+
+extern dmaRegs *MCD_dmaBar;
+
+/* Task 0 */
+
+void MCD_startDmaChainNoEu(int *currBD, short srcIncr, short destIncr,
+                          int xferSize, short xferSizeIncr, int *cSave,
+                          volatile TaskTableEntry * taskTable, int channel)
+{
+       volatile TaskTableEntry *taskChan = taskTable + channel;
+
+       MCD_SET_VAR(taskChan, 2, (u32) currBD); /* var[2] */
+       MCD_SET_VAR(taskChan, 25, (u32) (0xe000 << 16) | (0xffff & srcIncr));   /* inc[1] */
+       MCD_SET_VAR(taskChan, 24, (u32) (0xe000 << 16) | (0xffff & destIncr));  /* inc[0] */
+       MCD_SET_VAR(taskChan, 11, (u32) xferSize);      /* var[11] */
+       MCD_SET_VAR(taskChan, 26, (u32) (0x2000 << 16) | (0xffff & xferSizeIncr));      /* inc[2] */
+       MCD_SET_VAR(taskChan, 0, (u32) cSave);  /* var[0] */
+       MCD_SET_VAR(taskChan, 1, (u32) 0x00000000);     /* var[1] */
+       MCD_SET_VAR(taskChan, 3, (u32) 0x00000000);     /* var[3] */
+       MCD_SET_VAR(taskChan, 4, (u32) 0x00000000);     /* var[4] */
+       MCD_SET_VAR(taskChan, 5, (u32) 0x00000000);     /* var[5] */
+       MCD_SET_VAR(taskChan, 6, (u32) 0x00000000);     /* var[6] */
+       MCD_SET_VAR(taskChan, 7, (u32) 0x00000000);     /* var[7] */
+       MCD_SET_VAR(taskChan, 8, (u32) 0x00000000);     /* var[8] */
+       MCD_SET_VAR(taskChan, 9, (u32) 0x00000000);     /* var[9] */
+       MCD_SET_VAR(taskChan, 10, (u32) 0x00000000);    /* var[10] */
+       MCD_SET_VAR(taskChan, 12, (u32) 0x00000000);    /* var[12] */
+       MCD_SET_VAR(taskChan, 13, (u32) 0x80000000);    /* var[13] */
+       MCD_SET_VAR(taskChan, 14, (u32) 0x00000010);    /* var[14] */
+       MCD_SET_VAR(taskChan, 15, (u32) 0x00000004);    /* var[15] */
+       MCD_SET_VAR(taskChan, 16, (u32) 0x08000000);    /* var[16] */
+       MCD_SET_VAR(taskChan, 27, (u32) 0x00000000);    /* inc[3] */
+       MCD_SET_VAR(taskChan, 28, (u32) 0x80000000);    /* inc[4] */
+       MCD_SET_VAR(taskChan, 29, (u32) 0x80000001);    /* inc[5] */
+       MCD_SET_VAR(taskChan, 30, (u32) 0x40000000);    /* inc[6] */
+
+       /* Set the task's Enable bit in its Task Control Register */
+       MCD_dmaBar->taskControl[channel] |= (u16) 0x8000;
+}
+
+/* Task 1 */
+
+void MCD_startDmaSingleNoEu(char *srcAddr, short srcIncr, char *destAddr,
+                           short destIncr, int dmaSize, short xferSizeIncr,
+                           int flags, int *currBD, int *cSave,
+                           volatile TaskTableEntry * taskTable, int channel)
+{
+       volatile TaskTableEntry *taskChan = taskTable + channel;
+
+       MCD_SET_VAR(taskChan, 7, (u32) srcAddr);        /* var[7] */
+       MCD_SET_VAR(taskChan, 25, (u32) (0xe000 << 16) | (0xffff & srcIncr));   /* inc[1] */
+       MCD_SET_VAR(taskChan, 2, (u32) destAddr);       /* var[2] */
+       MCD_SET_VAR(taskChan, 24, (u32) (0xe000 << 16) | (0xffff & destIncr));  /* inc[0] */
+       MCD_SET_VAR(taskChan, 3, (u32) dmaSize);        /* var[3] */
+       MCD_SET_VAR(taskChan, 26, (u32) (0x2000 << 16) | (0xffff & xferSizeIncr));      /* inc[2] */
+       MCD_SET_VAR(taskChan, 5, (u32) flags);  /* var[5] */
+       MCD_SET_VAR(taskChan, 1, (u32) currBD); /* var[1] */
+       MCD_SET_VAR(taskChan, 0, (u32) cSave);  /* var[0] */
+       MCD_SET_VAR(taskChan, 4, (u32) 0x00000000);     /* var[4] */
+       MCD_SET_VAR(taskChan, 6, (u32) 0x00000000);     /* var[6] */
+       MCD_SET_VAR(taskChan, 8, (u32) 0x00000000);     /* var[8] */
+       MCD_SET_VAR(taskChan, 9, (u32) 0x00000004);     /* var[9] */
+       MCD_SET_VAR(taskChan, 10, (u32) 0x08000000);    /* var[10] */
+       MCD_SET_VAR(taskChan, 27, (u32) 0x00000000);    /* inc[3] */
+       MCD_SET_VAR(taskChan, 28, (u32) 0x80000001);    /* inc[4] */
+       MCD_SET_VAR(taskChan, 29, (u32) 0x40000000);    /* inc[5] */
+
+       /* Set the task's Enable bit in its Task Control Register */
+       MCD_dmaBar->taskControl[channel] |= (u16) 0x8000;
+}
+
+/* Task 2 */
+
+void MCD_startDmaChainEu(int *currBD, short srcIncr, short destIncr,
+                        int xferSize, short xferSizeIncr, int *cSave,
+                        volatile TaskTableEntry * taskTable, int channel)
+{
+       volatile TaskTableEntry *taskChan = taskTable + channel;
+
+       MCD_SET_VAR(taskChan, 3, (u32) currBD); /* var[3] */
+       MCD_SET_VAR(taskChan, 25, (u32) (0xe000 << 16) | (0xffff & srcIncr));   /* inc[1] */
+       MCD_SET_VAR(taskChan, 24, (u32) (0xe000 << 16) | (0xffff & destIncr));  /* inc[0] */
+       MCD_SET_VAR(taskChan, 12, (u32) xferSize);      /* var[12] */
+       MCD_SET_VAR(taskChan, 26, (u32) (0x2000 << 16) | (0xffff & xferSizeIncr));      /* inc[2] */
+       MCD_SET_VAR(taskChan, 0, (u32) cSave);  /* var[0] */
+       MCD_SET_VAR(taskChan, 1, (u32) 0x00000000);     /* var[1] */
+       MCD_SET_VAR(taskChan, 2, (u32) 0x00000000);     /* var[2] */
+       MCD_SET_VAR(taskChan, 4, (u32) 0x00000000);     /* var[4] */
+       MCD_SET_VAR(taskChan, 5, (u32) 0x00000000);     /* var[5] */
+       MCD_SET_VAR(taskChan, 6, (u32) 0x00000000);     /* var[6] */
+       MCD_SET_VAR(taskChan, 7, (u32) 0x00000000);     /* var[7] */
+       MCD_SET_VAR(taskChan, 8, (u32) 0x00000000);     /* var[8] */
+       MCD_SET_VAR(taskChan, 9, (u32) 0x00000000);     /* var[9] */
+       MCD_SET_VAR(taskChan, 10, (u32) 0x00000000);    /* var[10] */
+       MCD_SET_VAR(taskChan, 11, (u32) 0x00000000);    /* var[11] */
+       MCD_SET_VAR(taskChan, 13, (u32) 0x00000000);    /* var[13] */
+       MCD_SET_VAR(taskChan, 14, (u32) 0x80000000);    /* var[14] */
+       MCD_SET_VAR(taskChan, 15, (u32) 0x00000010);    /* var[15] */
+       MCD_SET_VAR(taskChan, 16, (u32) 0x00000001);    /* var[16] */
+       MCD_SET_VAR(taskChan, 17, (u32) 0x00000004);    /* var[17] */
+       MCD_SET_VAR(taskChan, 18, (u32) 0x08000000);    /* var[18] */
+       MCD_SET_VAR(taskChan, 27, (u32) 0x00000000);    /* inc[3] */
+       MCD_SET_VAR(taskChan, 28, (u32) 0x80000000);    /* inc[4] */
+       MCD_SET_VAR(taskChan, 29, (u32) 0xc0000000);    /* inc[5] */
+       MCD_SET_VAR(taskChan, 30, (u32) 0x80000001);    /* inc[6] */
+       MCD_SET_VAR(taskChan, 31, (u32) 0x40000000);    /* inc[7] */
+
+       /* Set the task's Enable bit in its Task Control Register */
+       MCD_dmaBar->taskControl[channel] |= (u16) 0x8000;
+}
+
+/* Task 3 */
+
+void MCD_startDmaSingleEu(char *srcAddr, short srcIncr, char *destAddr,
+                         short destIncr, int dmaSize, short xferSizeIncr,
+                         int flags, int *currBD, int *cSave,
+                         volatile TaskTableEntry * taskTable, int channel)
+{
+       volatile TaskTableEntry *taskChan = taskTable + channel;
+
+       MCD_SET_VAR(taskChan, 8, (u32) srcAddr);        /* var[8] */
+       MCD_SET_VAR(taskChan, 25, (u32) (0xe000 << 16) | (0xffff & srcIncr));   /* inc[1] */
+       MCD_SET_VAR(taskChan, 3, (u32) destAddr);       /* var[3] */
+       MCD_SET_VAR(taskChan, 24, (u32) (0xe000 << 16) | (0xffff & destIncr));  /* inc[0] */
+       MCD_SET_VAR(taskChan, 4, (u32) dmaSize);        /* var[4] */
+       MCD_SET_VAR(taskChan, 26, (u32) (0x2000 << 16) | (0xffff & xferSizeIncr));      /* inc[2] */
+       MCD_SET_VAR(taskChan, 6, (u32) flags);  /* var[6] */
+       MCD_SET_VAR(taskChan, 2, (u32) currBD); /* var[2] */
+       MCD_SET_VAR(taskChan, 0, (u32) cSave);  /* var[0] */
+       MCD_SET_VAR(taskChan, 1, (u32) 0x00000000);     /* var[1] */
+       MCD_SET_VAR(taskChan, 5, (u32) 0x00000000);     /* var[5] */
+       MCD_SET_VAR(taskChan, 7, (u32) 0x00000000);     /* var[7] */
+       MCD_SET_VAR(taskChan, 9, (u32) 0x00000000);     /* var[9] */
+       MCD_SET_VAR(taskChan, 10, (u32) 0x00000001);    /* var[10] */
+       MCD_SET_VAR(taskChan, 11, (u32) 0x00000004);    /* var[11] */
+       MCD_SET_VAR(taskChan, 12, (u32) 0x08000000);    /* var[12] */
+       MCD_SET_VAR(taskChan, 27, (u32) 0x00000000);    /* inc[3] */
+       MCD_SET_VAR(taskChan, 28, (u32) 0xc0000000);    /* inc[4] */
+       MCD_SET_VAR(taskChan, 29, (u32) 0x80000000);    /* inc[5] */
+       MCD_SET_VAR(taskChan, 30, (u32) 0x80000001);    /* inc[6] */
+       MCD_SET_VAR(taskChan, 31, (u32) 0x40000000);    /* inc[7] */
+
+       /* Set the task's Enable bit in its Task Control Register */
+       MCD_dmaBar->taskControl[channel] |= (u16) 0x8000;
+}
+
+/* Task 4 */
+
+void MCD_startDmaENetRcv(char *bDBase, char *currBD, char *rcvFifoPtr,
+                        volatile TaskTableEntry * taskTable, int channel)
+{
+       volatile TaskTableEntry *taskChan = taskTable + channel;
+
+       MCD_SET_VAR(taskChan, 0, (u32) bDBase); /* var[0] */
+       MCD_SET_VAR(taskChan, 3, (u32) currBD); /* var[3] */
+       MCD_SET_VAR(taskChan, 6, (u32) rcvFifoPtr);     /* var[6] */
+       MCD_SET_VAR(taskChan, 1, (u32) 0x00000000);     /* var[1] */
+       MCD_SET_VAR(taskChan, 2, (u32) 0x00000000);     /* var[2] */
+       MCD_SET_VAR(taskChan, 4, (u32) 0x00000000);     /* var[4] */
+       MCD_SET_VAR(taskChan, 5, (u32) 0x00000000);     /* var[5] */
+       MCD_SET_VAR(taskChan, 7, (u32) 0x00000000);     /* var[7] */
+       MCD_SET_VAR(taskChan, 8, (u32) 0x00000000);     /* var[8] */
+       MCD_SET_VAR(taskChan, 9, (u32) 0x0000ffff);     /* var[9] */
+       MCD_SET_VAR(taskChan, 10, (u32) 0x30000000);    /* var[10] */
+       MCD_SET_VAR(taskChan, 11, (u32) 0x0fffffff);    /* var[11] */
+       MCD_SET_VAR(taskChan, 12, (u32) 0x00000008);    /* var[12] */
+       MCD_SET_VAR(taskChan, 24, (u32) 0x00000000);    /* inc[0] */
+       MCD_SET_VAR(taskChan, 25, (u32) 0x60000000);    /* inc[1] */
+       MCD_SET_VAR(taskChan, 26, (u32) 0x20000004);    /* inc[2] */
+       MCD_SET_VAR(taskChan, 27, (u32) 0x40000000);    /* inc[3] */
+
+       /* Set the task's Enable bit in its Task Control Register */
+       MCD_dmaBar->taskControl[channel] |= (u16) 0x8000;
+}
+
+/* Task 5 */
+
+void MCD_startDmaENetXmit(char *bDBase, char *currBD, char *xmitFifoPtr,
+                         volatile TaskTableEntry * taskTable, int channel)
+{
+       volatile TaskTableEntry *taskChan = taskTable + channel;
+
+       MCD_SET_VAR(taskChan, 0, (u32) bDBase); /* var[0] */
+       MCD_SET_VAR(taskChan, 3, (u32) currBD); /* var[3] */
+       MCD_SET_VAR(taskChan, 11, (u32) xmitFifoPtr);   /* var[11] */
+       MCD_SET_VAR(taskChan, 1, (u32) 0x00000000);     /* var[1] */
+       MCD_SET_VAR(taskChan, 2, (u32) 0x00000000);     /* var[2] */
+       MCD_SET_VAR(taskChan, 4, (u32) 0x00000000);     /* var[4] */
+       MCD_SET_VAR(taskChan, 5, (u32) 0x00000000);     /* var[5] */
+       MCD_SET_VAR(taskChan, 6, (u32) 0x00000000);     /* var[6] */
+       MCD_SET_VAR(taskChan, 7, (u32) 0x00000000);     /* var[7] */
+       MCD_SET_VAR(taskChan, 8, (u32) 0x00000000);     /* var[8] */
+       MCD_SET_VAR(taskChan, 9, (u32) 0x00000000);     /* var[9] */
+       MCD_SET_VAR(taskChan, 10, (u32) 0x00000000);    /* var[10] */
+       MCD_SET_VAR(taskChan, 12, (u32) 0x00000000);    /* var[12] */
+       MCD_SET_VAR(taskChan, 13, (u32) 0x0000ffff);    /* var[13] */
+       MCD_SET_VAR(taskChan, 14, (u32) 0xffffffff);    /* var[14] */
+       MCD_SET_VAR(taskChan, 15, (u32) 0x00000004);    /* var[15] */
+       MCD_SET_VAR(taskChan, 16, (u32) 0x00000008);    /* var[16] */
+       MCD_SET_VAR(taskChan, 24, (u32) 0x00000000);    /* inc[0] */
+       MCD_SET_VAR(taskChan, 25, (u32) 0x60000000);    /* inc[1] */
+       MCD_SET_VAR(taskChan, 26, (u32) 0x40000000);    /* inc[2] */
+       MCD_SET_VAR(taskChan, 27, (u32) 0xc000fffc);    /* inc[3] */
+       MCD_SET_VAR(taskChan, 28, (u32) 0xe0000004);    /* inc[4] */
+       MCD_SET_VAR(taskChan, 29, (u32) 0x80000000);    /* inc[5] */
+       MCD_SET_VAR(taskChan, 30, (u32) 0x4000ffff);    /* inc[6] */
+       MCD_SET_VAR(taskChan, 31, (u32) 0xe0000001);    /* inc[7] */
+
+       /* Set the task's Enable bit in its Task Control Register */
+       MCD_dmaBar->taskControl[channel] |= (u16) 0x8000;
+}
+
+#endif                 /* CONFIG_FSLDMAFEC */
+
diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile
new file mode 100644 (file)
index 0000000..2dd5a0e
--- /dev/null
@@ -0,0 +1,46 @@
+#
+# (C) Copyright 2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    := $(obj)libdma.a
+
+COBJS-y += MCD_tasksInit.o MCD_dmaApi.o MCD_tasks.o
+
+COBJS  := $(COBJS-y)
+SRCS   := $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+
+all:   $(LIB)
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
index 78cec21fba31f6882daa7626a28bcba2957df789..67521720e7440ce62723d6d3afd176c753e1d899 100644 (file)
@@ -28,6 +28,7 @@ LIB   := $(obj)libmisc.a
 COBJS-y += ali512x.o
 COBJS-y += ns87308.o
 COBJS-y += status_led.o
+COBJS-$(CONFIG_FSL_LAW) += fsl_law.o
 
 COBJS  := $(COBJS-y)
 SRCS   := $(COBJS:.o=.c)
diff --git a/drivers/misc/fsl_law.c b/drivers/misc/fsl_law.c
new file mode 100644 (file)
index 0000000..8bdf5a7
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2008 Freescale Semiconductor, Inc.
+ *
+ * (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
+ */
+
+#include <common.h>
+#include <asm/fsl_law.h>
+#include <asm/io.h>
+
+#define LAWAR_EN       0x80000000
+
+void set_law(u8 idx, phys_addr_t addr, enum law_size sz, enum law_trgt_if id)
+{
+       volatile u32 *base = (volatile u32 *)(CFG_IMMR + 0xc08);
+       volatile u32 *lawbar = base + 8 * idx;
+       volatile u32 *lawar = base + 8 * idx + 2;
+
+       out_be32(lawbar, addr >> 12);
+       out_be32(lawar, LAWAR_EN | ((u32)id << 20) | (u32)sz);
+
+       return ;
+}
+
+void disable_law(u8 idx)
+{
+       volatile u32 *base = (volatile u32 *)(CFG_IMMR + 0xc08);
+       volatile u32 *lawbar = base + 8 * idx;
+       volatile u32 *lawar = base + 8 * idx + 2;
+
+       out_be32(lawar, 0);
+       out_be32(lawbar, 0);
+
+       return;
+}
+
+void init_laws(void)
+{
+       int i;
+       u8 law_idx = 0;
+
+       for (i = 0; i < num_law_entries; i++) {
+               if (law_table[i].index != -1)
+                       law_idx = law_table[i].index;
+
+               set_law(law_idx++, law_table[i].addr,
+                       law_table[i].size, law_table[i].trgt_id);
+       }
+
+       return ;
+}
index 41e1bdeb3bc227513581b66dbc3170d26e3255ce..b9723fa78f20e3fc023dd353a206ed6ec45bc597 100644 (file)
@@ -33,6 +33,7 @@ COBJS-y += dm9000x.o
 COBJS-y += e1000.o
 COBJS-y += eepro100.o
 COBJS-y += enc28j60.o
+COBJS-y += fsl_mcdmafec.o
 COBJS-y += inca-ip_sw.o
 COBJS-y += ks8695eth.o
 COBJS-y += lan91c96.o
diff --git a/drivers/net/fsl_mcdmafec.c b/drivers/net/fsl_mcdmafec.c
new file mode 100644 (file)
index 0000000..0c876f3
--- /dev/null
@@ -0,0 +1,571 @@
+/*
+ * (C) Copyright 2000-2004
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * (C) Copyright 2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <command.h>
+#include <config.h>
+#include <net.h>
+#include <miiphy.h>
+
+#ifdef CONFIG_FSLDMAFEC
+#undef ET_DEBUG
+#undef MII_DEBUG
+
+/* Ethernet Transmit and Receive Buffers */
+#define DBUF_LENGTH            1520
+#define PKT_MAXBUF_SIZE                1518
+#define PKT_MINBUF_SIZE                64
+#define PKT_MAXBLR_SIZE                1536
+#define LAST_PKTBUFSRX         PKTBUFSRX - 1
+#define BD_ENET_RX_W_E         (BD_ENET_RX_WRAP | BD_ENET_RX_EMPTY)
+#define BD_ENET_TX_RDY_LST     (BD_ENET_TX_READY | BD_ENET_TX_LAST)
+#define FIFO_ERRSTAT           (FIFO_STAT_RXW | FIFO_STAT_UF | FIFO_STAT_OF)
+
+/* RxBD bits definitions */
+#define BD_ENET_RX_ERR (BD_ENET_RX_LG | BD_ENET_RX_NO | BD_ENET_RX_CR | \
+                        BD_ENET_RX_OV | BD_ENET_RX_TR)
+
+#if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI)
+#include <asm/immap.h>
+#include <asm/fsl_mcdmafec.h>
+
+#include "MCD_dma.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+struct fec_info_dma fec_info[] = {
+#ifdef CFG_FEC0_IOBASE
+       {
+        0,                     /* index */
+        CFG_FEC0_IOBASE,       /* io base */
+        CFG_FEC0_PINMUX,       /* gpio pin muxing */
+        CFG_FEC0_MIIBASE,      /* mii base */
+        -1,                    /* phy_addr */
+        0,                     /* duplex and speed */
+        0,                     /* phy name */
+        0,                     /* phyname init */
+        0,                     /* RX BD */
+        0,                     /* TX BD */
+        0,                     /* rx Index */
+        0,                     /* tx Index */
+        0,                     /* tx buffer */
+        0,                     /* initialized flag */
+        (struct fec_info_dma *)-1,     /* next */
+        FEC0_RX_TASK,          /* rxTask */
+        FEC0_TX_TASK,          /* txTask */
+        FEC0_RX_PRIORITY,      /* rxPri */
+        FEC0_TX_PRIORITY,      /* txPri */
+        FEC0_RX_INIT,          /* rxInit */
+        FEC0_TX_INIT,          /* txInit */
+        0,                     /* usedTbdIndex */
+        0,                     /* cleanTbdNum */
+        },
+#endif
+#ifdef CFG_FEC1_IOBASE
+       {
+        1,                     /* index */
+        CFG_FEC1_IOBASE,       /* io base */
+        CFG_FEC1_PINMUX,       /* gpio pin muxing */
+        CFG_FEC1_MIIBASE,      /* mii base */
+        -1,                    /* phy_addr */
+        0,                     /* duplex and speed */
+        0,                     /* phy name */
+        0,                     /* phy name init */
+        0,                     /* RX BD */
+        0,                     /* TX BD */
+        0,                     /* rx Index */
+        0,                     /* tx Index */
+        0,                     /* tx buffer */
+        0,                     /* initialized flag */
+        (struct fec_info_dma *)-1,     /* next */
+        FEC1_RX_TASK,          /* rxTask */
+        FEC1_TX_TASK,          /* txTask */
+        FEC1_RX_PRIORITY,      /* rxPri */
+        FEC1_TX_PRIORITY,      /* txPri */
+        FEC1_RX_INIT,          /* rxInit */
+        FEC1_TX_INIT,          /* txInit */
+        0,                     /* usedTbdIndex */
+        0,                     /* cleanTbdNum */
+        }
+#endif
+};
+
+static int fec_send(struct eth_device *dev, volatile void *packet, int length);
+static int fec_recv(struct eth_device *dev);
+static int fec_init(struct eth_device *dev, bd_t * bd);
+static void fec_halt(struct eth_device *dev);
+
+#ifdef ET_DEBUG
+static void dbg_fec_regs(struct eth_device *dev)
+{
+       struct fec_info_dma *info = dev->priv;
+       volatile fecdma_t *fecp = (fecdma_t *) (info->iobase);
+
+       printf("=====\n");
+       printf("ievent       %x - %x\n", (int)&fecp->eir, fecp->eir);
+       printf("imask        %x - %x\n", (int)&fecp->eimr, fecp->eimr);
+       printf("ecntrl       %x - %x\n", (int)&fecp->ecr, fecp->ecr);
+       printf("mii_mframe   %x - %x\n", (int)&fecp->mmfr, fecp->mmfr);
+       printf("mii_speed    %x - %x\n", (int)&fecp->mscr, fecp->mscr);
+       printf("mii_ctrlstat %x - %x\n", (int)&fecp->mibc, fecp->mibc);
+       printf("r_cntrl      %x - %x\n", (int)&fecp->rcr, fecp->rcr);
+       printf("r hash       %x - %x\n", (int)&fecp->rhr, fecp->rhr);
+       printf("x_cntrl      %x - %x\n", (int)&fecp->tcr, fecp->tcr);
+       printf("padr_l       %x - %x\n", (int)&fecp->palr, fecp->palr);
+       printf("padr_u       %x - %x\n", (int)&fecp->paur, fecp->paur);
+       printf("op_pause     %x - %x\n", (int)&fecp->opd, fecp->opd);
+       printf("iadr_u       %x - %x\n", (int)&fecp->iaur, fecp->iaur);
+       printf("iadr_l       %x - %x\n", (int)&fecp->ialr, fecp->ialr);
+       printf("gadr_u       %x - %x\n", (int)&fecp->gaur, fecp->gaur);
+       printf("gadr_l       %x - %x\n", (int)&fecp->galr, fecp->galr);
+       printf("x_wmrk       %x - %x\n", (int)&fecp->tfwr, fecp->tfwr);
+       printf("r_fdata      %x - %x\n", (int)&fecp->rfdr, fecp->rfdr);
+       printf("r_fstat      %x - %x\n", (int)&fecp->rfsr, fecp->rfsr);
+       printf("r_fctrl      %x - %x\n", (int)&fecp->rfcr, fecp->rfcr);
+       printf("r_flrfp      %x - %x\n", (int)&fecp->rlrfp, fecp->rlrfp);
+       printf("r_flwfp      %x - %x\n", (int)&fecp->rlwfp, fecp->rlwfp);
+       printf("r_frfar      %x - %x\n", (int)&fecp->rfar, fecp->rfar);
+       printf("r_frfrp      %x - %x\n", (int)&fecp->rfrp, fecp->rfrp);
+       printf("r_frfwp      %x - %x\n", (int)&fecp->rfwp, fecp->rfwp);
+       printf("t_fdata      %x - %x\n", (int)&fecp->tfdr, fecp->tfdr);
+       printf("t_fstat      %x - %x\n", (int)&fecp->tfsr, fecp->tfsr);
+       printf("t_fctrl      %x - %x\n", (int)&fecp->tfcr, fecp->tfcr);
+       printf("t_flrfp      %x - %x\n", (int)&fecp->tlrfp, fecp->tlrfp);
+       printf("t_flwfp      %x - %x\n", (int)&fecp->tlwfp, fecp->tlwfp);
+       printf("t_ftfar      %x - %x\n", (int)&fecp->tfar, fecp->tfar);
+       printf("t_ftfrp      %x - %x\n", (int)&fecp->tfrp, fecp->tfrp);
+       printf("t_ftfwp      %x - %x\n", (int)&fecp->tfwp, fecp->tfwp);
+       printf("frst         %x - %x\n", (int)&fecp->frst, fecp->frst);
+       printf("ctcwr        %x - %x\n", (int)&fecp->ctcwr, fecp->ctcwr);
+}
+#endif
+
+static void set_fec_duplex_speed(volatile fecdma_t * fecp, bd_t * bd, int dup_spd)
+{
+       if ((dup_spd >> 16) == FULL) {
+               /* Set maximum frame length */
+               fecp->rcr = FEC_RCR_MAX_FL(PKT_MAXBUF_SIZE) | FEC_RCR_MII_MODE |
+                   FEC_RCR_PROM | 0x100;
+               fecp->tcr = FEC_TCR_FDEN;
+       } else {
+               /* Half duplex mode */
+               fecp->rcr = FEC_RCR_MAX_FL(PKT_MAXBUF_SIZE) |
+                   FEC_RCR_MII_MODE | FEC_RCR_DRT;
+               fecp->tcr &= ~FEC_TCR_FDEN;
+       }
+
+       if ((dup_spd & 0xFFFF) == _100BASET) {
+#ifdef MII_DEBUG
+               printf("100Mbps\n");
+#endif
+               bd->bi_ethspeed = 100;
+       } else {
+#ifdef MII_DEBUG
+               printf("10Mbps\n");
+#endif
+               bd->bi_ethspeed = 10;
+       }
+}
+
+static int fec_send(struct eth_device *dev, volatile void *packet, int length)
+{
+       struct fec_info_dma *info = dev->priv;
+       cbd_t *pTbd, *pUsedTbd;
+       u16 phyStatus;
+
+       miiphy_read(dev->name, info->phy_addr, PHY_BMSR, &phyStatus);
+
+       /* process all the consumed TBDs */
+       while (info->cleanTbdNum < CFG_TX_ETH_BUFFER) {
+               pUsedTbd = &info->txbd[info->usedTbdIdx];
+               if (pUsedTbd->cbd_sc & BD_ENET_TX_READY) {
+#ifdef ET_DEBUG
+                       printf("Cannot clean TBD %d, in use\n",
+                              info->cleanTbdNum);
+#endif
+                       return 0;
+               }
+
+               /* clean this buffer descriptor */
+               if (info->usedTbdIdx == (CFG_TX_ETH_BUFFER - 1))
+                       pUsedTbd->cbd_sc = BD_ENET_TX_WRAP;
+               else
+                       pUsedTbd->cbd_sc = 0;
+
+               /* update some indeces for a correct handling of the TBD ring */
+               info->cleanTbdNum++;
+               info->usedTbdIdx = (info->usedTbdIdx + 1) % CFG_TX_ETH_BUFFER;
+       }
+
+       /* Check for valid length of data. */
+       if ((length > 1500) || (length <= 0)) {
+               return -1;
+       }
+
+       /* Check the number of vacant TxBDs. */
+       if (info->cleanTbdNum < 1) {
+               printf("No available TxBDs ...\n");
+               return -1;
+       }
+
+       /* Get the first TxBD to send the mac header */
+       pTbd = &info->txbd[info->txIdx];
+       pTbd->cbd_datlen = length;
+       pTbd->cbd_bufaddr = (u32) packet;
+       pTbd->cbd_sc |= BD_ENET_TX_LAST | BD_ENET_TX_TC | BD_ENET_TX_READY;
+       info->txIdx = (info->txIdx + 1) % CFG_TX_ETH_BUFFER;
+
+       /* Enable DMA transmit task */
+       MCD_continDma(info->txTask);
+
+       info->cleanTbdNum -= 1;
+
+       /* wait until frame is sent . */
+       while (pTbd->cbd_sc & BD_ENET_TX_READY) {
+               udelay(10);
+       }
+
+       return (int)(info->txbd[info->txIdx].cbd_sc & BD_ENET_TX_STATS);
+}
+
+static int fec_recv(struct eth_device *dev)
+{
+       struct fec_info_dma *info = dev->priv;
+       volatile fecdma_t *fecp = (fecdma_t *) (info->iobase);
+
+       cbd_t *pRbd = &info->rxbd[info->rxIdx];
+       u32 ievent;
+       int frame_length, len = 0;
+
+       /* Check if any critical events have happened */
+       ievent = fecp->eir;
+       if (ievent != 0) {
+               fecp->eir = ievent;
+
+               if (ievent & (FEC_EIR_BABT | FEC_EIR_TXERR | FEC_EIR_RXERR)) {
+                       printf("fec_recv: error\n");
+                       fec_halt(dev);
+                       fec_init(dev, NULL);
+                       return 0;
+               }
+
+               if (ievent & FEC_EIR_HBERR) {
+                       /* Heartbeat error */
+                       fecp->tcr |= FEC_TCR_GTS;
+               }
+
+               if (ievent & FEC_EIR_GRA) {
+                       /* Graceful stop complete */
+                       if (fecp->tcr & FEC_TCR_GTS) {
+                               printf("fec_recv: tcr_gts\n");
+                               fec_halt(dev);
+                               fecp->tcr &= ~FEC_TCR_GTS;
+                               fec_init(dev, NULL);
+                       }
+               }
+       }
+
+       if (!(pRbd->cbd_sc & BD_ENET_RX_EMPTY)) {
+               if ((pRbd->cbd_sc & BD_ENET_RX_LAST)
+                   && !(pRbd->cbd_sc & BD_ENET_RX_ERR)
+                   && ((pRbd->cbd_datlen - 4) > 14)) {
+
+                       /* Get buffer address and size */
+                       frame_length = pRbd->cbd_datlen - 4;
+
+                       /* Fill the buffer and pass it to upper layers */
+                       NetReceive((volatile uchar *)pRbd->cbd_bufaddr,
+                                  frame_length);
+                       len = frame_length;
+               }
+
+               /* Reset buffer descriptor as empty */
+               if ((info->rxIdx) == (PKTBUFSRX - 1))
+                       pRbd->cbd_sc = (BD_ENET_RX_WRAP | BD_ENET_RX_EMPTY);
+               else
+                       pRbd->cbd_sc = BD_ENET_RX_EMPTY;
+
+               pRbd->cbd_datlen = PKTSIZE_ALIGN;
+
+               /* Now, we have an empty RxBD, restart the DMA receive task */
+               MCD_continDma(info->rxTask);
+
+               /* Increment BD count */
+               info->rxIdx = (info->rxIdx + 1) % PKTBUFSRX;
+       }
+
+       return len;
+}
+
+static void fec_set_hwaddr(volatile fecdma_t * fecp, u8 * mac)
+{
+       u8 currByte;            /* byte for which to compute the CRC */
+       int byte;               /* loop - counter */
+       int bit;                /* loop - counter */
+       u32 crc = 0xffffffff;   /* initial value */
+
+       for (byte = 0; byte < 6; byte++) {
+               currByte = mac[byte];
+               for (bit = 0; bit < 8; bit++) {
+                       if ((currByte & 0x01) ^ (crc & 0x01)) {
+                               crc >>= 1;
+                               crc = crc ^ 0xedb88320;
+                       } else {
+                               crc >>= 1;
+                       }
+                       currByte >>= 1;
+               }
+       }
+
+       crc = crc >> 26;
+
+       /* Set individual hash table register */
+       if (crc >= 32) {
+               fecp->ialr = (1 << (crc - 32));
+               fecp->iaur = 0;
+       } else {
+               fecp->ialr = 0;
+               fecp->iaur = (1 << crc);
+       }
+
+       /* Set physical address */
+       fecp->palr = (mac[0] << 24) + (mac[1] << 16) + (mac[2] << 8) + mac[3];
+       fecp->paur = (mac[4] << 24) + (mac[5] << 16) + 0x8808;
+
+       /* Clear multicast address hash table */
+       fecp->gaur = 0;
+       fecp->galr = 0;
+}
+
+static int fec_init(struct eth_device *dev, bd_t * bd)
+{
+       struct fec_info_dma *info = dev->priv;
+       volatile fecdma_t *fecp = (fecdma_t *) (info->iobase);
+       int i;
+
+#ifdef ET_DEBUG
+       printf("fec_init: iobase 0x%08x ...\n", info->iobase);
+#endif
+
+       fecpin_setclear(dev, 1);
+
+       fec_halt(dev);
+
+#if defined(CONFIG_CMD_MII) || defined (CONFIG_MII) || \
+       defined (CFG_DISCOVER_PHY)
+
+       mii_init();
+
+       set_fec_duplex_speed(fecp, bd, info->dup_spd);
+#else
+#ifndef CFG_DISCOVER_PHY
+       set_fec_duplex_speed(fecp, bd, (FECDUPLEX << 16) | FECSPEED);
+#endif                         /* ifndef CFG_DISCOVER_PHY */
+#endif                         /* CONFIG_CMD_MII || CONFIG_MII */
+
+       /* We use strictly polling mode only */
+       fecp->eimr = 0;
+
+       /* Clear any pending interrupt */
+       fecp->eir = 0xffffffff;
+
+       /* Set station address   */
+       if ((u32) fecp == CFG_FEC0_IOBASE) {
+               fec_set_hwaddr(fecp, bd->bi_enetaddr);
+       } else {
+               fec_set_hwaddr(fecp, bd->bi_enet1addr);
+       }
+
+       /* Set Opcode/Pause Duration Register */
+       fecp->opd = 0x00010020;
+
+       /* Setup Buffers and Buffer Desriptors */
+       info->rxIdx = 0;
+       info->txIdx = 0;
+
+       /* Setup Receiver Buffer Descriptors (13.14.24.18)
+        * Settings:     Empty, Wrap */
+       for (i = 0; i < PKTBUFSRX; i++) {
+               info->rxbd[i].cbd_sc = BD_ENET_RX_EMPTY;
+               info->rxbd[i].cbd_datlen = PKTSIZE_ALIGN;
+               info->rxbd[i].cbd_bufaddr = (uint) NetRxPackets[i];
+       }
+       info->rxbd[PKTBUFSRX - 1].cbd_sc |= BD_ENET_RX_WRAP;
+
+       /* Setup Ethernet Transmitter Buffer Descriptors (13.14.24.19)
+        * Settings:    Last, Tx CRC */
+       for (i = 0; i < CFG_TX_ETH_BUFFER; i++) {
+               info->txbd[i].cbd_sc = 0;
+               info->txbd[i].cbd_datlen = 0;
+               info->txbd[i].cbd_bufaddr = (uint) (&info->txbuf[0]);
+       }
+       info->txbd[CFG_TX_ETH_BUFFER - 1].cbd_sc |= BD_ENET_TX_WRAP;
+
+       info->usedTbdIdx = 0;
+       info->cleanTbdNum = CFG_TX_ETH_BUFFER;
+
+       /* Set Rx FIFO alarm and granularity value */
+       fecp->rfcr = 0x0c000000;
+       fecp->rfar = 0x0000030c;
+
+       /* Set Tx FIFO granularity value */
+       fecp->tfcr = FIFO_CTRL_FRAME | FIFO_CTRL_GR(6) | 0x00040000;
+       fecp->tfar = 0x00000080;
+
+       fecp->tfwr = 0x2;
+       fecp->ctcwr = 0x03000000;
+
+       /* Enable DMA receive task */
+       MCD_startDma(info->rxTask,      /* Dma channel */
+                    (s8 *) info->rxbd, /*Source Address */
+                    0,         /* Source increment */
+                    (s8 *) (&fecp->rfdr),      /* dest */
+                    4,         /* dest increment */
+                    0,         /* DMA size */
+                    4,         /* xfer size */
+                    info->rxInit,      /* initiator */
+                    info->rxPri,       /* priority */
+                    (MCD_FECRX_DMA | MCD_TT_FLAGS_DEF),        /* Flags */
+                    (MCD_NO_CSUM | MCD_NO_BYTE_SWAP)   /* Function description */
+           );
+
+       /* Enable DMA tx task with no ready buffer descriptors */
+       MCD_startDma(info->txTask,      /* Dma channel */
+                    (s8 *) info->txbd, /*Source Address */
+                    0,         /* Source increment */
+                    (s8 *) (&fecp->tfdr),      /* dest */
+                    4,         /* dest incr */
+                    0,         /* DMA size */
+                    4,         /* xfer size */
+                    info->txInit,      /* initiator */
+                    info->txPri,       /* priority */
+                    (MCD_FECTX_DMA | MCD_TT_FLAGS_DEF),        /* Flags */
+                    (MCD_NO_CSUM | MCD_NO_BYTE_SWAP)   /* Function description */
+           );
+
+       /* Now enable the transmit and receive processing */
+       fecp->ecr |= FEC_ECR_ETHER_EN;
+
+       return 1;
+}
+
+static void fec_halt(struct eth_device *dev)
+{
+       struct fec_info_dma *info = dev->priv;
+       volatile fecdma_t *fecp = (fecdma_t *) (info->iobase);
+       int counter = 0xffff;
+
+       /* issue graceful stop command to the FEC transmitter if necessary */
+       fecp->tcr |= FEC_TCR_GTS;
+
+       /* wait for graceful stop to register */
+       while ((counter--) && (!(fecp->eir & FEC_EIR_GRA))) ;
+
+       /* Disable DMA tasks */
+       MCD_killDma(info->txTask);
+       MCD_killDma(info->rxTask);;
+
+       /* Disable the Ethernet Controller */
+       fecp->ecr &= ~FEC_ECR_ETHER_EN;
+
+       /* Clear FIFO status registers */
+       fecp->rfsr &= FIFO_ERRSTAT;
+       fecp->tfsr &= FIFO_ERRSTAT;
+
+       fecp->frst = 0x01000000;
+
+       /* Issue a reset command to the FEC chip */
+       fecp->ecr |= FEC_ECR_RESET;
+
+       /* wait at least 20 clock cycles */
+       udelay(10000);
+
+#ifdef ET_DEBUG
+       printf("Ethernet task stopped\n");
+#endif
+}
+
+int mcdmafec_initialize(bd_t * bis)
+{
+       struct eth_device *dev;
+       int i;
+
+       for (i = 0; i < sizeof(fec_info) / sizeof(fec_info[0]); i++) {
+
+               dev =
+                   (struct eth_device *)memalign(CFG_CACHELINE_SIZE,
+                                                 sizeof *dev);
+               if (dev == NULL)
+                       hang();
+
+               memset(dev, 0, sizeof(*dev));
+
+               sprintf(dev->name, "FEC%d", fec_info[i].index);
+
+               dev->priv = &fec_info[i];
+               dev->init = fec_init;
+               dev->halt = fec_halt;
+               dev->send = fec_send;
+               dev->recv = fec_recv;
+
+               /* setup Receive and Transmit buffer descriptor */
+               fec_info[i].rxbd =
+                   (cbd_t *) memalign(CFG_CACHELINE_SIZE,
+                                      (PKTBUFSRX * sizeof(cbd_t)));
+               fec_info[i].txbd =
+                   (cbd_t *) memalign(CFG_CACHELINE_SIZE,
+                                      (CFG_TX_ETH_BUFFER * sizeof(cbd_t)));
+               fec_info[i].txbuf =
+                   (char *)memalign(CFG_CACHELINE_SIZE, DBUF_LENGTH);
+
+#ifdef ET_DEBUG
+               printf("rxbd %x txbd %x\n",
+                      (int)fec_info[i].rxbd, (int)fec_info[i].txbd);
+#endif
+
+               fec_info[i].phy_name = (char *)memalign(CFG_CACHELINE_SIZE, 32);
+
+               eth_register(dev);
+
+#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
+               miiphy_register(dev->name,
+                               mcffec_miiphy_read, mcffec_miiphy_write);
+#endif
+
+               if (i > 0)
+                       fec_info[i - 1].next = &fec_info[i];
+       }
+       fec_info[i - 1].next = &fec_info[0];
+
+       /* default speed */
+       bis->bi_ethspeed = 10;
+
+       return 1;
+}
+
+#endif                         /* CONFIG_CMD_NET && CONFIG_NET_MULTI */
+#endif                         /* CONFIG_FSLDMAFEC */
index 4c248054c3eb7f76b1d9917ead2497617f193bf3..097f6841aeeeaa6d018ed737f55a7f7d9283a5f8 100644 (file)
 #if defined(CONFIG_CMD_NET) && defined(CONFIG_NET_MULTI) && \
        defined(CONFIG_RTL8139)
 
-#define TICKS_PER_SEC  CFG_HZ
-#define TICKS_PER_MS   (TICKS_PER_SEC/1000)
-
-#define RTL_TIMEOUT    (1*TICKS_PER_SEC)
+#define RTL_TIMEOUT    100000
 
 #define ETH_FRAME_LEN          1514
 #define ETH_ALEN               6
@@ -392,6 +389,7 @@ static void rtl_reset(struct eth_device *dev)
 #ifdef DEBUG_RX
        printf("rx ring address is %X\n",(unsigned long)rx_ring);
 #endif
+       flush_cache((unsigned long)rx_ring, RX_BUF_LEN);
        outl(phys_to_bus((int)rx_ring), ioaddr + RxBuf);
 
        /* If we add multicast support, the MAR0 register would have to be
@@ -414,9 +412,10 @@ static void rtl_reset(struct eth_device *dev)
 
 static int rtl_transmit(struct eth_device *dev, volatile void *packet, int length)
 {
-       unsigned int status, to;
+       unsigned int status;
        unsigned long txstatus;
        unsigned int len = length;
+       int i = 0;
 
        ioaddr = dev->iobase;
 
@@ -432,12 +431,11 @@ static int rtl_transmit(struct eth_device *dev, volatile void *packet, int lengt
                tx_buffer[len++] = '\0';
        }
 
+       flush_cache((unsigned long)tx_buffer, length);
        outl(phys_to_bus((int)tx_buffer), ioaddr + TxAddr0 + cur_tx*4);
        outl(((TX_FIFO_THRESH<<11) & 0x003f0000) | len,
                ioaddr + TxStatus0 + cur_tx*4);
 
-       to = currticks() + RTL_TIMEOUT;
-
        do {
                status = inw(ioaddr + IntrStatus);
                /* Only acknlowledge interrupt sources we can properly handle
@@ -445,7 +443,8 @@ static int rtl_transmit(struct eth_device *dev, volatile void *packet, int lengt
                 * rtl_poll() function.  */
                outw(status & (TxOK | TxErr | PCIErr), ioaddr + IntrStatus);
                if ((status & (TxOK | TxErr | PCIErr)) != 0) break;
-       } while (currticks() < to);
+               udelay(10);
+       } while (i++ < RTL_TIMEOUT);
 
        txstatus = inl(ioaddr + TxStatus0 + cur_tx*4);
 
@@ -458,8 +457,8 @@ static int rtl_transmit(struct eth_device *dev, volatile void *packet, int lengt
                return length;
        } else {
 #ifdef DEBUG_TX
-               printf("tx timeout/error (%d ticks), status %hX txstatus %X\n",
-                       currticks()-to, status, txstatus);
+               printf("tx timeout/error (%d usecs), status %hX txstatus %X\n",
+                      10*i, status, txstatus);
 #endif
                rtl_reset(dev);
 
@@ -489,7 +488,8 @@ static int rtl_poll(struct eth_device *dev)
 #endif
 
        ring_offs = cur_rx % RX_BUF_LEN;
-       rx_status = *(unsigned int*)KSEG1ADDR((rx_ring + ring_offs));
+       /* ring_offs is guaranteed being 4-byte aligned */
+       rx_status = le32_to_cpu(*(unsigned int *)(rx_ring + ring_offs));
        rx_size = rx_status >> 16;
        rx_status &= 0xffff;
 
@@ -519,6 +519,7 @@ static int rtl_poll(struct eth_device *dev)
                printf("rx packet %d bytes", rx_size-4);
 #endif
        }
+       flush_cache((unsigned long)rx_ring, RX_BUF_LEN);
 
        cur_rx = (cur_rx + rx_size + 4 + 3) & ~3;
        outw(cur_rx - 16, ioaddr + RxBufPtr);
index 25392f6862296c88bbfbf0bba822024cd45cb793..e91d9eadc176f7960c6ee68a33bfd35fef190806 100644 (file)
@@ -241,10 +241,9 @@ int tsec_init(struct eth_device *dev, bd_t * bd)
  * It will wait for the write to be done (or for a timeout to
  * expire) before exiting
  */
-void write_phy_reg(struct tsec_private *priv, uint regnum, uint value)
+void write_any_phy_reg(struct tsec_private *priv, uint phyid, uint regnum, uint value)
 {
        volatile tsec_t *regbase = priv->phyregs;
-       uint phyid = priv->phyaddr;
        int timeout = 1000000;
 
        regbase->miimadd = (phyid << 8) | regnum;
@@ -255,17 +254,19 @@ void write_phy_reg(struct tsec_private *priv, uint regnum, uint value)
        while ((regbase->miimind & MIIMIND_BUSY) && timeout--) ;
 }
 
+/* #define to provide old write_phy_reg functionality without duplicating code */
+#define write_phy_reg(priv, regnum, value) write_any_phy_reg(priv,priv->phyaddr,regnum,value)
+
 /* Reads register regnum on the device's PHY through the
  * registers specified in priv.         It lowers and raises the read
  * command, and waits for the data to become valid (miimind
  * notvalid bit cleared), and the bus to cease activity (miimind
  * busy bit cleared), and then returns the value
  */
-uint read_phy_reg(struct tsec_private *priv, uint regnum)
+uint read_any_phy_reg(struct tsec_private *priv, uint phyid, uint regnum)
 {
        uint value;
        volatile tsec_t *regbase = priv->phyregs;
-       uint phyid = priv->phyaddr;
 
        /* Put the address of the phy, and the register
         * number into MIIMADD */
@@ -288,6 +289,9 @@ uint read_phy_reg(struct tsec_private *priv, uint regnum)
        return value;
 }
 
+/* #define to provide old read_phy_reg functionality without duplicating code */
+#define read_phy_reg(priv,regnum) read_any_phy_reg(priv,priv->phyaddr,regnum)
+
 /* Discover which PHY is attached to the device, and configure it
  * properly.  If the PHY is not recognized, then return 0
  * (failure).  Otherwise, return 1
@@ -571,6 +575,63 @@ uint mii_parse_88E1011_psr(uint mii_reg, struct tsec_private * priv)
        return 0;
 }
 
+/* Parse the RTL8211B's status register for speed and duplex
+ * information
+ */
+uint mii_parse_RTL8211B_sr(uint mii_reg, struct tsec_private * priv)
+{
+       uint speed;
+
+       mii_reg = read_phy_reg(priv, MIIM_RTL8211B_PHY_STATUS);
+       if ((mii_reg & MIIM_RTL8211B_PHYSTAT_LINK) &&
+               !(mii_reg & MIIM_RTL8211B_PHYSTAT_SPDDONE)) {
+               int i = 0;
+
+               puts("Waiting for PHY realtime link");
+               while (!(mii_reg & MIIM_RTL8211B_PHYSTAT_SPDDONE)) {
+                       /* Timeout reached ? */
+                       if (i > PHY_AUTONEGOTIATE_TIMEOUT) {
+                               puts(" TIMEOUT !\n");
+                               priv->link = 0;
+                               break;
+                       }
+
+                       if ((i++ % 1000) == 0) {
+                               putc('.');
+                       }
+                       udelay(1000);   /* 1 ms */
+                       mii_reg = read_phy_reg(priv, MIIM_RTL8211B_PHY_STATUS);
+               }
+               puts(" done\n");
+               udelay(500000); /* another 500 ms (results in faster booting) */
+       } else {
+               if (mii_reg & MIIM_RTL8211B_PHYSTAT_LINK)
+                       priv->link = 1;
+               else
+                       priv->link = 0;
+       }
+
+       if (mii_reg & MIIM_RTL8211B_PHYSTAT_DUPLEX)
+               priv->duplexity = 1;
+       else
+               priv->duplexity = 0;
+
+       speed = (mii_reg & MIIM_RTL8211B_PHYSTAT_SPEED);
+
+       switch (speed) {
+       case MIIM_RTL8211B_PHYSTAT_GBIT:
+               priv->speed = 1000;
+               break;
+       case MIIM_RTL8211B_PHYSTAT_100:
+               priv->speed = 100;
+               break;
+       default:
+               priv->speed = 10;
+       }
+
+       return 0;
+}
+
 /* Parse the cis8201's status register for speed and duplex
  * information
  */
@@ -1361,6 +1422,33 @@ struct phy_info phy_info_dp83865 = {
                           },
 };
 
+struct phy_info phy_info_rtl8211b = {
+       0x001cc91,
+       "RealTek RTL8211B",
+       4,
+       (struct phy_cmd[]){     /* config */
+               /* Reset and configure the PHY */
+               {MIIM_CONTROL, MIIM_CONTROL_RESET, NULL},
+               {MIIM_GBIT_CONTROL, MIIM_GBIT_CONTROL_INIT, NULL},
+               {MIIM_ANAR, MIIM_ANAR_INIT, NULL},
+               {MIIM_CONTROL, MIIM_CONTROL_RESET, NULL},
+               {MIIM_CONTROL, MIIM_CONTROL_INIT, &mii_cr_init},
+               {miim_end,}
+       },
+       (struct phy_cmd[]){     /* startup */
+               /* Status is read once to clear old link state */
+               {MIIM_STATUS, miim_read, NULL},
+               /* Auto-negotiate */
+               {MIIM_STATUS, miim_read, &mii_parse_sr},
+               /* Read the status */
+               {MIIM_RTL8211B_PHY_STATUS, miim_read, &mii_parse_RTL8211B_sr},
+               {miim_end,}
+       },
+       (struct phy_cmd[]){     /* shutdown */
+               {miim_end,}
+       },
+};
+
 struct phy_info *phy_info[] = {
        &phy_info_cis8204,
        &phy_info_cis8201,
@@ -1374,6 +1462,7 @@ struct phy_info *phy_info[] = {
        &phy_info_lxt971,
        &phy_info_VSC8244,
        &phy_info_dp83865,
+       &phy_info_rtl8211b,
        &phy_info_generic,
        NULL
 };
@@ -1497,18 +1586,6 @@ static void relocate_cmds(void)
 #if defined(CONFIG_MII) || defined(CONFIG_CMD_MII) \
        && !defined(BITBANGMII)
 
-struct tsec_private *get_priv_for_phy(unsigned char phyaddr)
-{
-       int i;
-
-       for (i = 0; i < MAXCONTROLLERS; i++) {
-               if (privlist[i]->phyaddr == phyaddr)
-                       return privlist[i];
-       }
-
-       return NULL;
-}
-
 /*
  * Read a MII PHY register.
  *
@@ -1519,14 +1596,14 @@ static int tsec_miiphy_read(char *devname, unsigned char addr,
                            unsigned char reg, unsigned short *value)
 {
        unsigned short ret;
-       struct tsec_private *priv = get_priv_for_phy(addr);
+       struct tsec_private *priv = privlist[0];
 
        if (NULL == priv) {
                printf("Can't read PHY at address %d\n", addr);
                return -1;
        }
 
-       ret = (unsigned short)read_phy_reg(priv, reg);
+       ret = (unsigned short)read_any_phy_reg(priv, addr, reg);
        *value = ret;
 
        return 0;
@@ -1541,14 +1618,14 @@ static int tsec_miiphy_read(char *devname, unsigned char addr,
 static int tsec_miiphy_write(char *devname, unsigned char addr,
                             unsigned char reg, unsigned short value)
 {
-       struct tsec_private *priv = get_priv_for_phy(addr);
+       struct tsec_private *priv = privlist[0];
 
        if (NULL == priv) {
                printf("Can't write PHY at address %d\n", addr);
                return -1;
        }
 
-       write_phy_reg(priv, reg, value);
+       write_any_phy_reg(priv, addr, reg, value);
 
        return 0;
 }
index 2f0092ad59888d6502ca245a0da5634b940f558d..d4dc15a68bf46383c9a1f8f30d9f0f452a592d3c 100644 (file)
 #define MIIM_88E1145_PHY_PAGE   29
 #define MIIM_88E1145_PHY_CAL_OV 30
 
+/* RTL8211B PHY Status Register */
+#define MIIM_RTL8211B_PHY_STATUS       0x11
+#define MIIM_RTL8211B_PHYSTAT_SPEED    0xc000
+#define MIIM_RTL8211B_PHYSTAT_GBIT     0x8000
+#define MIIM_RTL8211B_PHYSTAT_100      0x4000
+#define MIIM_RTL8211B_PHYSTAT_DUPLEX   0x2000
+#define MIIM_RTL8211B_PHYSTAT_SPDDONE  0x0800
+#define MIIM_RTL8211B_PHYSTAT_LINK     0x0400
 
 /* DM9161 Control register values */
 #define MIIM_DM9161_CR_STOP    0x0400
index 6cb25bfbc1aaf732010479f5ef53a452cd35454f..55f37cb55c3007647b07ee136aa3faf94b11a73f 100644 (file)
@@ -40,8 +40,13 @@ static uec_info_t eth1_uec_info = {
                .tx_clock       = CFG_UEC1_TX_CLK,
                .eth_type       = CFG_UEC1_ETH_TYPE,
        },
+#if (CFG_UEC1_ETH_TYPE == FAST_ETH)
+       .num_threads_tx         = UEC_NUM_OF_THREADS_1,
+       .num_threads_rx         = UEC_NUM_OF_THREADS_1,
+#else
        .num_threads_tx         = UEC_NUM_OF_THREADS_4,
        .num_threads_rx         = UEC_NUM_OF_THREADS_4,
+#endif
        .riscTx                 = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
        .riscRx                 = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
        .tx_bd_ring_len         = 16,
@@ -58,8 +63,13 @@ static uec_info_t eth2_uec_info = {
                .tx_clock       = CFG_UEC2_TX_CLK,
                .eth_type       = CFG_UEC2_ETH_TYPE,
        },
+#if (CFG_UEC2_ETH_TYPE == FAST_ETH)
+       .num_threads_tx         = UEC_NUM_OF_THREADS_1,
+       .num_threads_rx         = UEC_NUM_OF_THREADS_1,
+#else
        .num_threads_tx         = UEC_NUM_OF_THREADS_4,
        .num_threads_rx         = UEC_NUM_OF_THREADS_4,
+#endif
        .riscTx                 = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
        .riscRx                 = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
        .tx_bd_ring_len         = 16,
@@ -68,7 +78,6 @@ static uec_info_t eth2_uec_info = {
        .enet_interface         = CFG_UEC2_INTERFACE_MODE,
 };
 #endif
-
 #ifdef CONFIG_UEC_ETH3
 static uec_info_t eth3_uec_info = {
        .uf_info                = {
@@ -77,8 +86,13 @@ static uec_info_t eth3_uec_info = {
                .tx_clock       = CFG_UEC3_TX_CLK,
                .eth_type       = CFG_UEC3_ETH_TYPE,
        },
+#if (CFG_UEC3_ETH_TYPE == FAST_ETH)
+       .num_threads_tx         = UEC_NUM_OF_THREADS_1,
+       .num_threads_rx         = UEC_NUM_OF_THREADS_1,
+#else
        .num_threads_tx         = UEC_NUM_OF_THREADS_4,
        .num_threads_rx         = UEC_NUM_OF_THREADS_4,
+#endif
        .riscTx                 = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
        .riscRx                 = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
        .tx_bd_ring_len         = 16,
@@ -87,6 +101,29 @@ static uec_info_t eth3_uec_info = {
        .enet_interface         = CFG_UEC3_INTERFACE_MODE,
 };
 #endif
+#ifdef CONFIG_UEC_ETH4
+static uec_info_t eth4_uec_info = {
+       .uf_info                = {
+               .ucc_num        = CFG_UEC4_UCC_NUM,
+               .rx_clock       = CFG_UEC4_RX_CLK,
+               .tx_clock       = CFG_UEC4_TX_CLK,
+               .eth_type       = CFG_UEC4_ETH_TYPE,
+       },
+#if (CFG_UEC4_ETH_TYPE == FAST_ETH)
+       .num_threads_tx         = UEC_NUM_OF_THREADS_1,
+       .num_threads_rx         = UEC_NUM_OF_THREADS_1,
+#else
+       .num_threads_tx         = UEC_NUM_OF_THREADS_4,
+       .num_threads_rx         = UEC_NUM_OF_THREADS_4,
+#endif
+       .riscTx                 = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+       .riscRx                 = QE_RISC_ALLOCATION_RISC1_AND_RISC2,
+       .tx_bd_ring_len         = 16,
+       .rx_bd_ring_len         = 16,
+       .phy_address            = CFG_UEC4_PHY_ADDR,
+       .enet_interface         = CFG_UEC4_INTERFACE_MODE,
+};
+#endif
 
 static int uec_mac_enable(uec_private_t *uec, comm_dir_e mode)
 {
@@ -475,6 +512,8 @@ static int init_phy(struct eth_device *dev)
 
        uec->mii_info = mii_info;
 
+       qe_set_mii_clk_src(uec->uec_info->uf_info.ucc_num);
+
        if (init_mii_management_configuration(umii_regs)) {
                printf("%s: The MII Bus is stuck!", dev->name);
                err = -1;
@@ -581,21 +620,12 @@ static void adjust_link(struct eth_device *dev)
 static void phy_change(struct eth_device *dev)
 {
        uec_private_t   *uec = (uec_private_t *)dev->priv;
-       uec_t           *uec_regs;
-       int             result = 0;
-
-       uec_regs = uec->uec_regs;
-
-       /* Delay 5s to give the PHY a chance to change the register state */
-       udelay(5000000);
 
        /* Update the link, speed, duplex */
-       result = uec->mii_info->phyinfo->read_status(uec->mii_info);
+       uec->mii_info->phyinfo->read_status(uec->mii_info);
 
        /* Adjust the interface according to speed */
-       if ((0 == result) || (uec->mii_info->link == 0)) {
-               adjust_link(dev);
-       }
+       adjust_link(dev);
 }
 
 static int uec_set_mac_address(uec_private_t *uec, u8 *mac_addr)
@@ -1120,27 +1150,59 @@ static int uec_startup(uec_private_t *uec)
 static int uec_init(struct eth_device* dev, bd_t *bd)
 {
        uec_private_t           *uec;
-       int                     err;
+       int                     err, i;
+       struct phy_info         *curphy;
 
        uec = (uec_private_t *)dev->priv;
 
        if (uec->the_first_run == 0) {
-               /* Set up the MAC address */
-               if (dev->enetaddr[0] & 0x01) {
-                       printf("%s: MacAddress is multcast address\n",
-                                __FUNCTION__);
-                       return -1;
+               err = init_phy(dev);
+               if (err) {
+                       printf("%s: Cannot initialize PHY, aborting.\n",
+                              dev->name);
+                       return err;
+               }
+
+               curphy = uec->mii_info->phyinfo;
+
+               if (curphy->config_aneg) {
+                       err = curphy->config_aneg(uec->mii_info);
+                       if (err) {
+                               printf("%s: Can't negotiate PHY\n", dev->name);
+                               return err;
+                       }
                }
-               uec_set_mac_address(uec, dev->enetaddr);
+
+               /* Give PHYs up to 5 sec to report a link */
+               i = 50;
+               do {
+                       err = curphy->read_status(uec->mii_info);
+                       udelay(100000);
+               } while (((i-- > 0) && !uec->mii_info->link) || err);
+
+               if (err || i <= 0)
+                       printf("warning: %s: timeout on PHY link\n", dev->name);
+
                uec->the_first_run = 1;
        }
 
+       /* Set up the MAC address */
+       if (dev->enetaddr[0] & 0x01) {
+               printf("%s: MacAddress is multcast address\n",
+                        __FUNCTION__);
+               return -1;
+       }
+       uec_set_mac_address(uec, dev->enetaddr);
+
+
        err = uec_open(uec, COMM_DIR_RX_AND_TX);
        if (err) {
                printf("%s: cannot enable UEC device\n", dev->name);
                return -1;
        }
 
+       phy_change(dev);
+
        return (uec->mii_info->link ? 0 : -1);
 }
 
@@ -1261,6 +1323,10 @@ int uec_initialize(int index)
        } else if (index == 2) {
 #ifdef CONFIG_UEC_ETH3
                uec_info = &eth3_uec_info;
+#endif
+       } else if (index == 3) {
+#ifdef CONFIG_UEC_ETH4
+               uec_info = &eth4_uec_info;
 #endif
        } else {
                printf("%s: index is illegal.\n", __FUNCTION__);
@@ -1289,14 +1355,6 @@ int uec_initialize(int index)
                return err;
        }
 
-       err = init_phy(dev);
-       if (err) {
-               printf("%s: Cannot initialize PHY, aborting.\n", dev->name);
-               return err;
-       }
-
-       phy_change(dev);
-
        return 1;
 }
 #endif /* CONFIG_QE */
index ca6faa6ef4e25cadbd1ddc3d6e13c6150e649438..c549b6bb99cc39b47e3d12fb1b77885c879ef496 100644 (file)
@@ -28,7 +28,6 @@
 
 #if defined(CONFIG_QE)
 
-#define UEC_VERBOSE_DEBUG
 #define ugphy_printk(format, arg...)  \
        printf(format "\n", ## arg)
 
@@ -77,11 +76,10 @@ void uec_write_phy_reg (struct eth_device *dev, int mii_id, int regnum, int valu
 
        /* Setting up the MII Mangement Control Register with the value */
        out_be32 (&ug_regs->miimcon, (u32) value);
+       sync();
 
        /* Wait till MII management write is complete */
        while ((in_be32 (&ug_regs->miimind)) & MIIMIND_BUSY);
-
-       udelay (100000);
 }
 
 /* Reads from register regnum in the PHY for device dev, */
@@ -101,20 +99,21 @@ int uec_read_phy_reg (struct eth_device *dev, int mii_id, int regnum)
        tmp_reg = ((u32) mii_id << MIIMADD_PHY_ADDRESS_SHIFT) | mii_reg;
        out_be32 (&ug_regs->miimadd, tmp_reg);
 
-       /* Perform an MII management read cycle */
+       /* clear MII management command cycle */
        out_be32 (&ug_regs->miimcom, 0);
+       sync();
+
+       /* Perform an MII management read cycle */
        out_be32 (&ug_regs->miimcom, MIIMCOM_READ_CYCLE);
 
        /* Wait till MII management write is complete */
        while ((in_be32 (&ug_regs->miimind)) &
               (MIIMIND_NOT_VALID | MIIMIND_BUSY));
 
-       udelay (100000);
-
        /* Read MII management status  */
        value = (u16) in_be32 (&ug_regs->miimstat);
        if (value == 0xffff)
-               ugphy_warn
+               ugphy_vdbg
                        ("read wrong value : mii_id %d,mii_reg %d, base %08x",
                         mii_id, mii_reg, (u32) & (ug_regs->miimcfg));
 
@@ -270,20 +269,38 @@ static int genmii_update_link (struct uec_mii_info *mii_info)
 {
        u16 status;
 
-       /* Do a fake read */
+       /* Status is read once to clear old link state */
        phy_read (mii_info, PHY_BMSR);
 
-       /* Read link and autonegotiation status */
-       status = phy_read (mii_info, PHY_BMSR);
-       if ((status & PHY_BMSR_LS) == 0)
-               mii_info->link = 0;
-       else
+       /*
+        * Wait if the link is up, and autonegotiation is in progress
+        * (ie - we're capable and it's not done)
+        */
+       status = phy_read(mii_info, PHY_BMSR);
+       if ((status & PHY_BMSR_LS) && (status & PHY_BMSR_AUTN_ABLE)
+           && !(status & PHY_BMSR_AUTN_COMP)) {
+               int i = 0;
+
+               while (!(status & PHY_BMSR_AUTN_COMP)) {
+                       /*
+                        * Timeout reached ?
+                        */
+                       if (i > UGETH_AN_TIMEOUT) {
+                               mii_info->link = 0;
+                               return 0;
+                       }
+
+                       udelay(1000);   /* 1 ms */
+                       status = phy_read(mii_info, PHY_BMSR);
+               }
                mii_info->link = 1;
-
-       /* If we are autonegotiating, and not done,
-        * return an error */
-       if (mii_info->autoneg && !(status & PHY_BMSR_AUTN_COMP))
-               return -EAGAIN;
+               udelay(500000); /* another 500 ms (results in faster booting) */
+       } else {
+               if (status & PHY_BMSR_LS)
+                       mii_info->link = 1;
+               else
+                       mii_info->link = 0;
+       }
 
        return 0;
 }
@@ -389,16 +406,12 @@ static int dm9161_init (struct uec_mii_info *mii_info)
        /* PHY and MAC connect */
        phy_write (mii_info, PHY_BMCR, phy_read (mii_info, PHY_BMCR) &
                   ~PHY_BMCR_ISO);
-#ifdef CONFIG_RMII_MODE
-       phy_write (mii_info, MII_DM9161_SCR, MII_DM9161_SCR_RMII_INIT);
-#else
+
        phy_write (mii_info, MII_DM9161_SCR, MII_DM9161_SCR_INIT);
-#endif
+
        config_genmii_advert (mii_info);
        /* Start/restart aneg */
        genmii_config_aneg (mii_info);
-       /* Delay to wait the aneg compeleted */
-       udelay (3000000);
 
        return 0;
 }
index 00a9b39195184a6f5eb2232235136b1dc3b278b7..70fd23ff0af6d53548d2f0c228dd26100a9bdd29 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * SuperH SCIF device driver.
- * Copyright (c) 2007 Nobuhiro Iwamatsu
+ * Copyright (c) 2007,2008 Nobuhiro Iwamatsu
  *
  * 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
@@ -36,7 +36,7 @@
 #define SCSCR  (vu_short *)(SCIF_BASE + 0x8)
 #define SCFCR  (vu_short *)(SCIF_BASE + 0x18)
 #define SCFDR  (vu_short *)(SCIF_BASE + 0x1C)
-#ifdef CONFIG_SH7720 /* SH7720 specific */
+#ifdef CONFIG_CPU_SH7720 /* SH7720 specific */
 #define SCFSR  (vu_short *)(SCIF_BASE + 0x14)   /* SCSSR */
 #define SCFTDR (vu_char  *)(SCIF_BASE + 0x20)
 #define SCFRDR (vu_char  *)(SCIF_BASE + 0x24)
 #define SCLSR  (vu_short *)(SCIF_BASE + 0x24)
 #define LSR_ORER       1
 #elif defined (CONFIG_SH3)
-#ifdef CONFIG_SH7720 /* SH7720 specific */
-# define SCLSR SCFSR   /* SCSSR */
+#ifdef CONFIG_CPU_SH7720 /* SH7720 specific */
+#define SCLSR   (vu_short *)(SCIF_BASE + 0x24)
+#define LSR_ORER       0x0200
 #else
-# define SCLSR   (vu_short *)(SCIF_BASE + 0x24)
+#define SCLSR  SCFSR   /* SCSSR */
+#define LSR_ORER       1
 #endif
-#define LSR_ORER       0x0200
+#endif
+
+#if defined(CONFIG_CPU_SH7720)
+#define SCBRR_VALUE(bps, clk) (((clk*2)+16*bps)/(32*bps)-1)
+#else  /* Generic SuperH */
+#define SCBRR_VALUE(bps, clk) ((clk+16*bps)/(32*bps)-1)
 #endif
 
 #define SCR_RE                 (1 << 4)
 void serial_setbrg (void)
 {
        DECLARE_GLOBAL_DATA_PTR;
-
-#if defined(CONFIG_CPU_SH7720)
-       int divisor = gd->baudrate * 16;
-
-       *SCBRR = (CONFIG_SYS_CLK_FREQ * 2 + (divisor / 2)) /
-                                               (gd->baudrate * 32) - 1;
-#else
-       int divisor = gd->baudrate * 32;
-
-       *SCBRR = (CONFIG_SYS_CLK_FREQ + (divisor / 2)) /
-                                               (gd->baudrate * 32) - 1;
-#endif
+       *SCBRR = SCBRR_VALUE(gd->baudrate,CONFIG_SYS_CLK_FREQ);
 }
 
 int serial_init (void)
diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
new file mode 100644 (file)
index 0000000..0b7a2df
--- /dev/null
@@ -0,0 +1,46 @@
+#
+# (C) Copyright 2000-2007
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB    := $(obj)libspi.a
+
+COBJS-y += mpc8xxx_spi.o
+
+COBJS  := $(COBJS-y)
+SRCS   := $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+
+all:   $(LIB)
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/drivers/spi/mpc8xxx_spi.c b/drivers/spi/mpc8xxx_spi.c
new file mode 100644 (file)
index 0000000..a3d1c95
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2006 Ben Warren, Qstreams Networks Inc.
+ * With help from the common/soft_spi and cpu/mpc8260 drivers
+ *
+ * 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 <spi.h>
+#include <asm/mpc8xxx_spi.h>
+
+#ifdef CONFIG_HARD_SPI
+
+#define SPI_EV_NE      (0x80000000 >> 22)      /* Receiver Not Empty */
+#define SPI_EV_NF      (0x80000000 >> 23)      /* Transmitter Not Full */
+
+#define SPI_MODE_LOOP  (0x80000000 >> 1)       /* Loopback mode */
+#define SPI_MODE_REV   (0x80000000 >> 5)       /* Reverse mode - MSB first */
+#define SPI_MODE_MS    (0x80000000 >> 6)       /* Always master */
+#define SPI_MODE_EN    (0x80000000 >> 7)       /* Enable interface */
+
+#define SPI_TIMEOUT    1000
+
+void spi_init(void)
+{
+       volatile spi8xxx_t *spi = &((immap_t *) (CFG_IMMR))->spi;
+
+       /*
+        * SPI pins on the MPC83xx are not muxed, so all we do is initialize
+        * some registers
+        */
+       spi->mode = SPI_MODE_REV | SPI_MODE_MS | SPI_MODE_EN;
+       spi->mode = (spi->mode & 0xfff0ffff) | (1 << 16); /* Use SYSCLK / 8
+                                                            (16.67MHz typ.) */
+       spi->event = 0xffffffff;        /* Clear all SPI events */
+       spi->mask = 0x00000000; /* Mask  all SPI interrupts */
+       spi->com = 0;           /* LST bit doesn't do anything, so disregard */
+}
+
+int spi_xfer(spi_chipsel_type chipsel, int bitlen, uchar *dout, uchar *din)
+{
+       volatile spi8xxx_t *spi = &((immap_t *) (CFG_IMMR))->spi;
+       unsigned int tmpdout, tmpdin, event;
+       int numBlks = bitlen / 32 + (bitlen % 32 ? 1 : 0);
+       int tm, isRead = 0;
+       unsigned char charSize = 32;
+
+       debug("spi_xfer: chipsel %08X dout %08X din %08X bitlen %d\n",
+             (int)chipsel, *(uint *) dout, *(uint *) din, bitlen);
+
+       if (chipsel != NULL)
+               (*chipsel) (1); /* select the target chip */
+
+       spi->event = 0xffffffff;        /* Clear all SPI events */
+
+       /* handle data in 32-bit chunks */
+       while (numBlks--) {
+               tmpdout = 0;
+               charSize = (bitlen >= 32 ? 32 : bitlen);
+
+               /* Shift data so it's msb-justified */
+               tmpdout = *(u32 *) dout >> (32 - charSize);
+
+               /* The LEN field of the SPMODE register is set as follows:
+                *
+                * Bit length             setting
+                * len <= 4               3
+                * 4 < len <= 16          len - 1
+                * len > 16               0
+                */
+
+               if (bitlen <= 16) {
+                       if (bitlen <= 4)
+                               spi->mode = (spi->mode & 0xff0fffff) |
+                                           (3 << 20);
+                       else
+                               spi->mode = (spi->mode & 0xff0fffff) |
+                                           ((bitlen - 1) << 20);
+               } else {
+                       spi->mode = (spi->mode & 0xff0fffff);
+                       /* Set up the next iteration if sending > 32 bits */
+                       bitlen -= 32;
+                       dout += 4;
+               }
+
+               spi->tx = tmpdout;      /* Write the data out */
+               debug("*** spi_xfer: ... %08x written\n", tmpdout);
+
+               /*
+                * Wait for SPI transmit to get out
+                * or time out (1 second = 1000 ms)
+                * The NE event must be read and cleared first
+                */
+               for (tm = 0, isRead = 0; tm < SPI_TIMEOUT; ++tm) {
+                       event = spi->event;
+                       if (event & SPI_EV_NE) {
+                               tmpdin = spi->rx;
+                               spi->event |= SPI_EV_NE;
+                               isRead = 1;
+
+                               *(u32 *) din = (tmpdin << (32 - charSize));
+                               if (charSize == 32) {
+                                       /* Advance output buffer by 32 bits */
+                                       din += 4;
+                               }
+                       }
+                       /*
+                        * Only bail when we've had both NE and NF events.
+                        * This will cause timeouts on RO devices, so maybe
+                        * in the future put an arbitrary delay after writing
+                        * the device.  Arbitrary delays suck, though...
+                        */
+                       if (isRead && (event & SPI_EV_NF))
+                               break;
+               }
+               if (tm >= SPI_TIMEOUT)
+                       puts("*** spi_xfer: Time out during SPI transfer");
+
+               debug("*** spi_xfer: transfer ended. Value=%08x\n", tmpdin);
+       }
+
+       if (chipsel != NULL)
+               (*chipsel) (0); /* deselect the target chip */
+
+       return 0;
+}
+#endif                         /* CONFIG_HARD_SPI */
diff --git a/include/MCD_dma.h b/include/MCD_dma.h
new file mode 100644 (file)
index 0000000..2d6bc00
--- /dev/null
@@ -0,0 +1,386 @@
+/*
+ * Copyright (C) 2004-2007 Freescale Semiconductor, 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
+ */
+
+#ifndef _MCD_API_H
+#define _MCD_API_H
+
+/* Turn Execution Unit tasks ON (#define) or OFF (#undef) */
+#undef MCD_INCLUDE_EU
+
+/* Number of DMA channels */
+#define NCHANNELS      16
+
+/* Total number of variants */
+#ifdef MCD_INCLUDE_EU
+#define NUMOFVARIANTS  6
+#else
+#define NUMOFVARIANTS  4
+#endif
+
+/* Define sizes of the various tables */
+#define TASK_TABLE_SIZE                (NCHANNELS*32)
+#define VAR_TAB_SIZE           (128)
+#define CONTEXT_SAVE_SIZE      (128)
+#define FUNCDESC_TAB_SIZE      (256)
+
+#ifdef MCD_INCLUDE_EU
+#define FUNCDESC_TAB_NUM       16
+#else
+#define FUNCDESC_TAB_NUM       1
+#endif
+
+#ifndef DEFINESONLY
+
+/* Portability typedefs */
+#if 1
+#include "common.h"
+#else
+#ifndef s32
+typedef int s32;
+#endif
+#ifndef u32
+typedef unsigned int u32;
+#endif
+#ifndef s16
+typedef short s16;
+#endif
+#ifndef u16
+typedef unsigned short u16;
+#endif
+#ifndef s8
+typedef char s8;
+#endif
+#ifndef u8
+typedef unsigned char u8;
+#endif
+#endif
+
+/*
+ * These structures represent the internal registers of the
+ * multi-channel DMA
+ */
+struct dmaRegs_s {
+       u32 taskbar;            /* task table base address */
+       u32 currPtr;
+       u32 endPtr;
+       u32 varTablePtr;
+       u16 dma_rsvd0;
+       u16 ptdControl;         /* ptd control */
+       u32 intPending;         /* interrupt pending */
+       u32 intMask;            /* interrupt mask */
+       u16 taskControl[16];    /* task control */
+       u8 priority[32];        /* priority */
+       u32 initiatorMux;       /* initiator mux control */
+       u32 taskSize0;          /* task size control 0. */
+       u32 taskSize1;          /* task size control 1. */
+       u32 dma_rsvd1;          /* reserved */
+       u32 dma_rsvd2;          /* reserved */
+       u32 debugComp1;         /* debug comparator 1 */
+       u32 debugComp2;         /* debug comparator 2 */
+       u32 debugControl;       /* debug control */
+       u32 debugStatus;        /* debug status */
+       u32 ptdDebug;           /* priority task decode debug */
+       u32 dma_rsvd3[31];      /* reserved */
+};
+typedef volatile struct dmaRegs_s dmaRegs;
+
+#endif
+
+/* PTD contrl reg bits */
+#define PTD_CTL_TSK_PRI                0x8000
+#define PTD_CTL_COMM_PREFETCH  0x0001
+
+/* Task Control reg bits and field masks */
+#define TASK_CTL_EN            0x8000
+#define TASK_CTL_VALID         0x4000
+#define TASK_CTL_ALWAYS                0x2000
+#define TASK_CTL_INIT_MASK     0x1f00
+#define TASK_CTL_ASTRT         0x0080
+#define TASK_CTL_HIPRITSKEN    0x0040
+#define TASK_CTL_HLDINITNUM    0x0020
+#define TASK_CTL_ASTSKNUM_MASK 0x000f
+
+/* Priority reg bits and field masks */
+#define PRIORITY_HLD           0x80
+#define PRIORITY_PRI_MASK      0x07
+
+/* Debug Control reg bits and field masks */
+#define DBG_CTL_BLOCK_TASKS_MASK       0xffff0000
+#define DBG_CTL_AUTO_ARM               0x00008000
+#define DBG_CTL_BREAK                  0x00004000
+#define DBG_CTL_COMP1_TYP_MASK         0x00003800
+#define DBG_CTL_COMP2_TYP_MASK         0x00000070
+#define DBG_CTL_EXT_BREAK              0x00000004
+#define DBG_CTL_INT_BREAK              0x00000002
+
+/*
+ * PTD Debug reg selector addresses
+ * This reg must be written with a value to show the contents of
+ * one of the desired internal register.
+ */
+#define PTD_DBG_REQ            0x00    /* shows the state of 31 initiators */
+#define PTD_DBG_TSK_VLD_INIT   0x01    /* shows which 16 tasks are valid and
+                                          have initiators asserted */
+
+/* General return values */
+#define MCD_OK                 0
+#define MCD_ERROR              -1
+#define MCD_TABLE_UNALIGNED    -2
+#define MCD_CHANNEL_INVALID    -3
+
+/* MCD_initDma input flags */
+#define MCD_RELOC_TASKS                0x00000001
+#define MCD_NO_RELOC_TASKS     0x00000000
+#define MCD_COMM_PREFETCH_EN   0x00000002      /* MCF547x/548x ONLY */
+
+/*
+ * MCD_dmaStatus Status Values for each channel:
+ * MCD_NO_DMA  - No DMA has been requested since reset
+ * MCD_IDLE    - DMA active, but the initiator is currently inactive
+ * MCD_RUNNING - DMA active, and the initiator is currently active
+ * MCD_PAUSED  - DMA active but it is currently paused
+ * MCD_HALTED  - the most recent DMA has been killed with MCD_killTask()
+ * MCD_DONE    - the most recent DMA has completed
+ */
+#define MCD_NO_DMA             1
+#define MCD_IDLE               2
+#define MCD_RUNNING            3
+#define MCD_PAUSED             4
+#define MCD_HALTED             5
+#define MCD_DONE               6
+
+/* MCD_startDma parameter defines */
+
+/* Constants for the funcDesc parameter */
+/*
+ * MCD_NO_BYTE_SWAP    - to disable byte swapping
+ * MCD_BYTE_REVERSE    - to reverse the bytes of each u32 of the DMAed data
+ * MCD_U16_REVERSE     - to reverse the 16-bit halves of each 32-bit data
+ *                       value being DMAed
+ * MCD_U16_BYTE_REVERSE        - to reverse the byte halves of each 16-bit half of
+ *                       each 32-bit data value DMAed
+ * MCD_NO_BIT_REV      - do not reverse the bits of each byte DMAed
+ * MCD_BIT_REV         - reverse the bits of each byte DMAed
+ * MCD_CRC16           - to perform CRC-16 on DMAed data
+ * MCD_CRCCCITT                - to perform CRC-CCITT on DMAed data
+ * MCD_CRC32           - to perform CRC-32 on DMAed data
+ * MCD_CSUMINET                - to perform internet checksums on DMAed data
+ * MCD_NO_CSUM         - to perform no checksumming
+ */
+#define MCD_NO_BYTE_SWAP       0x00045670
+#define MCD_BYTE_REVERSE       0x00076540
+#define MCD_U16_REVERSE                0x00067450
+#define MCD_U16_BYTE_REVERSE   0x00054760
+#define MCD_NO_BIT_REV         0x00000000
+#define MCD_BIT_REV            0x00088880
+/* CRCing: */
+#define MCD_CRC16              0xc0100000
+#define MCD_CRCCCITT           0xc0200000
+#define MCD_CRC32              0xc0300000
+#define MCD_CSUMINET           0xc0400000
+#define MCD_NO_CSUM            0xa0000000
+
+#define MCD_FUNC_NOEU1         (MCD_NO_BYTE_SWAP | MCD_NO_BIT_REV | \
+                                MCD_NO_CSUM)
+#define MCD_FUNC_NOEU2         (MCD_NO_BYTE_SWAP | MCD_NO_CSUM)
+
+/* Constants for the flags parameter */
+#define MCD_TT_FLAGS_RL                0x00000001      /* Read line */
+#define MCD_TT_FLAGS_CW                0x00000002      /* Combine Writes */
+#define MCD_TT_FLAGS_SP                0x00000004      /* MCF547x/548x ONLY  */
+#define MCD_TT_FLAGS_MASK      0x000000ff
+#define MCD_TT_FLAGS_DEF       (MCD_TT_FLAGS_RL | MCD_TT_FLAGS_CW)
+
+#define MCD_SINGLE_DMA         0x00000100      /* Unchained DMA */
+#define MCD_CHAIN_DMA          /* TBD */
+#define MCD_EU_DMA             /* TBD */
+#define MCD_FECTX_DMA          0x00001000      /* FEC TX ring DMA */
+#define MCD_FECRX_DMA          0x00002000      /* FEC RX ring DMA */
+
+/* these flags are valid for MCD_startDma and the chained buffer descriptors */
+/*
+ * MCD_BUF_READY       - indicates that this buf is now under the DMA's ctrl
+ * MCD_WRAP            - to tell the FEC Dmas to wrap to the first BD
+ * MCD_INTERRUPT       - to generate an interrupt after completion of the DMA
+ * MCD_END_FRAME       - tell the DMA to end the frame when transferring
+ *                       last byte of data in buffer
+ * MCD_CRC_RESTART     - to empty out the accumulated checksum prior to
+ *                       performing the DMA
+ */
+#define MCD_BUF_READY          0x80000000
+#define MCD_WRAP               0x20000000
+#define MCD_INTERRUPT          0x10000000
+#define MCD_END_FRAME          0x08000000
+#define MCD_CRC_RESTART                0x40000000
+
+/* Defines for the FEC buffer descriptor control/status word*/
+#define MCD_FEC_BUF_READY      0x8000
+#define MCD_FEC_WRAP           0x2000
+#define MCD_FEC_INTERRUPT      0x1000
+#define MCD_FEC_END_FRAME      0x0800
+
+/* Defines for general intuitiveness */
+
+#define MCD_TRUE               1
+#define MCD_FALSE              0
+
+/* Three different cases for destination and source. */
+#define MINUS1                 -1
+#define ZERO                   0
+#define PLUS1                  1
+
+#ifndef DEFINESONLY
+
+/* Task Table Entry struct*/
+typedef struct {
+       u32 TDTstart;           /* task descriptor table start */
+       u32 TDTend;             /* task descriptor table end */
+       u32 varTab;             /* variable table start */
+       u32 FDTandFlags;        /* function descriptor table start & flags */
+       volatile u32 descAddrAndStatus;
+       volatile u32 modifiedVarTab;
+       u32 contextSaveSpace;   /* context save space start */
+       u32 literalBases;
+} TaskTableEntry;
+
+/* Chained buffer descriptor:
+ * flags       - flags describing the DMA
+ * csumResult  - checksum performed since last checksum reset
+ * srcAddr     - the address to move data from
+ * destAddr    - the address to move data to
+ * lastDestAddr        - the last address written to
+ * dmaSize     - the no of bytes to xfer independent of the xfer sz
+ * next                - next buffer descriptor in chain
+ * info                - private info about this descriptor;  DMA does not affect it
+ */
+typedef volatile struct MCD_bufDesc_struct MCD_bufDesc;
+struct MCD_bufDesc_struct {
+       u32 flags;
+       u32 csumResult;
+       s8 *srcAddr;
+       s8 *destAddr;
+       s8 *lastDestAddr;
+       u32 dmaSize;
+       MCD_bufDesc *next;
+       u32 info;
+};
+
+/* Progress Query struct:
+ * lastSrcAddr - the most-recent or last, post-increment source address
+ * lastDestAddr        - the most-recent or last, post-increment destination address
+ * dmaSize     - the amount of data transferred for the current buffer
+ * currBufDesc - pointer to the current buffer descriptor being DMAed
+ */
+
+typedef volatile struct MCD_XferProg_struct {
+       s8 *lastSrcAddr;
+       s8 *lastDestAddr;
+       u32 dmaSize;
+       MCD_bufDesc *currBufDesc;
+} MCD_XferProg;
+
+/* FEC buffer descriptor */
+typedef volatile struct MCD_bufDescFec_struct {
+       u16 statCtrl;
+       u16 length;
+       u32 dataPointer;
+} MCD_bufDescFec;
+
+/*************************************************************************/
+/* API function Prototypes  - see MCD_dmaApi.c for further notes */
+
+/* MCD_startDma starts a particular kind of DMA:
+ * srcAddr     - the channel on which to run the DMA
+ * srcIncr     - the address to move data from, or buffer-descriptor address
+ * destAddr    - the amount to increment the source address per transfer
+ * destIncr    - the address to move data to
+ * dmaSize     - the amount to increment the destination address per transfer
+ * xferSize    - the number bytes in of each data movement (1, 2, or 4)
+ * initiator   - what device initiates the DMA
+ * priority    - priority of the DMA
+ * flags       - flags describing the DMA
+ * funcDesc    - description of byte swapping, bit swapping, and CRC actions
+ */
+int MCD_startDma(int channel, s8 * srcAddr, s16 srcIncr, s8 * destAddr,
+                s16 destIncr, u32 dmaSize, u32 xferSize, u32 initiator,
+                int priority, u32 flags, u32 funcDesc);
+
+/*
+ * MCD_initDma() initializes the DMA API by setting up a pointer to the DMA
+ * registers, relocating and creating the appropriate task structures, and
+ * setting up some global settings
+ */
+int MCD_initDma(dmaRegs * sDmaBarAddr, void *taskTableDest, u32 flags);
+
+/* MCD_dmaStatus() returns the status of the DMA on the requested channel. */
+int MCD_dmaStatus(int channel);
+
+/* MCD_XferProgrQuery() returns progress of DMA on requested channel */
+int MCD_XferProgrQuery(int channel, MCD_XferProg * progRep);
+
+/*
+ * MCD_killDma() halts the DMA on the requested channel, without any
+ * intention of resuming the DMA.
+ */
+int MCD_killDma(int channel);
+
+/*
+ * MCD_continDma() continues a DMA which as stopped due to encountering an
+ * unready buffer descriptor.
+ */
+int MCD_continDma(int channel);
+
+/*
+ * MCD_pauseDma() pauses the DMA on the given channel ( if any DMA is
+ * running on that channel).
+ */
+int MCD_pauseDma(int channel);
+
+/*
+ * MCD_resumeDma() resumes the DMA on a given channel (if any DMA is
+ * running on that channel).
+ */
+int MCD_resumeDma(int channel);
+
+/* MCD_csumQuery provides the checksum/CRC after performing a non-chained DMA */
+int MCD_csumQuery(int channel, u32 * csum);
+
+/*
+ * MCD_getCodeSize provides the packed size required by the microcoded task
+ * and structures.
+ */
+int MCD_getCodeSize(void);
+
+/*
+ * MCD_getVersion provides a pointer to a version string and returns a
+ * version number.
+ */
+int MCD_getVersion(char **longVersion);
+
+/* macro for setting a location in the variable table */
+#define MCD_SET_VAR(taskTab,idx,value) ((u32 *)(taskTab)->varTab)[idx] = value
+/* Note that MCD_SET_VAR() is invoked many times in firing up a DMA function,
+   so I'm avoiding surrounding it with "do {} while(0)" */
+
+#endif                         /* DEFINESONLY */
+
+#endif                         /* _MCD_API_H */
diff --git a/include/MCD_progCheck.h b/include/MCD_progCheck.h
new file mode 100644 (file)
index 0000000..55f7574
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2004-2007 Freescale Semiconductor, 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
+ */
+
+ /* This file is autogenerated. Do not change */
+#define CURRBD         4
+#define DCOUNT         6
+#define DESTPTR                5
+#define SRCPTR         7
diff --git a/include/MCD_tasksInit.h b/include/MCD_tasksInit.h
new file mode 100644 (file)
index 0000000..684d5aa
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2004-2007 Freescale Semiconductor, 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
+ */
+
+#ifndef MCD_TSK_INIT_H
+#define MCD_TSK_INIT_H 1
+
+/*
+ * Do not edit!
+ */
+
+/* Task 0 */
+void MCD_startDmaChainNoEu(int *currBD, short srcIncr, short destIncr,
+                          int xferSize, short xferSizeIncr, int *cSave,
+                          volatile TaskTableEntry * taskTable, int channel);
+
+/* Task 1 */
+void MCD_startDmaSingleNoEu(char *srcAddr, short srcIncr, char *destAddr,
+                           short destIncr, int dmaSize, short xferSizeIncr,
+                           int flags, int *currBD, int *cSave,
+                           volatile TaskTableEntry * taskTable, int channel);
+
+/* Task 2 */
+void MCD_startDmaChainEu(int *currBD, short srcIncr, short destIncr,
+                        int xferSize, short xferSizeIncr, int *cSave,
+                        volatile TaskTableEntry * taskTable, int channel);
+
+/* Task 3 */
+void MCD_startDmaSingleEu(char *srcAddr, short srcIncr, char *destAddr,
+                         short destIncr, int dmaSize, short xferSizeIncr,
+                         int flags, int *currBD, int *cSave,
+                         volatile TaskTableEntry * taskTable, int channel);
+
+/* Task 4 */
+void MCD_startDmaENetRcv(char *bDBase, char *currBD, char *rcvFifoPtr,
+                        volatile TaskTableEntry * taskTable, int channel);
+
+/* Task 5 */
+void MCD_startDmaENetXmit(char *bDBase, char *currBD, char *xmitFifoPtr,
+                         volatile TaskTableEntry * taskTable, int channel);
+
+#endif                         /* MCD_TSK_INIT_H */
diff --git a/include/asm-m68k/coldfire/crossbar.h b/include/asm-m68k/coldfire/crossbar.h
new file mode 100644 (file)
index 0000000..a9c724c
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ * Cross Bar Switch Internal Memory Map
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CROSSBAR_H__
+#define __CROSSBAR_H__
+
+/*********************************************************************
+* Cross-bar switch (XBS)
+*********************************************************************/
+typedef struct xbs {
+       u32 prs1;               /* 0x100 Priority Register Slave 1 */
+       u32 res1[3];            /* 0x104 - 0F */
+       u32 crs1;               /* 0x110 Control Register Slave 1 */
+       u32 res2[187];          /* 0x114 - 0x3FF */
+
+       u32 prs4;               /* 0x400 Priority Register Slave 4 */
+       u32 res3[3];            /* 0x404 - 0F */
+       u32 crs4;               /* 0x410 Control Register Slave 4 */
+       u32 res4[123];          /* 0x414 - 0x5FF */
+
+       u32 prs6;               /* 0x600 Priority Register Slave 6 */
+       u32 res5[3];            /* 0x604 - 0F */
+       u32 crs6;               /* 0x610 Control Register Slave 6 */
+       u32 res6[59];           /* 0x614 - 0x6FF */
+
+       u32 prs7;               /* 0x700 Priority Register Slave 7 */
+       u32 res7[3];            /* 0x704 - 0F */
+       u32 crs7;               /* 0x710 Control Register Slave 7 */
+} xbs_t;
+
+/* Bit definitions and macros for PRS group */
+#define XBS_PRS_M0(x)                  (((x)&0x00000007))      /* Core */
+#define XBS_PRS_M1(x)                  (((x)&0x00000007)<<4)   /* eDMA */
+#define XBS_PRS_M2(x)                  (((x)&0x00000007)<<8)   /* FEC0 */
+#define XBS_PRS_M3(x)                  (((x)&0x00000007)<<12)  /* FEC1 */
+#define XBS_PRS_M5(x)                  (((x)&0x00000007)<<20)  /* PCI controller */
+#define XBS_PRS_M6(x)                  (((x)&0x00000007)<<24)  /* USB OTG */
+#define XBS_PRS_M7(x)                  (((x)&0x00000007)<<28)  /* Serial Boot */
+
+/* Bit definitions and macros for CRS group */
+#define XBS_CRS_PARK(x)                        (((x)&0x00000007))      /* Master parking ctrl */
+#define XBS_CRS_PCTL(x)                        (((x)&0x00000003)<<4)   /* Parking mode ctrl */
+#define XBS_CRS_ARB                    (0x00000100)    /* Arbitration Mode */
+#define XBS_CRS_RO                     (0x80000000)    /* Read Only */
+
+#define XBS_CRS_PCTL_PARK_FIELD                (0)
+#define XBS_CRS_PCTL_PARK_ON_LAST      (1)
+#define XBS_CRS_PCTL_PARK_NONE         (2)
+#define XBS_CRS_PCTL_PARK_CORE         (0)
+#define XBS_CRS_PCTL_PARK_EDMA         (1)
+#define XBS_CRS_PCTL_PARK_FEC0         (2)
+#define XBS_CRS_PCTL_PARK_FEC1         (3)
+#define XBS_CRS_PCTL_PARK_PCI          (5)
+#define XBS_CRS_PCTL_PARK_USB          (6)
+#define XBS_CRS_PCTL_PARK_SBF          (7)
+
+#endif                         /* __CROSSBAR_H__ */
diff --git a/include/asm-m68k/coldfire/dspi.h b/include/asm-m68k/coldfire/dspi.h
new file mode 100644 (file)
index 0000000..3c579d3
--- /dev/null
@@ -0,0 +1,156 @@
+/*
+ * MCF5227x Internal Memory Map
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __DSPI_H__
+#define __DSPI_H__
+
+/*********************************************************************
+* DMA Serial Peripheral Interface (DSPI)
+*********************************************************************/
+
+typedef struct dspi {
+       u32 dmcr;
+       u8 resv0[0x4];
+       u32 dtcr;
+       u32 dctar0;
+       u32 dctar1;
+       u32 dctar2;
+       u32 dctar3;
+       u32 dctar4;
+       u32 dctar5;
+       u32 dctar6;
+       u32 dctar7;
+       u32 dsr;
+       u32 dirsr;
+       u32 dtfr;
+       u32 drfr;
+       u32 dtfdr0;
+       u32 dtfdr1;
+       u32 dtfdr2;
+       u32 dtfdr3;
+       u8 resv1[0x30];
+       u32 drfdr0;
+       u32 drfdr1;
+       u32 drfdr2;
+       u32 drfdr3;
+} dspi_t;
+
+/* Bit definitions and macros for DMCR */
+#define DSPI_DMCR_HALT                 (0x00000001)
+#define DSPI_DMCR_SMPL_PT(x)           (((x)&0x00000003)<<8)
+#define DSPI_DMCR_CRXF                 (0x00000400)
+#define DSPI_DMCR_CTXF                 (0x00000800)
+#define DSPI_DMCR_DRXF                 (0x00001000)
+#define DSPI_DMCR_DTXF                 (0x00002000)
+#define DSPI_DMCR_CSIS0                        (0x00010000)
+#define DSPI_DMCR_CSIS2                        (0x00040000)
+#define DSPI_DMCR_CSIS3                        (0x00080000)
+#define DSPI_DMCR_CSIS5                        (0x00200000)
+#define DSPI_DMCR_ROOE                 (0x01000000)
+#define DSPI_DMCR_PCSSE                        (0x02000000)
+#define DSPI_DMCR_MTFE                 (0x04000000)
+#define DSPI_DMCR_FRZ                  (0x08000000)
+#define DSPI_DMCR_DCONF(x)             (((x)&0x00000003)<<28)
+#define DSPI_DMCR_CSCK                 (0x40000000)
+#define DSPI_DMCR_MSTR                 (0x80000000)
+
+/* Bit definitions and macros for DTCR */
+#define DSPI_DTCR_SPI_TCNT(x)          (((x)&0x0000FFFF)<<16)
+
+/* Bit definitions and macros for DCTAR group */
+#define DSPI_DCTAR_BR(x)               (((x)&0x0000000F))
+#define DSPI_DCTAR_DT(x)               (((x)&0x0000000F)<<4)
+#define DSPI_DCTAR_ASC(x)              (((x)&0x0000000F)<<8)
+#define DSPI_DCTAR_CSSCK(x)            (((x)&0x0000000F)<<12)
+#define DSPI_DCTAR_PBR(x)              (((x)&0x00000003)<<16)
+#define DSPI_DCTAR_PDT(x)              (((x)&0x00000003)<<18)
+#define DSPI_DCTAR_PASC(x)             (((x)&0x00000003)<<20)
+#define DSPI_DCTAR_PCSSCK(x)           (((x)&0x00000003)<<22)
+#define DSPI_DCTAR_LSBFE               (0x01000000)
+#define DSPI_DCTAR_CPHA                        (0x02000000)
+#define DSPI_DCTAR_CPOL                        (0x04000000)
+#define DSPI_DCTAR_TRSZ(x)             (((x)&0x0000000F)<<27)
+#define DSPI_DCTAR_PCSSCK_1CLK         (0x00000000)
+#define DSPI_DCTAR_PCSSCK_3CLK         (0x00400000)
+#define DSPI_DCTAR_PCSSCK_5CLK         (0x00800000)
+#define DSPI_DCTAR_PCSSCK_7CLK         (0x00A00000)
+#define DSPI_DCTAR_PASC_1CLK           (0x00000000)
+#define DSPI_DCTAR_PASC_3CLK           (0x00100000)
+#define DSPI_DCTAR_PASC_5CLK           (0x00200000)
+#define DSPI_DCTAR_PASC_7CLK           (0x00300000)
+#define DSPI_DCTAR_PDT_1CLK            (0x00000000)
+#define DSPI_DCTAR_PDT_3CLK            (0x00040000)
+#define DSPI_DCTAR_PDT_5CLK            (0x00080000)
+#define DSPI_DCTAR_PDT_7CLK            (0x000A0000)
+#define DSPI_DCTAR_PBR_1CLK            (0x00000000)
+#define DSPI_DCTAR_PBR_3CLK            (0x00010000)
+#define DSPI_DCTAR_PBR_5CLK            (0x00020000)
+#define DSPI_DCTAR_PBR_7CLK            (0x00030000)
+
+/* Bit definitions and macros for DSR */
+#define DSPI_DSR_RXPTR(x)              (((x)&0x0000000F))
+#define DSPI_DSR_RXCTR(x)              (((x)&0x0000000F)<<4)
+#define DSPI_DSR_TXPTR(x)              (((x)&0x0000000F)<<8)
+#define DSPI_DSR_TXCTR(x)              (((x)&0x0000000F)<<12)
+#define DSPI_DSR_RFDF                  (0x00020000)
+#define DSPI_DSR_RFOF                  (0x00080000)
+#define DSPI_DSR_TFFF                  (0x02000000)
+#define DSPI_DSR_TFUF                  (0x08000000)
+#define DSPI_DSR_EOQF                  (0x10000000)
+#define DSPI_DSR_TXRXS                 (0x40000000)
+#define DSPI_DSR_TCF                   (0x80000000)
+
+/* Bit definitions and macros for DIRSR */
+#define DSPI_DIRSR_RFDFS               (0x00010000)
+#define DSPI_DIRSR_RFDFE               (0x00020000)
+#define DSPI_DIRSR_RFOFE               (0x00080000)
+#define DSPI_DIRSR_TFFFS               (0x01000000)
+#define DSPI_DIRSR_TFFFE               (0x02000000)
+#define DSPI_DIRSR_TFUFE               (0x08000000)
+#define DSPI_DIRSR_EOQFE               (0x10000000)
+#define DSPI_DIRSR_TCFE                        (0x80000000)
+
+/* Bit definitions and macros for DTFR */
+#define DSPI_DTFR_TXDATA(x)            (((x)&0x0000FFFF))
+#define DSPI_DTFR_CS0                  (0x00010000)
+#define DSPI_DTFR_CS2                  (0x00040000)
+#define DSPI_DTFR_CS3                  (0x00080000)
+#define DSPI_DTFR_CS5                  (0x00200000)
+#define DSPI_DTFR_CTCNT                        (0x04000000)
+#define DSPI_DTFR_EOQ                  (0x08000000)
+#define DSPI_DTFR_CTAS(x)              (((x)&0x00000007)<<28)
+#define DSPI_DTFR_CONT                 (0x80000000)
+
+/* Bit definitions and macros for DRFR */
+#define DSPI_DRFR_RXDATA(x)            (((x)&0x0000FFFF))
+
+/* Bit definitions and macros for DTFDR group */
+#define DSPI_DTFDR_TXDATA(x)           (((x)&0x0000FFFF))
+#define DSPI_DTFDR_TXCMD(x)            (((x)&0x0000FFFF)<<16)
+
+/* Bit definitions and macros for DRFDR group */
+#define DSPI_DRFDR_RXDATA(x)           (((x)&0x0000FFFF))
+
+#endif                         /* __DSPI_H__ */
diff --git a/include/asm-m68k/coldfire/edma.h b/include/asm-m68k/coldfire/edma.h
new file mode 100644 (file)
index 0000000..c88aea6
--- /dev/null
@@ -0,0 +1,177 @@
+/*
+ * EDMA Internal Memory Map
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __EDMA_H__
+#define __EDMA_H__
+
+/*********************************************************************
+* Enhanced DMA (EDMA)
+*********************************************************************/
+
+/* eDMA module registers */
+typedef struct edma_ctrl {
+       u32 cr;                 /* 0x00 Control Register */
+       u32 es;                 /* 0x04 Error Status Register */
+       u16 res1[3];            /* 0x08 - 0x0D */
+       u16 erq;                /* 0x0E Enable Request Register */
+       u16 res2[3];            /* 0x10 - 0x15 */
+       u16 eei;                /* 0x16 Enable Error Interrupt Request */
+       u8 serq;                /* 0x18 Set Enable Request */
+       u8 cerq;                /* 0x19 Clear Enable Request */
+       u8 seei;                /* 0x1A Set En Error Interrupt Request */
+       u8 ceei;                /* 0x1B Clear En Error Interrupt Request */
+       u8 cint;                /* 0x1C Clear Interrupt Enable */
+       u8 cerr;                /* 0x1D Clear Error */
+       u8 ssrt;                /* 0x1E Set START Bit */
+       u8 cdne;                /* 0x1F Clear DONE Status Bit */
+       u16 res3[3];            /* 0x20 - 0x25 */
+       u16 intr;               /* 0x26 Interrupt Request */
+       u16 res4[3];            /* 0x28 - 0x2D */
+       u16 err;                /* 0x2E Error Register */
+       u32 res5[52];           /* 0x30 - 0xFF */
+       u8 dchpri0;             /* 0x100 Channel 0 Priority */
+       u8 dchpri1;             /* 0x101 Channel 1 Priority */
+       u8 dchpri2;             /* 0x102 Channel 2 Priority */
+       u8 dchpri3;             /* 0x103 Channel 3 Priority */
+       u8 dchpri4;             /* 0x104 Channel 4 Priority */
+       u8 dchpri5;             /* 0x105 Channel 5 Priority */
+       u8 dchpri6;             /* 0x106 Channel 6 Priority */
+       u8 dchpri7;             /* 0x107 Channel 7 Priority */
+       u8 dchpri8;             /* 0x108 Channel 8 Priority */
+       u8 dchpri9;             /* 0x109 Channel 9 Priority */
+       u8 dchpri10;            /* 0x110 Channel 10 Priority */
+       u8 dchpri11;            /* 0x111 Channel 11 Priority */
+       u8 dchpri12;            /* 0x112 Channel 12 Priority */
+       u8 dchpri13;            /* 0x113 Channel 13 Priority */
+       u8 dchpri14;            /* 0x114 Channel 14 Priority */
+       u8 dchpri15;            /* 0x115 Channel 15 Priority */
+} edma_t;
+
+/* TCD - eDMA*/
+typedef struct tcd_ctrl {
+       u32 saddr;              /* 0x00 Source Address */
+       u16 attr;               /* 0x04 Transfer Attributes */
+       u16 soff;               /* 0x06 Signed Source Address Offset */
+       u32 nbytes;             /* 0x08 Minor Byte Count */
+       u32 slast;              /* 0x0C Last Source Address Adjustment */
+       u32 daddr;              /* 0x10 Destination address */
+       u16 citer;              /* 0x14 Cur Minor Loop Link, Major Loop Cnt */
+       u16 doff;               /* 0x16 Signed Destination Address Offset */
+       u32 dlast_sga;          /* 0x18 Last Dest Adr Adj/Scatter Gather Adr */
+       u16 biter;              /* 0x1C Minor Loop Lnk, Major Loop Cnt */
+       u16 csr;                /* 0x1E Control and Status */
+} tcd_st;
+
+typedef struct tcd_multiple {
+       tcd_st tcd[16];
+} tcd_t;
+
+/* Bit definitions and macros for EPPAR */
+#define EPORT_EPPAR_EPPA1(x)           (((x)&0x0003)<<2)
+#define EPORT_EPPAR_EPPA2(x)           (((x)&0x0003)<<4)
+#define EPORT_EPPAR_EPPA3(x)           (((x)&0x0003)<<6)
+#define EPORT_EPPAR_EPPA4(x)           (((x)&0x0003)<<8)
+#define EPORT_EPPAR_EPPA5(x)           (((x)&0x0003)<<10)
+#define EPORT_EPPAR_EPPA6(x)           (((x)&0x0003)<<12)
+#define EPORT_EPPAR_EPPA7(x)           (((x)&0x0003)<<14)
+#define EPORT_EPPAR_LEVEL              (0)
+#define EPORT_EPPAR_RISING             (1)
+#define EPORT_EPPAR_FALLING            (2)
+#define EPORT_EPPAR_BOTH               (3)
+#define EPORT_EPPAR_EPPA7_LEVEL                (0x0000)
+#define EPORT_EPPAR_EPPA7_RISING       (0x4000)
+#define EPORT_EPPAR_EPPA7_FALLING      (0x8000)
+#define EPORT_EPPAR_EPPA7_BOTH         (0xC000)
+#define EPORT_EPPAR_EPPA6_LEVEL                (0x0000)
+#define EPORT_EPPAR_EPPA6_RISING       (0x1000)
+#define EPORT_EPPAR_EPPA6_FALLING      (0x2000)
+#define EPORT_EPPAR_EPPA6_BOTH         (0x3000)
+#define EPORT_EPPAR_EPPA5_LEVEL                (0x0000)
+#define EPORT_EPPAR_EPPA5_RISING       (0x0400)
+#define EPORT_EPPAR_EPPA5_FALLING      (0x0800)
+#define EPORT_EPPAR_EPPA5_BOTH         (0x0C00)
+#define EPORT_EPPAR_EPPA4_LEVEL                (0x0000)
+#define EPORT_EPPAR_EPPA4_RISING       (0x0100)
+#define EPORT_EPPAR_EPPA4_FALLING      (0x0200)
+#define EPORT_EPPAR_EPPA4_BOTH         (0x0300)
+#define EPORT_EPPAR_EPPA3_LEVEL                (0x0000)
+#define EPORT_EPPAR_EPPA3_RISING       (0x0040)
+#define EPORT_EPPAR_EPPA3_FALLING      (0x0080)
+#define EPORT_EPPAR_EPPA3_BOTH         (0x00C0)
+#define EPORT_EPPAR_EPPA2_LEVEL                (0x0000)
+#define EPORT_EPPAR_EPPA2_RISING       (0x0010)
+#define EPORT_EPPAR_EPPA2_FALLING      (0x0020)
+#define EPORT_EPPAR_EPPA2_BOTH         (0x0030)
+#define EPORT_EPPAR_EPPA1_LEVEL                (0x0000)
+#define EPORT_EPPAR_EPPA1_RISING       (0x0004)
+#define EPORT_EPPAR_EPPA1_FALLING      (0x0008)
+#define EPORT_EPPAR_EPPA1_BOTH         (0x000C)
+
+/* Bit definitions and macros for EPDDR */
+#define EPORT_EPDDR_EPDD1              (0x02)
+#define EPORT_EPDDR_EPDD2              (0x04)
+#define EPORT_EPDDR_EPDD3              (0x08)
+#define EPORT_EPDDR_EPDD4              (0x10)
+#define EPORT_EPDDR_EPDD5              (0x20)
+#define EPORT_EPDDR_EPDD6              (0x40)
+#define EPORT_EPDDR_EPDD7              (0x80)
+
+/* Bit definitions and macros for EPIER */
+#define EPORT_EPIER_EPIE1              (0x02)
+#define EPORT_EPIER_EPIE2              (0x04)
+#define EPORT_EPIER_EPIE3              (0x08)
+#define EPORT_EPIER_EPIE4              (0x10)
+#define EPORT_EPIER_EPIE5              (0x20)
+#define EPORT_EPIER_EPIE6              (0x40)
+#define EPORT_EPIER_EPIE7              (0x80)
+
+/* Bit definitions and macros for EPDR */
+#define EPORT_EPDR_EPD1                        (0x02)
+#define EPORT_EPDR_EPD2                        (0x04)
+#define EPORT_EPDR_EPD3                        (0x08)
+#define EPORT_EPDR_EPD4                        (0x10)
+#define EPORT_EPDR_EPD5                        (0x20)
+#define EPORT_EPDR_EPD6                        (0x40)
+#define EPORT_EPDR_EPD7                        (0x80)
+
+/* Bit definitions and macros for EPPDR */
+#define EPORT_EPPDR_EPPD1              (0x02)
+#define EPORT_EPPDR_EPPD2              (0x04)
+#define EPORT_EPPDR_EPPD3              (0x08)
+#define EPORT_EPPDR_EPPD4              (0x10)
+#define EPORT_EPPDR_EPPD5              (0x20)
+#define EPORT_EPPDR_EPPD6              (0x40)
+#define EPORT_EPPDR_EPPD7              (0x80)
+
+/* Bit definitions and macros for EPFR */
+#define EPORT_EPFR_EPF1                        (0x02)
+#define EPORT_EPFR_EPF2                        (0x04)
+#define EPORT_EPFR_EPF3                        (0x08)
+#define EPORT_EPFR_EPF4                        (0x10)
+#define EPORT_EPFR_EPF5                        (0x20)
+#define EPORT_EPFR_EPF6                        (0x40)
+#define EPORT_EPFR_EPF7                        (0x80)
+
+#endif                                 /* __EDMA_H__ */
diff --git a/include/asm-m68k/coldfire/flexbus.h b/include/asm-m68k/coldfire/flexbus.h
new file mode 100644 (file)
index 0000000..1d902c0
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * FlexBus Internal Memory Map
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __FLEXBUS_H
+#define __FLEXBUS_H
+
+/*********************************************************************
+* FlexBus Chip Selects (FBCS)
+*********************************************************************/
+
+typedef struct fbcs {
+       u32 csar0;              /* Chip-select Address Register */
+       u32 csmr0;              /* Chip-select Mask Register */
+       u32 cscr0;              /* Chip-select Control Register */
+       u32 csar1;              /* Chip-select Address Register */
+       u32 csmr1;              /* Chip-select Mask Register */
+       u32 cscr1;              /* Chip-select Control Register */
+       u32 csar2;              /* Chip-select Address Register */
+       u32 csmr2;              /* Chip-select Mask Register */
+       u32 cscr2;              /* Chip-select Control Register */
+       u32 csar3;              /* Chip-select Address Register */
+       u32 csmr3;              /* Chip-select Mask Register */
+       u32 cscr3;              /* Chip-select Control Register */
+       u32 csar4;              /* Chip-select Address Register */
+       u32 csmr4;              /* Chip-select Mask Register */
+       u32 cscr4;              /* Chip-select Control Register */
+       u32 csar5;              /* Chip-select Address Register */
+       u32 csmr5;              /* Chip-select Mask Register */
+       u32 cscr5;              /* Chip-select Control Register */
+} fbcs_t;
+
+/* Bit definitions and macros for CSAR group */
+#define FBCS_CSAR_BA(x)                        ((x)&0xFFFF0000)
+
+/* Bit definitions and macros for CSMR group */
+#define FBCS_CSMR_V                    (0x00000001)    /* Valid bit */
+#define FBCS_CSMR_WP                   (0x00000100)    /* Write protect */
+#define FBCS_CSMR_BAM(x)               (((x)&0x0000FFFF)<<16)  /* Base address mask */
+#define FBCS_CSMR_BAM_4G               (0xFFFF0000)
+#define FBCS_CSMR_BAM_2G               (0x7FFF0000)
+#define FBCS_CSMR_BAM_1G               (0x3FFF0000)
+#define FBCS_CSMR_BAM_1024M            (0x3FFF0000)
+#define FBCS_CSMR_BAM_512M             (0x1FFF0000)
+#define FBCS_CSMR_BAM_256M             (0x0FFF0000)
+#define FBCS_CSMR_BAM_128M             (0x07FF0000)
+#define FBCS_CSMR_BAM_64M              (0x03FF0000)
+#define FBCS_CSMR_BAM_32M              (0x01FF0000)
+#define FBCS_CSMR_BAM_16M              (0x00FF0000)
+#define FBCS_CSMR_BAM_8M               (0x007F0000)
+#define FBCS_CSMR_BAM_4M               (0x003F0000)
+#define FBCS_CSMR_BAM_2M               (0x001F0000)
+#define FBCS_CSMR_BAM_1M               (0x000F0000)
+#define FBCS_CSMR_BAM_1024K            (0x000F0000)
+#define FBCS_CSMR_BAM_512K             (0x00070000)
+#define FBCS_CSMR_BAM_256K             (0x00030000)
+#define FBCS_CSMR_BAM_128K             (0x00010000)
+#define FBCS_CSMR_BAM_64K              (0x00000000)
+
+/* Bit definitions and macros for CSCR group */
+#define FBCS_CSCR_BSTW                 (0x00000008)    /* Burst-write enable */
+#define FBCS_CSCR_BSTR                 (0x00000010)    /* Burst-read enable */
+#define FBCS_CSCR_BEM                  (0x00000020)    /* Byte-enable mode */
+#define FBCS_CSCR_PS(x)                        (((x)&0x00000003)<<6)   /* Port size */
+#define FBCS_CSCR_AA                   (0x00000100)    /* Auto-acknowledge */
+#define FBCS_CSCR_WS(x)                        (((x)&0x0000003F)<<10)  /* Wait states */
+#define FBCS_CSCR_WRAH(x)              (((x)&0x00000003)<<16)  /* Write address hold or deselect */
+#define FBCS_CSCR_RDAH(x)              (((x)&0x00000003)<<18)  /* Read address hold or deselect */
+#define FBCS_CSCR_ASET(x)              (((x)&0x00000003)<<20)  /* Address setup */
+#define FBCS_CSCR_SWSEN                        (0x00800000)    /* Secondary wait state enable */
+#define FBCS_CSCR_SWS(x)               (((x)&0x0000003F)<<26)  /* Secondary wait states */
+
+#define FBCS_CSCR_PS_8                 (0x00000040)
+#define FBCS_CSCR_PS_16                        (0x00000080)
+#define FBCS_CSCR_PS_32                        (0x00000000)
+
+#endif                         /* __FLEXBUS_H */
diff --git a/include/asm-m68k/coldfire/lcd.h b/include/asm-m68k/coldfire/lcd.h
new file mode 100644 (file)
index 0000000..66b95b3
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+ * LCD controller Memory Map
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __LCDC_H__
+#define __LCDC_H__
+
+/* LCD module registers */
+typedef struct lcd_ctrl {
+       u32 ssar;               /* 0x00 Screen Start Address Register */
+       u32 sr;                 /* 0x04 LCD Size Register */
+       u32 vpw;                /* 0x08 Virtual Page Width Register */
+       u32 cpr;                /* 0x0C Cursor Position Register */
+       u32 cwhb;               /* 0x10 Cursor Width Height and Blink Register */
+       u32 ccmr;               /* 0x14 Color Cursor Mapping Register */
+       u32 pcr;                /* 0x18 Panel Configuration Register */
+       u32 hcr;                /* 0x1C Horizontal Configuration Register */
+       u32 vcr;                /* 0x20 Vertical Configuration Register */
+       u32 por;                /* 0x24 Panning Offset Register */
+       u32 scr;                /* 0x28 Sharp Configuration Register */
+       u32 pccr;               /* 0x2C PWM Contrast Control Register */
+       u32 dcr;                /* 0x30 DMA Control Register */
+       u32 rmcr;               /* 0x34 Refresh Mode Control Register */
+       u32 icr;                /* 0x38 Refresh Mode Control Register */
+       u32 ier;                /* 0x3C Interrupt Enable Register */
+       u32 isr;                /* 0x40 Interrupt Status Register */
+       u32 res[4];
+       u32 gwsar;              /* 0x50 Graphic Window Start Address Register */
+       u32 gwsr;               /* 0x54 Graphic Window Size Register */
+       u32 gwvpw;              /* 0x58 Graphic Window Virtual Page Width Register */
+       u32 gwpor;              /* 0x5C Graphic Window Panning Offset Register */
+       u32 gwpr;               /* 0x60 Graphic Window Position Register */
+       u32 gwcr;               /* 0x64 Graphic Window Control Register */
+       u32 gwdcr;              /* 0x68 Graphic Window DMA Control Register */
+} lcd_t;
+
+typedef struct lcdbg_ctrl {
+       u32 bglut[255];
+} lcdbg_t;
+
+typedef struct lcdgw_ctrl {
+       u32 gwlut[255];
+} lcdgw_t;
+
+/* Bit definitions and macros for LCDC_LSSAR */
+#define LCDC_SSAR_SSA(x)               (((x)&0x3FFFFFFF)<<2)
+
+/* Bit definitions and macros for LCDC_LSR */
+#define LCDC_SR_XMAX(x)                        (((x)&0x0000003F)<<20)
+#define LCDC_SR_YMAX(x)                        ((x)&0x000003FF)
+
+/* Bit definitions and macros for LCDC_LVPWR */
+#define LCDC_VPWR_VPW(x)               (((x)&0x000003FF)
+
+/* Bit definitions and macros for LCDC_LCPR */
+#define LCDC_CPR_CC(x)                 (((x)&0x00000003)<<30)
+#define LCDC_CPR_CC_AND                        (0xC0000000)
+#define LCDC_CPR_CC_XOR                        (0x80000000)
+#define LCDC_CPR_CC_OR                 (0x40000000)
+#define LCDC_CPR_CC_TRANSPARENT                (0x00000000)
+#define LCDC_CPR_OP                    (0x10000000)
+#define LCDC_CPR_CXP(x)                        (((x)&0x000003FF)<<16)
+#define LCDC_CPR_CYP(x)                        ((x)&0x000003FF)
+
+/* Bit definitions and macros for LCDC_LCWHBR */
+#define LCDC_CWHBR_BK_EN               (0x80000000)
+#define LCDC_CWHBR_CW(x)               (((x)&0x0000001F)<<24)
+#define LCDC_CWHBR_CH(x)               (((x)&0x0000001F)<<16)
+#define LCDC_CWHBR_BD(x)               ((x)&0x000000FF)
+
+/* Bit definitions and macros for LCDC_LCCMR */
+#define LCDC_CCMR_CUR_COL_R(x)         (((x)&0x0000003F)<<12)
+#define LCDC_CCMR_CUR_COL_G(x)         (((x)&0x0000003F)<<6)
+#define LCDC_CCMR_CUR_COL_B(x)         ((x)&0x0000003F)
+
+/* Bit definitions and macros for LCDC_LPCR */
+#define LCDC_PCR_PANEL_TYPE(x)         (((x)&0x00000003)<<30)
+#define LCDC_PCR_MODE_TFT              (0xC0000000)
+#define LCDC_PCR_MODE_CSTN             (0x40000000)
+#define LCDC_PCR_MODE_MONOCHROME       (0x00000000)
+#define LCDC_PCR_TFT                   (0x80000000)
+#define LCDC_PCR_COLOR                 (0x40000000)
+#define LCDC_PCR_PBSIZ(x)              (((x)&0x00000003)<<28)
+#define LCDC_PCR_PBSIZ_8               (0x30000000)
+#define LCDC_PCR_PBSIZ_4               (0x20000000)
+#define LCDC_PCR_PBSIZ_2               (0x10000000)
+#define LCDC_PCR_PBSIZ_1               (0x00000000)
+#define LCDC_PCR_BPIX(x)               (((x)&0x00000007)<<25)
+#define LCDC_PCR_BPIX_18bpp            (0x0C000000)
+#define LCDC_PCR_BPIX_16bpp            (0x0A000000)
+#define LCDC_PCR_BPIX_12bpp            (0x08000000)
+#define LCDC_PCR_BPIX_8bpp             (0x06000000)
+#define LCDC_PCR_BPIX_4bpp             (0x04000000)
+#define LCDC_PCR_BPIX_2bpp             (0x02000000)
+#define LCDC_PCR_BPIX_1bpp             (0x00000000)
+#define LCDC_PCR_PIXPOL                        (0x01000000)
+#define LCDC_PCR_FLM                   (0x00800000)
+#define LCDC_PCR_LPPOL                 (0x00400000)
+#define LCDC_PCR_CLKPOL                        (0x00200000)
+#define LCDC_PCR_OEPOL                 (0x00100000)
+#define LCDC_PCR_SCLKIDLE              (0x00080000)
+#define LCDC_PCR_ENDSEL                        (0x00040000)
+#define LCDC_PCR_SWAP_SEL              (0x00020000)
+#define LCDC_PCR_REV_VS                        (0x00010000)
+#define LCDC_PCR_ACDSEL                        (0x00008000)
+#define LCDC_PCR_ACD(x)                        (((x)&0x0000007F)<<8)
+#define LCDC_PCR_SCLKSEL               (0x00000080)
+#define LCDC_PCR_SHARP                 (0x00000040)
+#define LCDC_PCR_PCD(x)                        ((x)&0x0000003F)
+
+/* Bit definitions and macros for LCDC_LHCR */
+#define LCDC_HCR_H_WIDTH(x)            (((x)&0x0000003F)<<26)
+#define LCDC_HCR_H_WAIT_1(x)           (((x)&0x000000FF)<<8)
+#define LCDC_HCR_H_WAIT_2(x)           ((x)&0x000000FF)
+
+/* Bit definitions and macros for LCDC_LVCR */
+#define LCDC_VCR_V_WIDTH(x)            (((x)&0x0000003F)<<26)
+#define LCDC_VCR_V_WAIT_1(x)           (((x)&0x000000FF)<<8)
+#define LCDC_VCR_V_WAIT_2(x)           ((x)&0x000000FF)
+
+/* Bit definitions and macros for LCDC_SCR */
+#define LCDC_SCR_PS_R_DELAY(x)         (((x)&0x0000003F) << 26)
+#define LCDC_SCR_CLS_R_DELAY(x)                (((x)&0x000000FF) << 16)
+#define LCDC_SCR_RTG_DELAY(x)          (((x)&0x0000000F) << 8)
+#define LCDC_SCR_GRAY2(x)              (((x)&0x0000000F) << 4)
+#define LCDC_SCR_GRAY1(x)              ((x)&&0x0000000F)
+
+/* Bit definitions and macros for LCDC_LPCCR */
+#define LCDC_PCCR_CLS_HI_WID(x)                (((x)&0x000001FF)<<16)
+#define LCDC_PCCR_LDMSK                        (0x00008000)
+#define LCDC_PCCR_SCR(x)               (((x)&0x00000003)<<9)
+#define LCDC_PCCR_SCR_LCDCLK           (0x00000400)
+#define LCDC_PCCR_SCR_PIXCLK           (0x00000200)
+#define LCDC_PCCR_SCR_LNPULSE          (0x00000000)
+#define LCDC_PCCR_CC_EN                        (0x00000100)
+#define LCDC_PCCR_PW(x)                        ((x)&0x000000FF)
+
+/* Bit definitions and macros for LCDC_LDCR */
+#define LCDC_DCR_BURST                 (0x80000000)
+#define LCDC_DCR_HM(x)                 (((x)&0x0000001F)<<16)
+#define LCDC_DCR_TM(x)                 ((x)&0x0000001F)
+
+/* Bit definitions and macros for LCDC_LRMCR */
+#define LCDC_RMCR_SEL_REF              (0x00000001)
+
+/* Bit definitions and macros for LCDC_LICR */
+#define LCDC_ICR_GW_INT_CON            (0x00000010)
+#define LCDC_ICR_INTSYN                        (0x00000004)
+#define LCDC_ICR_INTCON                        (0x00000001)
+
+/* Bit definitions and macros for LCDC_LIER */
+#define LCDC_IER_GW_UDR                        (0x00000080)
+#define LCDC_IER_GW_ERR                        (0x00000040)
+#define LCDC_IER_GW_EOF                        (0x00000020)
+#define LCDC_IER_GW_BOF                        (0x00000010)
+#define LCDC_IER_UDR                   (0x00000008)
+#define LCDC_IER_ERR                   (0x00000004)
+#define LCDC_IER_EOF                   (0x00000002)
+#define LCDC_IER_BOF                   (0x00000001)
+
+/* Bit definitions and macros for LCDC_LGWSAR */
+#define LCDC_GWSAR_GWSA(x)             (((x)&0x3FFFFFFF)<<2)
+
+/* Bit definitions and macros for LCDC_LGWSR */
+#define LCDC_GWSR_GWW(x)               (((x)&0x0000003F)<<20)
+#define LCDC_GWSR_GWH(x)               ((x)&0x000003FF)
+
+/* Bit definitions and macros for LCDC_LGWVPWR */
+#define LCDC_GWVPWR_GWVPW(x)           ((x)&0x000003FF)
+
+/* Bit definitions and macros for LCDC_LGWPOR */
+#define LCDC_GWPOR_GWPO(x)             ((x)&0x0000001F)
+
+/* Bit definitions and macros for LCDC_LGWPR */
+#define LCDC_GWPR_GWXP(x)              (((x)&0x000003FF)<<16)
+#define LCDC_GWPR_GWYP(x)              ((x)&0x000003FF)
+
+/* Bit definitions and macros for LCDC_LGWCR */
+#define LCDC_GWCR_GWAV(x)              (((x)&0x000000FF)<<24)
+#define LCDC_GWCR_GWCKE                        (0x00800000)
+#define LCDC_LGWCR_GWE                 (0x00400000)
+#define LCDC_LGWCR_GW_RVS              (0x00200000)
+#define LCDC_LGWCR_GWCKR(x)            (((x)&0x0000003F)<<12)
+#define LCDC_LGWCR_GWCKG(x)            (((x)&0x0000003F)<<6)
+#define LCDC_LGWCR_GWCKB(x)            ((x)&0x0000003F)
+
+/* Bit definitions and macros for LCDC_LGWDCR */
+#define LCDC_LGWDCR_GWBT               (0x80000000)
+#define LCDC_LGWDCR_GWHM(x)            (((x)&0x0000001F)<<16)
+#define LCDC_LGWDCR_GWTM(x)            ((x)&0x0000001F)
+
+#endif                         /* __LCDC_H__ */
diff --git a/include/asm-m68k/coldfire/ssi.h b/include/asm-m68k/coldfire/ssi.h
new file mode 100644 (file)
index 0000000..105c475
--- /dev/null
@@ -0,0 +1,175 @@
+/*
+ * SSI Internal Memory Map
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __SSI_H__
+#define __SSI_H__
+
+/*********************************************************************
+* Synchronous Serial Interface (SSI)
+*********************************************************************/
+
+typedef struct ssi {
+       u32 tx0;
+       u32 tx1;
+       u32 rx0;
+       u32 rx1;
+       u32 cr;
+       u32 isr;
+       u32 ier;
+       u32 tcr;
+       u32 rcr;
+       u32 ccr;
+       u8 resv0[0x4];
+       u32 fcsr;
+       u8 resv1[0x8];
+       u32 acr;
+       u32 acadd;
+       u32 acdat;
+       u32 atag;
+       u32 tmask;
+       u32 rmask;
+} ssi_t;
+
+/*********************************************************************
+* Synchronous Serial Interface (SSI)
+*********************************************************************/
+
+/* Bit definitions and macros for SSI_CR */
+#define SSI_CR_CIS                     (0x00000200)
+#define SSI_CR_TCH                     (0x00000100)
+#define SSI_CR_MCE                     (0x00000080)
+#define SSI_CR_I2S_SLAVE               (0x00000040)
+#define SSI_CR_I2S_MASTER              (0x00000020)
+#define SSI_CR_I2S_NORMAL              (0x00000000)
+#define SSI_CR_SYN                     (0x00000010)
+#define SSI_CR_NET                     (0x00000008)
+#define SSI_CR_RE                      (0x00000004)
+#define SSI_CR_TE                      (0x00000002)
+#define SSI_CR_SSI_EN                  (0x00000001)
+
+/* Bit definitions and macros for SSI_ISR */
+#define SSI_ISR_CMDAU                  (0x00040000)
+#define SSI_ISR_CMDDU                  (0x00020000)
+#define SSI_ISR_RXT                    (0x00010000)
+#define SSI_ISR_RDR1                   (0x00008000)
+#define SSI_ISR_RDR0                   (0x00004000)
+#define SSI_ISR_TDE1                   (0x00002000)
+#define SSI_ISR_TDE0                   (0x00001000)
+#define SSI_ISR_ROE1                   (0x00000800)
+#define SSI_ISR_ROE0                   (0x00000400)
+#define SSI_ISR_TUE1                   (0x00000200)
+#define SSI_ISR_TUE0                   (0x00000100)
+#define SSI_ISR_TFS                    (0x00000080)
+#define SSI_ISR_RFS                    (0x00000040)
+#define SSI_ISR_TLS                    (0x00000020)
+#define SSI_ISR_RLS                    (0x00000010)
+#define SSI_ISR_RFF1                   (0x00000008)
+#define SSI_ISR_RFF0                   (0x00000004)
+#define SSI_ISR_TFE1                   (0x00000002)
+#define SSI_ISR_TFE0                   (0x00000001)
+
+/* Bit definitions and macros for SSI_IER */
+#define SSI_IER_RDMAE                  (0x00400000)
+#define SSI_IER_RIE                    (0x00200000)
+#define SSI_IER_TDMAE                  (0x00100000)
+#define SSI_IER_TIE                    (0x00080000)
+#define SSI_IER_CMDAU                  (0x00040000)
+#define SSI_IER_CMDU                   (0x00020000)
+#define SSI_IER_RXT                    (0x00010000)
+#define SSI_IER_RDR1                   (0x00008000)
+#define SSI_IER_RDR0                   (0x00004000)
+#define SSI_IER_TDE1                   (0x00002000)
+#define SSI_IER_TDE0                   (0x00001000)
+#define SSI_IER_ROE1                   (0x00000800)
+#define SSI_IER_ROE0                   (0x00000400)
+#define SSI_IER_TUE1                   (0x00000200)
+#define SSI_IER_TUE0                   (0x00000100)
+#define SSI_IER_TFS                    (0x00000080)
+#define SSI_IER_RFS                    (0x00000040)
+#define SSI_IER_TLS                    (0x00000020)
+#define SSI_IER_RLS                    (0x00000010)
+#define SSI_IER_RFF1                   (0x00000008)
+#define SSI_IER_RFF0                   (0x00000004)
+#define SSI_IER_TFE1                   (0x00000002)
+#define SSI_IER_TFE0                   (0x00000001)
+
+/* Bit definitions and macros for SSI_TCR */
+#define SSI_TCR_TXBIT0                 (0x00000200)
+#define SSI_TCR_TFEN1                  (0x00000100)
+#define SSI_TCR_TFEN0                  (0x00000080)
+#define SSI_TCR_TFDIR                  (0x00000040)
+#define SSI_TCR_TXDIR                  (0x00000020)
+#define SSI_TCR_TSHFD                  (0x00000010)
+#define SSI_TCR_TSCKP                  (0x00000008)
+#define SSI_TCR_TFSI                   (0x00000004)
+#define SSI_TCR_TFSL                   (0x00000002)
+#define SSI_TCR_TEFS                   (0x00000001)
+
+/* Bit definitions and macros for SSI_RCR */
+#define SSI_RCR_RXEXT                  (0x00000400)
+#define SSI_RCR_RXBIT0                 (0x00000200)
+#define SSI_RCR_RFEN1                  (0x00000100)
+#define SSI_RCR_RFEN0                  (0x00000080)
+#define SSI_RCR_RSHFD                  (0x00000010)
+#define SSI_RCR_RSCKP                  (0x00000008)
+#define SSI_RCR_RFSI                   (0x00000004)
+#define SSI_RCR_RFSL                   (0x00000002)
+#define SSI_RCR_REFS                   (0x00000001)
+
+/* Bit definitions and macros for SSI_CCR */
+#define SSI_CCR_DIV2                   (0x00040000)
+#define SSI_CCR_PSR                    (0x00020000)
+#define SSI_CCR_WL(x)                  (((x)&0x0000000F)<<13)
+#define SSI_CCR_DC(x)                  (((x)&0x0000001F)<<8)
+#define SSI_CCR_PM(x)                  ((x)&0x000000FF)
+
+/* Bit definitions and macros for SSI_FCSR */
+#define SSI_FCSR_RFCNT1(x)             (((x)&0x0000000F)<<28)
+#define SSI_FCSR_TFCNT1(x)             (((x)&0x0000000F)<<24)
+#define SSI_FCSR_RFWM1(x)              (((x)&0x0000000F)<<20)
+#define SSI_FCSR_TFWM1(x)              (((x)&0x0000000F)<<16)
+#define SSI_FCSR_RFCNT0(x)             (((x)&0x0000000F)<<12)
+#define SSI_FCSR_TFCNT0(x)             (((x)&0x0000000F)<<8)
+#define SSI_FCSR_RFWM0(x)              (((x)&0x0000000F)<<4)
+#define SSI_FCSR_TFWM0(x)              ((x)&0x0000000F)
+
+/* Bit definitions and macros for SSI_ACR */
+#define SSI_ACR_FRDIV(x)               (((x)&0x0000003F)<<5)
+#define SSI_ACR_WR                     (0x00000010)
+#define SSI_ACR_RD                     (0x00000008)
+#define SSI_ACR_TIF                    (0x00000004)
+#define SSI_ACR_FV                     (0x00000002)
+#define SSI_ACR_AC97EN                 (0x00000001)
+
+/* Bit definitions and macros for SSI_ACADD */
+#define SSI_ACADD_SSI_ACADD(x)         ((x)&0x0007FFFF)
+
+/* Bit definitions and macros for SSI_ACDAT */
+#define SSI_ACDAT_SSI_ACDAT(x)         ((x)&0x0007FFFF)
+
+/* Bit definitions and macros for SSI_ATAG */
+#define SSI_ATAG_DDI_ATAG(x)           ((x)&0x0000FFFF)
+
+#endif                                 /* __SSI_H__ */
index 344c5e197a567415ea88cc3ab44591a7de1f7357..e63959902461ac791f6c157e37e82ab858399388 100644 (file)
@@ -39,20 +39,20 @@ typedef struct cpm_buf_desc {
        uint cbd_bufaddr;       /* Buffer address in host memory */
 } cbd_t;
 
-#define BD_SC_EMPTY    ((ushort)0x8000)        /* Recieve is empty */
-#define BD_SC_READY    ((ushort)0x8000)        /* Transmit is ready */
-#define BD_SC_WRAP     ((ushort)0x2000)        /* Last buffer descriptor */
-#define BD_SC_INTRPT   ((ushort)0x1000)        /* Interrupt on change */
-#define BD_SC_LAST     ((ushort)0x0800)        /* Last buffer in frame */
-#define BD_SC_TC       ((ushort)0x0400)        /* Transmit CRC */
-#define BD_SC_CM       ((ushort)0x0200)        /* Continous mode */
-#define BD_SC_ID       ((ushort)0x0100)        /* Rec'd too many idles */
-#define BD_SC_P                ((ushort)0x0100)        /* xmt preamble */
-#define BD_SC_BR       ((ushort)0x0020)        /* Break received */
-#define BD_SC_FR       ((ushort)0x0010)        /* Framing error */
-#define BD_SC_PR       ((ushort)0x0008)        /* Parity error */
-#define BD_SC_OV       ((ushort)0x0002)        /* Overrun */
-#define BD_SC_CD       ((ushort)0x0001)        /* Carrier Detect lost */
+#define BD_SC_EMPTY            ((ushort)0x8000)        /* Recieve is empty */
+#define BD_SC_READY            ((ushort)0x8000)        /* Transmit is ready */
+#define BD_SC_WRAP             ((ushort)0x2000)        /* Last buffer descriptor */
+#define BD_SC_INTRPT           ((ushort)0x1000)        /* Interrupt on change */
+#define BD_SC_LAST             ((ushort)0x0800)        /* Last buffer in frame */
+#define BD_SC_TC               ((ushort)0x0400)        /* Transmit CRC */
+#define BD_SC_CM               ((ushort)0x0200)        /* Continous mode */
+#define BD_SC_ID               ((ushort)0x0100)        /* Rec'd too many idles */
+#define BD_SC_P                        ((ushort)0x0100)        /* xmt preamble */
+#define BD_SC_BR               ((ushort)0x0020)        /* Break received */
+#define BD_SC_FR               ((ushort)0x0010)        /* Framing error */
+#define BD_SC_PR               ((ushort)0x0008)        /* Parity error */
+#define BD_SC_OV               ((ushort)0x0002)        /* Overrun */
+#define BD_SC_CD               ((ushort)0x0001)        /* Carrier Detect lost */
 
 /* Buffer descriptor control/status used by Ethernet receive.
 */
@@ -95,11 +95,8 @@ typedef struct cpm_buf_desc {
 #define BD_ENET_TX_CSL         ((ushort)0x0001)
 #define BD_ENET_TX_STATS       ((ushort)0x03ff)        /* All status bits */
 
-#ifdef CONFIG_MCFFEC
 /*********************************************************************
-*
 * Fast Ethernet Controller (FEC)
-*
 *********************************************************************/
 /* FEC private information */
 struct fec_info_s {
@@ -117,8 +114,10 @@ struct fec_info_s {
        uint txIdx;
        char *txbuf;
        int initialized;
+       struct fec_info_s *next;
 };
 
+#ifdef CONFIG_MCFFEC
 /* Register read/write struct */
 typedef struct fec {
 #ifdef CONFIG_M5272
@@ -254,90 +253,91 @@ typedef struct fec {
        u32 ieee_r_fdxfc;
        u32 ieee_r_octets_ok;
 } fec_t;
+#endif                         /* CONFIG_MCFFEC */
 
 /*********************************************************************
 * Fast Ethernet Controller (FEC)
 *********************************************************************/
 /* Bit definitions and macros for FEC_EIR */
-#define FEC_EIR_CLEAR_ALL      (0xFFF80000)
-#define FEC_EIR_HBERR          (0x80000000)
-#define FEC_EIR_BABR           (0x40000000)
-#define FEC_EIR_BABT           (0x20000000)
-#define FEC_EIR_GRA            (0x10000000)
-#define FEC_EIR_TXF            (0x08000000)
-#define FEC_EIR_TXB            (0x04000000)
-#define FEC_EIR_RXF            (0x02000000)
-#define FEC_EIR_RXB            (0x01000000)
-#define FEC_EIR_MII            (0x00800000)
-#define FEC_EIR_EBERR          (0x00400000)
-#define FEC_EIR_LC             (0x00200000)
-#define FEC_EIR_RL             (0x00100000)
-#define FEC_EIR_UN             (0x00080000)
+#define FEC_EIR_CLEAR_ALL              (0xFFF80000)
+#define FEC_EIR_HBERR                  (0x80000000)
+#define FEC_EIR_BABR                   (0x40000000)
+#define FEC_EIR_BABT                   (0x20000000)
+#define FEC_EIR_GRA                    (0x10000000)
+#define FEC_EIR_TXF                    (0x08000000)
+#define FEC_EIR_TXB                    (0x04000000)
+#define FEC_EIR_RXF                    (0x02000000)
+#define FEC_EIR_RXB                    (0x01000000)
+#define FEC_EIR_MII                    (0x00800000)
+#define FEC_EIR_EBERR                  (0x00400000)
+#define FEC_EIR_LC                     (0x00200000)
+#define FEC_EIR_RL                     (0x00100000)
+#define FEC_EIR_UN                     (0x00080000)
 
 /* Bit definitions and macros for FEC_RDAR */
-#define FEC_RDAR_R_DES_ACTIVE  (0x01000000)
+#define FEC_RDAR_R_DES_ACTIVE          (0x01000000)
 
 /* Bit definitions and macros for FEC_TDAR */
-#define FEC_TDAR_X_DES_ACTIVE  (0x01000000)
+#define FEC_TDAR_X_DES_ACTIVE          (0x01000000)
 
 /* Bit definitions and macros for FEC_ECR */
-#define FEC_ECR_ETHER_EN       (0x00000002)
-#define FEC_ECR_RESET          (0x00000001)
+#define FEC_ECR_ETHER_EN               (0x00000002)
+#define FEC_ECR_RESET                  (0x00000001)
 
 /* Bit definitions and macros for FEC_MMFR */
-#define FEC_MMFR_DATA(x)       (((x)&0xFFFF))
-#define FEC_MMFR_ST(x)         (((x)&0x03)<<30)
-#define FEC_MMFR_ST_01         (0x40000000)
-#define FEC_MMFR_OP_RD         (0x20000000)
-#define FEC_MMFR_OP_WR         (0x10000000)
-#define FEC_MMFR_PA(x)         (((x)&0x1F)<<23)
-#define FEC_MMFR_RA(x)         (((x)&0x1F)<<18)
-#define FEC_MMFR_TA(x)         (((x)&0x03)<<16)
-#define FEC_MMFR_TA_10         (0x00020000)
+#define FEC_MMFR_DATA(x)               (((x)&0xFFFF))
+#define FEC_MMFR_ST(x)                 (((x)&0x03)<<30)
+#define FEC_MMFR_ST_01                 (0x40000000)
+#define FEC_MMFR_OP_RD                 (0x20000000)
+#define FEC_MMFR_OP_WR                 (0x10000000)
+#define FEC_MMFR_PA(x)                 (((x)&0x1F)<<23)
+#define FEC_MMFR_RA(x)                 (((x)&0x1F)<<18)
+#define FEC_MMFR_TA(x)                 (((x)&0x03)<<16)
+#define FEC_MMFR_TA_10                 (0x00020000)
 
 /* Bit definitions and macros for FEC_MSCR */
-#define FEC_MSCR_DIS_PREAMBLE  (0x00000080)
-#define FEC_MSCR_MII_SPEED(x)  (((x)&0x3F)<<1)
+#define FEC_MSCR_DIS_PREAMBLE          (0x00000080)
+#define FEC_MSCR_MII_SPEED(x)          (((x)&0x3F)<<1)
 
 /* Bit definitions and macros for FEC_MIBC */
-#define FEC_MIBC_MIB_DISABLE   (0x80000000)
-#define FEC_MIBC_MIB_IDLE      (0x40000000)
+#define FEC_MIBC_MIB_DISABLE           (0x80000000)
+#define FEC_MIBC_MIB_IDLE              (0x40000000)
 
 /* Bit definitions and macros for FEC_RCR */
-#define FEC_RCR_MAX_FL(x)      (((x)&0x7FF)<<16)
-#define FEC_RCR_FCE            (0x00000020)
-#define FEC_RCR_BC_REJ         (0x00000010)
-#define FEC_RCR_PROM           (0x00000008)
-#define FEC_RCR_MII_MODE       (0x00000004)
-#define FEC_RCR_DRT            (0x00000002)
-#define FEC_RCR_LOOP           (0x00000001)
+#define FEC_RCR_MAX_FL(x)              (((x)&0x7FF)<<16)
+#define FEC_RCR_FCE                    (0x00000020)
+#define FEC_RCR_BC_REJ                 (0x00000010)
+#define FEC_RCR_PROM                   (0x00000008)
+#define FEC_RCR_MII_MODE               (0x00000004)
+#define FEC_RCR_DRT                    (0x00000002)
+#define FEC_RCR_LOOP                   (0x00000001)
 
 /* Bit definitions and macros for FEC_TCR */
-#define FEC_TCR_RFC_PAUSE      (0x00000010)
-#define FEC_TCR_TFC_PAUSE      (0x00000008)
-#define FEC_TCR_FDEN           (0x00000004)
-#define FEC_TCR_HBC            (0x00000002)
-#define FEC_TCR_GTS            (0x00000001)
+#define FEC_TCR_RFC_PAUSE              (0x00000010)
+#define FEC_TCR_TFC_PAUSE              (0x00000008)
+#define FEC_TCR_FDEN                   (0x00000004)
+#define FEC_TCR_HBC                    (0x00000002)
+#define FEC_TCR_GTS                    (0x00000001)
 
 /* Bit definitions and macros for FEC_PAUR */
-#define FEC_PAUR_PADDR2(x)     (((x)&0xFFFF)<<16)
-#define FEC_PAUR_TYPE(x)       ((x)&0xFFFF)
+#define FEC_PAUR_PADDR2(x)             (((x)&0xFFFF)<<16)
+#define FEC_PAUR_TYPE(x)               ((x)&0xFFFF)
 
 /* Bit definitions and macros for FEC_OPD */
-#define FEC_OPD_PAUSE_DUR(x)   (((x)&0x0000FFFF)<<0)
-#define FEC_OPD_OPCODE(x)      (((x)&0x0000FFFF)<<16)
+#define FEC_OPD_PAUSE_DUR(x)           (((x)&0x0000FFFF)<<0)
+#define FEC_OPD_OPCODE(x)              (((x)&0x0000FFFF)<<16)
 
 /* Bit definitions and macros for FEC_TFWR */
-#define FEC_TFWR_X_WMRK(x)     ((x)&0x03)
-#define FEC_TFWR_X_WMRK_64     (0x01)
-#define FEC_TFWR_X_WMRK_128    (0x02)
-#define FEC_TFWR_X_WMRK_192    (0x03)
+#define FEC_TFWR_X_WMRK(x)             ((x)&0x03)
+#define FEC_TFWR_X_WMRK_64             (0x01)
+#define FEC_TFWR_X_WMRK_128            (0x02)
+#define FEC_TFWR_X_WMRK_192            (0x03)
 
 /* Bit definitions and macros for FEC_FRBR */
-#define FEC_FRBR_R_BOUND(x)    (((x)&0xFF)<<2)
+#define FEC_FRBR_R_BOUND(x)            (((x)&0xFF)<<2)
 
 /* Bit definitions and macros for FEC_FRSR */
-#define FEC_FRSR_R_FSTART(x)   (((x)&0xFF)<<2)
+#define FEC_FRSR_R_FSTART(x)           (((x)&0xFF)<<2)
 
 /* Bit definitions and macros for FEC_ERDSR */
 #define FEC_ERDSR_R_DES_START(x)       (((x)&0x3FFFFFFF)<<2)
@@ -348,8 +348,7 @@ typedef struct fec {
 /* Bit definitions and macros for FEC_EMRBR */
 #define FEC_EMRBR_R_BUF_SIZE(x)                (((x)&0x7F)<<4)
 
-#define        FEC_RESET_DELAY         100
-#define FEC_RX_TOUT            100
+#define        FEC_RESET_DELAY                 100
+#define FEC_RX_TOUT                    100
 
-#endif                         /* CONFIG_MCFFEC */
 #endif                         /* fec_h */
diff --git a/include/asm-m68k/fsl_mcdmafec.h b/include/asm-m68k/fsl_mcdmafec.h
new file mode 100644 (file)
index 0000000..82da593
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * fsl_mcdmafec.h -- Multi-channel DMA Fast Ethernet Controller definitions
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef fsl_mcdmafec_h
+#define fsl_mcdmafec_h
+
+/* Re-use of the definitions */
+#include <asm/fec.h>
+
+typedef struct fecdma {
+       u32 rsvd0;              /* 0x000 */
+       u32 eir;                /* 0x004 */
+       u32 eimr;               /* 0x008 */
+       u32 rsvd1[6];           /* 0x00C - 0x023 */
+       u32 ecr;                /* 0x024 */
+       u32 rsvd2[6];           /* 0x028 - 0x03F */
+       u32 mmfr;               /* 0x040 */
+       u32 mscr;               /* 0x044 */
+       u32 rsvd3[7];           /* 0x048 - 0x063 */
+       u32 mibc;               /* 0x064 */
+       u32 rsvd4[7];           /* 0x068 - 0x083 */
+       u32 rcr;                /* 0x084 */
+       u32 rhr;                /* 0x088 */
+       u32 rsvd5[14];          /* 0x08C - 0x0C3 */
+       u32 tcr;                /* 0x0C4 */
+       u32 rsvd6[7];           /* 0x0C8 - 0x0E3 */
+       u32 palr;               /* 0x0E4 */
+       u32 paur;               /* 0x0E8 */
+       u32 opd;                /* 0x0EC */
+       u32 rsvd7[10];          /* 0x0F0 - 0x117 */
+       u32 iaur;               /* 0x118 */
+       u32 ialr;               /* 0x11C */
+       u32 gaur;               /* 0x120 */
+       u32 galr;               /* 0x124 */
+       u32 rsvd8[7];           /* 0x128 - 0x143 */
+       u32 tfwr;               /* 0x144 */
+       u32 rsvd9[14];          /* 0x148 - 0x17F */
+       u32 fmc;                /* 0x180 */
+       u32 rfdr;               /* 0x184 */
+       u32 rfsr;               /* 0x188 */
+       u32 rfcr;               /* 0x18C */
+       u32 rlrfp;              /* 0x190 */
+       u32 rlwfp;              /* 0x194 */
+       u32 rfar;               /* 0x198 */
+       u32 rfrp;               /* 0x19C */
+       u32 rfwp;               /* 0x1A0 */
+       u32 tfdr;               /* 0x1A4 */
+       u32 tfsr;               /* 0x1A8 */
+       u32 tfcr;               /* 0x1AC */
+       u32 tlrfp;              /* 0x1B0 */
+       u32 tlwfp;              /* 0x1B4 */
+       u32 tfar;               /* 0x1B8 */
+       u32 tfrp;               /* 0x1BC */
+       u32 tfwp;               /* 0x1C0 */
+       u32 frst;               /* 0x1C4 */
+       u32 ctcwr;              /* 0x1C8 */
+} fecdma_t;
+
+struct fec_info_dma {
+       int index;
+       u32 iobase;
+       u32 pinmux;
+       u32 miibase;
+       int phy_addr;
+       int dup_spd;
+       char *phy_name;
+       int phyname_init;
+       cbd_t *rxbd;            /* Rx BD */
+       cbd_t *txbd;            /* Tx BD */
+       uint rxIdx;
+       uint txIdx;
+       char *txbuf;
+       int initialized;
+       struct fec_info_dma *next;
+
+       u16 rxTask;             /* DMA receive Task Number */
+       u16 txTask;             /* DMA Transmit Task Number */
+       u16 rxPri;              /* DMA Receive Priority */
+       u16 txPri;              /* DMA Transmit Priority */
+       u16 rxInit;             /* DMA Receive Initiator */
+       u16 txInit;             /* DMA Transmit Initiator */
+       u16 usedTbdIdx;         /* next transmit BD to clean */
+       u16 cleanTbdNum;        /* the number of available transmit BDs */
+};
+
+/* Bit definitions and macros for IEVENT */
+#define FEC_EIR_TXERR          (0x00040000)
+#define FEC_EIR_RXERR          (0x00020000)
+#undef FEC_EIR_CLEAR_ALL
+#define FEC_EIR_CLEAR_ALL      (0xFFFE0000)
+
+/* Bit definitions and macros for R_HASH */
+#define FEC_RHASH_FCE_DC       (0x80000000)
+#define FEC_RHASH_MULTCAST     (0x40000000)
+#define FEC_RHASH_HASH(x)      (((x)&0x0000003F)<<24)
+
+/* Bit definitions and macros for FEC_TFWR */
+#undef FEC_TFWR_X_WMRK
+#undef FEC_TFWR_X_WMRK_64
+#undef FEC_TFWR_X_WMRK_128
+#undef FEC_TFWR_X_WMRK_192
+
+#define FEC_TFWR_X_WMRK(x)     ((x)&0x0F)
+#define FEC_TFWR_X_WMRK_64     (0x00)
+#define FEC_TFWR_X_WMRK_128    (0x01)
+#define FEC_TFWR_X_WMRK_192    (0x02)
+#define FEC_TFWR_X_WMRK_256    (0x03)
+#define FEC_TFWR_X_WMRK_320    (0x04)
+#define FEC_TFWR_X_WMRK_384    (0x05)
+#define FEC_TFWR_X_WMRK_448    (0x06)
+#define FEC_TFWR_X_WMRK_512    (0x07)
+#define FEC_TFWR_X_WMRK_576    (0x08)
+#define FEC_TFWR_X_WMRK_640    (0x09)
+#define FEC_TFWR_X_WMRK_704    (0x0A)
+#define FEC_TFWR_X_WMRK_768    (0x0B)
+#define FEC_TFWR_X_WMRK_832    (0x0C)
+#define FEC_TFWR_X_WMRK_896    (0x0D)
+#define FEC_TFWR_X_WMRK_960    (0x0E)
+#define FEC_TFWR_X_WMRK_1024   (0x0F)
+
+/* FIFO definitions */
+/* Bit definitions and macros for FSTAT */
+#define FIFO_STAT_IP           (0x80000000)
+#define FIFO_STAT_FRAME(x)     (((x)&0x0000000F)<<24)
+#define FIFO_STAT_FAE          (0x00800000)
+#define FIFO_STAT_RXW          (0x00400000)
+#define FIFO_STAT_UF           (0x00200000)
+#define FIFO_STAT_OF           (0x00100000)
+#define FIFO_STAT_FR           (0x00080000)
+#define FIFO_STAT_FULL         (0x00040000)
+#define FIFO_STAT_ALARM                (0x00020000)
+#define FIFO_STAT_EMPTY                (0x00010000)
+
+/* Bit definitions and macros for FCTRL */
+#define FIFO_CTRL_WCTL         (0x40000000)
+#define FIFO_CTRL_WFR          (0x20000000)
+#define FIFO_CTRL_FRAME                (0x08000000)
+#define FIFO_CTRL_GR(x)                (((x)&0x00000007)<<24)
+#define FIFO_CTRL_IPMASK       (0x00800000)
+#define FIFO_CTRL_FAEMASK      (0x00400000)
+#define FIFO_CTRL_RXWMASK      (0x00200000)
+#define FIFO_CTRL_UFMASK       (0x00100000)
+#define FIFO_CTRL_OFMASK       (0x00080000)
+
+int fecpin_setclear(struct eth_device *dev, int setclear);
+void mii_init(void);
+uint mii_send(uint mii_cmd);
+int mii_discover_phy(struct eth_device *dev);
+int mcffec_miiphy_read(char *devname, unsigned char addr,
+                      unsigned char reg, unsigned short *value);
+int mcffec_miiphy_write(char *devname, unsigned char addr,
+                       unsigned char reg, unsigned short value);
+
+#endif                         /* fsl_mcdmafec_h */
index 9d9894b1a2e0e99dba4114667feeff80f743a5f4..1e26eb037eef92b1a12e8e2d96921a044fe6f2f5 100644 (file)
@@ -53,6 +53,9 @@ typedef       struct  global_data {
        unsigned long   env_addr;       /* Address  of Environment struct       */
        unsigned long   env_valid;      /* Checksum of Environment valid?       */
        unsigned long   have_console;   /* serial_init() was called             */
+#if defined(CONFIG_LCD) || defined(CONFIG_VIDEO)
+       unsigned long   fb_base;        /* Base addr of framebuffer memory */
+#endif
 #ifdef CONFIG_BOARD_TYPES
        unsigned long   board_type;
 #endif
index ffb9a377ba51d487497fd2a92d11dd148b7c013d..916bf966135bc172dc6e12855907d4e98cbdaa8b 100644 (file)
 #ifndef __IMMAP_H
 #define __IMMAP_H
 
+#ifdef CONFIG_M52277
+#include <asm/immap_5227x.h>
+#include <asm/m5227x.h>
+
+#define CFG_UART_BASE          (MMAP_UART0 + (CFG_UART_PORT * 0x4000))
+
+#define CFG_MCFRTC_BASE                (MMAP_RTC)
+
+#ifdef CONFIG_LCD
+#define        CFG_LCD_BASE            (MMAP_LCD)
+#endif
+
+/* Timer */
+#ifdef CONFIG_MCFTMR
+#define CFG_UDELAY_BASE                (MMAP_DTMR0)
+#define CFG_TMR_BASE           (MMAP_DTMR1)
+#define CFG_TMRPND_REG         (((volatile int0_t *)(CFG_INTR_BASE))->iprh0)
+#define CFG_TMRINTR_NO         (INT0_HI_DTMR1)
+#define CFG_TMRINTR_MASK       (INTC_IPRH_INT33)
+#define CFG_TMRINTR_PEND       (CFG_TMRINTR_MASK)
+#define CFG_TMRINTR_PRI                (6)
+#define CFG_TIMER_PRESCALER    (((gd->bus_clk / 1000000) - 1) << 8)
+#endif
+
+#ifdef CONFIG_MCFPIT
+#define CFG_UDELAY_BASE                (MMAP_PIT0)
+#define CFG_PIT_BASE           (MMAP_PIT1)
+#define CFG_PIT_PRESCALE       (6)
+#endif
+
+#define CFG_INTR_BASE          (MMAP_INTC0)
+#define CFG_NUM_IRQS           (128)
+#endif                         /* CONFIG_M52277 */
+
 #ifdef CONFIG_M5235
 #include <asm/immap_5235.h>
 #include <asm/m5235.h>
 #endif
 #endif                         /* CONFIG_M5282 */
 
-#ifdef CONFIG_M5329
+#if defined(CONFIG_M5329) || defined(CONFIG_M5373)
 #include <asm/immap_5329.h>
 #include <asm/m5329.h>
 
 
 #define CFG_INTR_BASE          (MMAP_INTC0)
 #define CFG_NUM_IRQS           (128)
-#endif                         /* CONFIG_M5329 */
+#endif                         /* CONFIG_M5329 && CONFIG_M5373 */
 
 #ifdef CONFIG_M54455
 #include <asm/immap_5445x.h>
 #define CFG_NUM_IRQS           (128)
 
 #ifdef CONFIG_PCI
-#define CFG_PCI_BAR0           CFG_SDRAM_BASE
-#define CFG_PCI_BAR4           CFG_SDRAM_BASE
-#define CFG_PCI_TBATR0         (CFG_SDRAM_BASE)
-#define CFG_PCI_TBATR4         (CFG_SDRAM_BASE)
+#define CFG_PCI_BAR0           (CFG_MBAR)
+#define CFG_PCI_BAR5           (CFG_SDRAM_BASE)
+#define CFG_PCI_TBATR0         (CFG_MBAR)
+#define CFG_PCI_TBATR5         (CFG_SDRAM_BASE)
 #endif
 #endif                         /* CONFIG_M54455 */
 
+#ifdef CONFIG_M547x
+#include <asm/immap_547x_8x.h>
+#include <asm/m547x_8x.h>
+
+#ifdef CONFIG_FSLDMAFEC
+#define CFG_FEC0_IOBASE                (MMAP_FEC0)
+#define CFG_FEC1_IOBASE                (MMAP_FEC1)
+
+#define FEC0_RX_TASK           0
+#define FEC0_TX_TASK           1
+#define FEC0_RX_PRIORITY       6
+#define FEC0_TX_PRIORITY       7
+#define FEC0_RX_INIT           16
+#define FEC0_TX_INIT           17
+#define FEC1_RX_TASK           2
+#define FEC1_TX_TASK           3
+#define FEC1_RX_PRIORITY       6
+#define FEC1_TX_PRIORITY       7
+#define FEC1_RX_INIT           30
+#define FEC1_TX_INIT           31
+#endif
+
+#define CFG_UART_BASE          (MMAP_UART0 + (CFG_UART_PORT * 0x100))
+
+#ifdef CONFIG_SLTTMR
+#define CFG_UDELAY_BASE                (MMAP_SLT1)
+#define CFG_TMR_BASE           (MMAP_SLT0)
+#define CFG_TMRPND_REG         (((volatile int0_t *)(CFG_INTR_BASE))->iprh0)
+#define CFG_TMRINTR_NO         (INT0_HI_SLT0)
+#define CFG_TMRINTR_MASK       (INTC_IPRH_INT54)
+#define CFG_TMRINTR_PEND       (CFG_TMRINTR_MASK)
+#define CFG_TMRINTR_PRI                (0x1E)
+#define CFG_TIMER_PRESCALER    (gd->bus_clk / 1000000)
+#endif
+
+#define CFG_INTR_BASE          (MMAP_INTC0)
+#define CFG_NUM_IRQS           (128)
+
+#ifdef CONFIG_PCI
+#define CFG_PCI_BAR0           (0x40000000)
+#define CFG_PCI_BAR1           (CFG_SDRAM_BASE)
+#define CFG_PCI_TBATR0         (CFG_MBAR)
+#define CFG_PCI_TBATR1         (CFG_SDRAM_BASE)
+#endif
+#endif                         /* CONFIG_M547x */
+
+#ifdef CONFIG_M548x
+#include <asm/immap_547x_8x.h>
+#include <asm/m547x_8x.h>
+
+#ifdef CONFIG_FSLDMAFEC
+#define CFG_FEC0_IOBASE                (MMAP_FEC0)
+#define CFG_FEC1_IOBASE                (MMAP_FEC1)
+
+#define FEC0_RX_TASK           0
+#define FEC0_TX_TASK           1
+#define FEC0_RX_PRIORITY       6
+#define FEC0_TX_PRIORITY       7
+#define FEC0_RX_INIT           16
+#define FEC0_TX_INIT           17
+#define FEC1_RX_TASK           2
+#define FEC1_TX_TASK           3
+#define FEC1_RX_PRIORITY       6
+#define FEC1_TX_PRIORITY       7
+#define FEC1_RX_INIT           30
+#define FEC1_TX_INIT           31
+#endif
+
+#define CFG_UART_BASE          (MMAP_UART0 + (CFG_UART_PORT * 0x100))
+
+/* Timer */
+#ifdef CONFIG_SLTTMR
+#define CFG_UDELAY_BASE                (MMAP_SLT1)
+#define CFG_TMR_BASE           (MMAP_SLT0)
+#define CFG_TMRPND_REG         (((volatile int0_t *)(CFG_INTR_BASE))->iprh0)
+#define CFG_TMRINTR_NO         (INT0_HI_SLT0)
+#define CFG_TMRINTR_MASK       (INTC_IPRH_INT54)
+#define CFG_TMRINTR_PEND       (CFG_TMRINTR_MASK)
+#define CFG_TMRINTR_PRI                (0x1E)
+#define CFG_TIMER_PRESCALER    (gd->bus_clk / 1000000)
+#endif
+
+#define CFG_INTR_BASE          (MMAP_INTC0)
+#define CFG_NUM_IRQS           (128)
+
+#ifdef CONFIG_PCI
+#define CFG_PCI_BAR0           (CFG_MBAR)
+#define CFG_PCI_BAR1           (CFG_SDRAM_BASE)
+#define CFG_PCI_TBATR0         (CFG_MBAR)
+#define CFG_PCI_TBATR1         (CFG_SDRAM_BASE)
+#endif
+#endif                         /* CONFIG_M548x */
+
 #endif                         /* __IMMAP_H */
diff --git a/include/asm-m68k/immap_5227x.h b/include/asm-m68k/immap_5227x.h
new file mode 100644 (file)
index 0000000..1d1e6f1
--- /dev/null
@@ -0,0 +1,343 @@
+/*
+ * MCF5227x Internal Memory Map
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __IMMAP_5227X__
+#define __IMMAP_5227X__
+
+/* Module Base Addresses */
+#define MMAP_SCM1      (CFG_MBAR + 0x00000000)
+#define MMAP_XBS       (CFG_MBAR + 0x00004000)
+#define MMAP_FBCS      (CFG_MBAR + 0x00008000)
+#define MMAP_CAN       (CFG_MBAR + 0x00020000)
+#define MMAP_RTC       (CFG_MBAR + 0x0003C000)
+#define MMAP_SCM2      (CFG_MBAR + 0x00040010)
+#define MMAP_SCM3      (CFG_MBAR + 0x00040070)
+#define MMAP_EDMA      (CFG_MBAR + 0x00044000)
+#define MMAP_INTC0     (CFG_MBAR + 0x00048000)
+#define MMAP_INTC1     (CFG_MBAR + 0x0004C000)
+#define MMAP_IACK      (CFG_MBAR + 0x00054000)
+#define MMAP_I2C       (CFG_MBAR + 0x00058000)
+#define MMAP_DSPI      (CFG_MBAR + 0x0005C000)
+#define MMAP_UART0     (CFG_MBAR + 0x00060000)
+#define MMAP_UART1     (CFG_MBAR + 0x00064000)
+#define MMAP_UART2     (CFG_MBAR + 0x00068000)
+#define MMAP_DTMR0     (CFG_MBAR + 0x00070000)
+#define MMAP_DTMR1     (CFG_MBAR + 0x00074000)
+#define MMAP_DTMR2     (CFG_MBAR + 0x00078000)
+#define MMAP_DTMR3     (CFG_MBAR + 0x0007C000)
+#define MMAP_PIT0      (CFG_MBAR + 0x00080000)
+#define MMAP_PIT1      (CFG_MBAR + 0x00084000)
+#define MMAP_PWM       (CFG_MBAR + 0x00090000)
+#define MMAP_EPORT     (CFG_MBAR + 0x00094000)
+#define MMAP_RCM       (CFG_MBAR + 0x000A0000)
+#define MMAP_CCM       (CFG_MBAR + 0x000A0004)
+#define MMAP_GPIO      (CFG_MBAR + 0x000A4000)
+#define MMAP_ADC       (CFG_MBAR + 0x000A8000)
+#define MMAP_LCD       (CFG_MBAR + 0x000AC000)
+#define MMAP_LCD_BGLUT (CFG_MBAR + 0x000AC800)
+#define MMAP_LCD_GWLUT (CFG_MBAR + 0x000ACC00)
+#define MMAP_USBHW     (CFG_MBAR + 0x000B0000)
+#define MMAP_USBCAPS   (CFG_MBAR + 0x000B0100)
+#define MMAP_USBEHCI   (CFG_MBAR + 0x000B0140)
+#define MMAP_USBOTG    (CFG_MBAR + 0x000B01A0)
+#define MMAP_SDRAM     (CFG_MBAR + 0x000B8000)
+#define MMAP_SSI       (CFG_MBAR + 0x000BC000)
+#define MMAP_PLL       (CFG_MBAR + 0x000C0000)
+
+#include <asm/coldfire/crossbar.h>
+#include <asm/coldfire/dspi.h>
+#include <asm/coldfire/edma.h>
+#include <asm/coldfire/flexbus.h>
+#include <asm/coldfire/lcd.h>
+#include <asm/coldfire/ssi.h>
+
+/* Interrupt Controller (INTC) */
+typedef struct int0_ctrl {
+       u32 iprh0;              /* 0x00 Pending Register High */
+       u32 iprl0;              /* 0x04 Pending Register Low */
+       u32 imrh0;              /* 0x08 Mask Register High */
+       u32 imrl0;              /* 0x0C Mask Register Low */
+       u32 frch0;              /* 0x10 Force Register High */
+       u32 frcl0;              /* 0x14 Force Register Low */
+       u16 res1;               /* 0x18 - 0x19 */
+       u16 icfg0;              /* 0x1A Configuration Register */
+       u8 simr0;               /* 0x1C Set Interrupt Mask */
+       u8 cimr0;               /* 0x1D Clear Interrupt Mask */
+       u8 clmask0;             /* 0x1E Current Level Mask */
+       u8 slmask;              /* 0x1F Saved Level Mask */
+       u32 res2[8];            /* 0x20 - 0x3F */
+       u8 icr0[64];            /* 0x40 - 0x7F Control registers */
+       u32 res3[24];           /* 0x80 - 0xDF */
+       u8 swiack0;             /* 0xE0 Software Interrupt ack */
+       u8 res4[3];             /* 0xE1 - 0xE3 */
+       u8 Lniack0_1;           /* 0xE4 Level n interrupt ack */
+       u8 res5[3];             /* 0xE5 - 0xE7 */
+       u8 Lniack0_2;           /* 0xE8 Level n interrupt ack */
+       u8 res6[3];             /* 0xE9 - 0xEB */
+       u8 Lniack0_3;           /* 0xEC Level n interrupt ack */
+       u8 res7[3];             /* 0xED - 0xEF */
+       u8 Lniack0_4;           /* 0xF0 Level n interrupt ack */
+       u8 res8[3];             /* 0xF1 - 0xF3 */
+       u8 Lniack0_5;           /* 0xF4 Level n interrupt ack */
+       u8 res9[3];             /* 0xF5 - 0xF7 */
+       u8 Lniack0_6;           /* 0xF8 Level n interrupt ack */
+       u8 resa[3];             /* 0xF9 - 0xFB */
+       u8 Lniack0_7;           /* 0xFC Level n interrupt ack */
+       u8 resb[3];             /* 0xFD - 0xFF */
+} int0_t;
+
+typedef struct int1_ctrl {
+       /* Interrupt Controller 1 */
+       u32 iprh1;              /* 0x00 Pending Register High */
+       u32 iprl1;              /* 0x04 Pending Register Low */
+       u32 imrh1;              /* 0x08 Mask Register High */
+       u32 imrl1;              /* 0x0C Mask Register Low */
+       u32 frch1;              /* 0x10 Force Register High */
+       u32 frcl1;              /* 0x14 Force Register Low */
+       u16 res1;               /* 0x18 */
+       u16 icfg1;              /* 0x1A Configuration Register */
+       u8 simr1;               /* 0x1C Set Interrupt Mask */
+       u8 cimr1;               /* 0x1D Clear Interrupt Mask */
+       u16 res2;               /* 0x1E - 0x1F */
+       u32 res3[8];            /* 0x20 - 0x3F */
+       u8 icr1[64];            /* 0x40 - 0x7F */
+       u32 res4[24];           /* 0x80 - 0xDF */
+       u8 swiack1;             /* 0xE0 Software Interrupt ack */
+       u8 res5[3];             /* 0xE1 - 0xE3 */
+       u8 Lniack1_1;           /* 0xE4 Level n interrupt ack */
+       u8 res6[3];             /* 0xE5 - 0xE7 */
+       u8 Lniack1_2;           /* 0xE8 Level n interrupt ack */
+       u8 res7[3];             /* 0xE9 - 0xEB */
+       u8 Lniack1_3;           /* 0xEC Level n interrupt ack */
+       u8 res8[3];             /* 0xED - 0xEF */
+       u8 Lniack1_4;           /* 0xF0 Level n interrupt ack */
+       u8 res9[3];             /* 0xF1 - 0xF3 */
+       u8 Lniack1_5;           /* 0xF4 Level n interrupt ack */
+       u8 resa[3];             /* 0xF5 - 0xF7 */
+       u8 Lniack1_6;           /* 0xF8 Level n interrupt ack */
+       u8 resb[3];             /* 0xF9 - 0xFB */
+       u8 Lniack1_7;           /* 0xFC Level n interrupt ack */
+       u8 resc[3];             /* 0xFD - 0xFF */
+} int1_t;
+
+/* Global Interrupt Acknowledge (IACK) */
+typedef struct iack {
+       u8 resv0[0xE0];
+       u8 gswiack;
+       u8 resv1[0x3];
+       u8 gl1iack;
+       u8 resv2[0x3];
+       u8 gl2iack;
+       u8 resv3[0x3];
+       u8 gl3iack;
+       u8 resv4[0x3];
+       u8 gl4iack;
+       u8 resv5[0x3];
+       u8 gl5iack;
+       u8 resv6[0x3];
+       u8 gl6iack;
+       u8 resv7[0x3];
+       u8 gl7iack;
+} iack_t;
+
+/* Edge Port Module (EPORT) */
+typedef struct eport {
+       u16 eppar;
+       u8 epddr;
+       u8 epier;
+       u8 epdr;
+       u8 eppdr;
+       u8 epfr;
+} eport_t;
+
+/* Reset Controller Module (RCM) */
+typedef struct rcm {
+       u8 rcr;
+       u8 rsr;
+} rcm_t;
+
+/* Chip Configuration Module (CCM) */
+typedef struct ccm {
+       u16 ccr;                /* Chip Configuration (Rd-only) */
+       u16 resv1;
+       u16 rcon;               /* Reset Configuration (Rd-only) */
+       u16 cir;                /* Chip Identification (Rd-only) */
+       u32 resv2;
+       u16 misccr;             /* Miscellaneous Control */
+       u16 cdr;                /* Clock Divider */
+       u16 uocsr;              /* USB On-the-Go Controller Status */
+       u16 resv4;
+       u16 sbfsr;              /* Serial Boot Status */
+       u16 sbfcr;              /* Serial Boot Control */
+} ccm_t;
+
+/* General Purpose I/O Module (GPIO) */
+typedef struct gpio {
+       /* Port Output Data Registers */
+       u8 podr_be;             /* 0x00 */
+       u8 podr_cs;             /* 0x01 */
+       u8 podr_fbctl;          /* 0x02 */
+       u8 podr_i2c;            /* 0x03 */
+       u8 rsvd1;               /* 0x04 */
+       u8 podr_uart;           /* 0x05 */
+       u8 podr_dspi;           /* 0x06 */
+       u8 podr_timer;          /* 0x07 */
+       u8 podr_lcdctl;         /* 0x08 */
+       u8 podr_lcddatah;       /* 0x09 */
+       u8 podr_lcddatam;       /* 0x0A */
+       u8 podr_lcddatal;       /* 0x0B */
+
+       /* Port Data Direction Registers */
+       u8 pddr_be;             /* 0x0C */
+       u8 pddr_cs;             /* 0x0D */
+       u8 pddr_fbctl;          /* 0x0E */
+       u8 pddr_i2c;            /* 0x0F */
+       u8 rsvd2;               /* 0x10 */
+       u8 pddr_uart;           /* 0x11 */
+       u8 pddr_dspi;           /* 0x12 */
+       u8 pddr_timer;          /* 0x13 */
+       u8 pddr_lcdctl;         /* 0x14 */
+       u8 pddr_lcddatah;       /* 0x15 */
+       u8 pddr_lcddatam;       /* 0x16 */
+       u8 pddr_lcddatal;       /* 0x17 */
+
+       /* Port Pin Data/Set Data Registers */
+       u8 ppdsdr_be;           /* 0x18 */
+       u8 ppdsdr_cs;           /* 0x19 */
+       u8 ppdsdr_fbctl;        /* 0x1A */
+       u8 ppdsdr_i2c;          /* 0x1B */
+       u8 rsvd3;               /* 0x1C */
+       u8 ppdsdr_uart;         /* 0x1D */
+       u8 ppdsdr_dspi;         /* 0x1E */
+       u8 ppdsdr_timer;        /* 0x1F */
+       u8 ppdsdr_lcdctl;       /* 0x20 */
+       u8 ppdsdr_lcddatah;     /* 0x21 */
+       u8 ppdsdr_lcddatam;     /* 0x22 */
+       u8 ppdsdr_lcddatal;     /* 0x23 */
+
+       /* Port Clear Output Data Registers */
+       u8 pclrr_be;            /* 0x24 */
+       u8 pclrr_cs;            /* 0x25 */
+       u8 pclrr_fbctl;         /* 0x26 */
+       u8 pclrr_i2c;           /* 0x27 */
+       u8 rsvd4;               /* 0x28 */
+       u8 pclrr_uart;          /* 0x29 */
+       u8 pclrr_dspi;          /* 0x2A */
+       u8 pclrr_timer;         /* 0x2B */
+       u8 pclrr_lcdctl;        /* 0x2C */
+       u8 pclrr_lcddatah;      /* 0x2D */
+       u8 pclrr_lcddatam;      /* 0x2E */
+       u8 pclrr_lcddatal;      /* 0x2F */
+
+       /* Pin Assignment Registers */
+       u8 par_be;              /* 0x30 */
+       u8 par_cs;              /* 0x31 */
+       u8 par_fbctl;           /* 0x32 */
+       u8 par_i2c;             /* 0x33 */
+       u16 par_uart;           /* 0x34 */
+       u8 par_dspi;            /* 0x36 */
+       u8 par_timer;           /* 0x37 */
+       u8 par_lcdctl;          /* 0x38 */
+       u8 par_irq;             /* 0x39 */
+       u16 rsvd6;              /* 0x3A - 0x3B */
+       u32 par_lcdh;           /* 0x3C */
+       u32 par_lcdl;           /* 0x40 */
+
+       /* Mode select control registers */
+       u8 mscr_fb;             /* 0x44 */
+       u8 mscr_sdram;          /* 0x45 */
+
+       u16 rsvd7;              /* 0x46 - 0x47 */
+       u8 dscr_dspi;           /* 0x48 */
+       u8 dscr_timer;          /* 0x49 */
+       u8 dscr_i2c;            /* 0x4A */
+       u8 dscr_lcd;            /* 0x4B */
+       u8 dscr_debug;          /* 0x4C */
+       u8 dscr_clkrst;         /* 0x4D */
+       u8 dscr_irq;            /* 0x4E */
+       u8 dscr_uart;           /* 0x4F */
+} gpio_t;
+
+/* SDRAM Controller (SDRAMC) */
+typedef struct sdramc {
+       u32 sdmr;               /* Mode/Extended Mode */
+       u32 sdcr;               /* Control */
+       u32 sdcfg1;             /* Configuration 1 */
+       u32 sdcfg2;             /* Chip Select */
+       u8 resv0[0x100];
+       u32 sdcs0;              /* Mode/Extended Mode */
+       u32 sdcs1;              /* Mode/Extended Mode */
+} sdramc_t;
+
+/* Phase Locked Loop (PLL) */
+typedef struct pll {
+       u32 pcr;                /* PLL Control */
+       u32 psr;                /* PLL Status */
+} pll_t;
+
+/* System Control Module register  */
+typedef struct scm1 {
+       u32 mpr;                /* 0x00 Master Privilege */
+       u32 rsvd1[7];
+       u32 pacra;              /* 0x20 */
+       u32 pacrb;              /* 0x24 */
+       u32 pacrc;              /* 0x28 */
+       u32 pacrd;              /* 0x2C */
+       u32 rsvd2[4];
+       u32 pacre;              /* 0x40 */
+       u32 pacrf;              /* 0x44 */
+       u32 pacrg;              /* 0x48 */
+       u32 rsvd3;
+       u32 pacri;              /* 0x50 */
+} scm1_t;
+
+typedef struct scm2_ctrl {
+       u8 res1[3];             /* 0x00 - 0x02 */
+       u8 wcr;                 /* 0x03 wakeup control */
+       u16 res2;               /* 0x04 - 0x05 */
+       u16 cwcr;               /* 0x06 Core Watchdog Control */
+       u8 res3[3];             /* 0x08 - 0x0A */
+       u8 cwsr;                /* 0x0B Core Watchdog Service */
+       u8 res4[2];             /* 0x0C - 0x0D */
+       u8 scmisr;              /* 0x0F Interrupt Status */
+       u32 res5;               /* 0x20 */
+       u32 bcr;                /* 0x24 Burst Configuration */
+} scm2_t;
+
+typedef struct scm3_ctrl {
+       u32 cfadr;              /* 0x00 Core Fault Address */
+       u8 res7;                /* 0x04 */
+       u8 cfier;               /* 0x05 Core Fault Interrupt Enable */
+       u8 cfloc;               /* 0x06 Core Fault Location */
+       u8 cfatr;               /* 0x07 Core Fault Attributes */
+       u32 cfdtr;              /* 0x08 Core Fault Data */
+} scm3_t;
+
+typedef struct rtcex {
+       u32 rsvd1[3];
+       u32 gocu;
+       u32 gocl;
+} rtcex_t;
+#endif                         /* __IMMAP_5227X__ */
index 271c27655bd21fb5e644674885c12065ffc88f85..7678406e51ea39eca0febd98c75e6f57dee67914 100644 (file)
 #define MMAP_SSI       0xFC0BC000
 #define MMAP_PLL       0xFC0C0000
 
+#include <asm/coldfire/crossbar.h>
+#include <asm/coldfire/edma.h>
+#include <asm/coldfire/flexbus.h>
+#include <asm/coldfire/lcd.h>
+#include <asm/coldfire/ssi.h>
+
 /* System control module registers */
 typedef struct scm1_ctrl {
        u32 mpr0;               /* 0x00 Master Privilege Register 0 */
@@ -159,61 +165,6 @@ typedef struct scm2_ctrl {
        u32 bmt1;               /* 0x54 Bus Monitor Timeout 1 */
 } scm2_t;
 
-/* Cross-Bar Switch Module */
-typedef struct xbs_ctrl {
-       u32 prs1;               /* 0x100 Priority Register Slave 1 */
-       u32 res1[3];            /* 0x104 - 0F */
-       u32 crs1;               /* 0x110 Control Register Slave 1 */
-       u32 res2[187];          /* 0x114 - 0x3FF */
-
-       u32 prs4;               /* 0x400 Priority Register Slave 4 */
-       u32 res3[3];            /* 0x404 - 0F */
-       u32 crs4;               /* 0x410 Control Register Slave 4 */
-       u32 res4[123];          /* 0x414 - 0x5FF */
-
-       u32 prs6;               /* 0x600 Priority Register Slave 6 */
-       u32 res5[3];            /* 0x604 - 0F */
-       u32 crs6;               /* 0x610 Control Register Slave 6 */
-       u32 res6[59];           /* 0x614 - 0x6FF */
-
-       u32 prs7;               /* 0x700 Priority Register Slave 7 */
-       u32 res7[3];            /* 0x704 - 0F */
-       u32 crs7;               /* 0x710 Control Register Slave 7 */
-} xbs_t;
-
-/* Flexbus module Chip select registers */
-typedef struct fbcs_ctrl {
-       u16 csar0;              /* 0x00 Chip-Select Address Register 0 */
-       u16 res0;
-       u32 csmr0;              /* 0x04 Chip-Select Mask Register 0 */
-       u32 cscr0;              /* 0x08 Chip-Select Control Register 0 */
-
-       u16 csar1;              /* 0x0C Chip-Select Address Register 1 */
-       u16 res1;
-       u32 csmr1;              /* 0x10 Chip-Select Mask Register 1 */
-       u32 cscr1;              /* 0x14 Chip-Select Control Register 1 */
-
-       u16 csar2;              /* 0x18 Chip-Select Address Register 2 */
-       u16 res2;
-       u32 csmr2;              /* 0x1C Chip-Select Mask Register 2 */
-       u32 cscr2;              /* 0x20 Chip-Select Control Register 2 */
-
-       u16 csar3;              /* 0x24 Chip-Select Address Register 3 */
-       u16 res3;
-       u32 csmr3;              /* 0x28 Chip-Select Mask Register 3 */
-       u32 cscr3;              /* 0x2C Chip-Select Control Register 3 */
-
-       u16 csar4;              /* 0x30 Chip-Select Address Register 4 */
-       u16 res4;
-       u32 csmr4;              /* 0x34 Chip-Select Mask Register 4 */
-       u32 cscr4;              /* 0x38 Chip-Select Control Register 4 */
-
-       u16 csar5;              /* 0x3C Chip-Select Address Register 5 */
-       u16 res5;
-       u32 csmr5;              /* 0x40 Chip-Select Mask Register 5 */
-       u32 cscr5;              /* 0x44 Chip-Select Control Register 5 */
-} fbcs_t;
-
 /* FlexCan module registers */
 typedef struct can_ctrl {
        u32 mcr;                /* 0x00 Module Configuration register */
@@ -255,64 +206,6 @@ typedef struct scm3_ctrl {
        u32 cfdtr;              /* 0x7C Core Fault Data Register */
 } scm3_t;
 
-/* eDMA module registers */
-typedef struct edma_ctrl {
-       u32 cr;                 /* 0x00 Control Register */
-       u32 es;                 /* 0x04 Error Status Register */
-       u16 res1[3];            /* 0x08 - 0x0D */
-       u16 erq;                /* 0x0E Enable Request Register */
-       u16 res2[3];            /* 0x10 - 0x15 */
-       u16 eei;                /* 0x16 Enable Error Interrupt Request */
-       u8 serq;                /* 0x18 Set Enable Request */
-       u8 cerq;                /* 0x19 Clear Enable Request */
-       u8 seei;                /* 0x1A Set Enable Error Interrupt Request */
-       u8 ceei;                /* 0x1B Clear Enable Error Interrupt Request */
-       u8 cint;                /* 0x1C Clear Interrupt Enable Register */
-       u8 cerr;                /* 0x1D Clear Error Register */
-       u8 ssrt;                /* 0x1E Set START Bit Register */
-       u8 cdne;                /* 0x1F Clear DONE Status Bit Register */
-       u16 res3[3];            /* 0x20 - 0x25 */
-       u16 intr;               /* 0x26 Interrupt Request Register */
-       u16 res4[3];            /* 0x28 - 0x2D */
-       u16 err;                /* 0x2E Error Register */
-       u32 res5[52];           /* 0x30 - 0xFF */
-       u8 dchpri0;             /* 0x100 Channel 0 Priority Register */
-       u8 dchpri1;             /* 0x101 Channel 1 Priority Register */
-       u8 dchpri2;             /* 0x102 Channel 2 Priority Register */
-       u8 dchpri3;             /* 0x103 Channel 3 Priority Register */
-       u8 dchpri4;             /* 0x104 Channel 4 Priority Register */
-       u8 dchpri5;             /* 0x105 Channel 5 Priority Register */
-       u8 dchpri6;             /* 0x106 Channel 6 Priority Register */
-       u8 dchpri7;             /* 0x107 Channel 7 Priority Register */
-       u8 dchpri8;             /* 0x108 Channel 8 Priority Register */
-       u8 dchpri9;             /* 0x109 Channel 9 Priority Register */
-       u8 dchpri10;            /* 0x110 Channel 10 Priority Register */
-       u8 dchpri11;            /* 0x111 Channel 11 Priority Register */
-       u8 dchpri12;            /* 0x112 Channel 12 Priority Register */
-       u8 dchpri13;            /* 0x113 Channel 13 Priority Register */
-       u8 dchpri14;            /* 0x114 Channel 14 Priority Register */
-       u8 dchpri15;            /* 0x115 Channel 15 Priority Register */
-} edma_t;
-
-/* TCD - eDMA*/
-typedef struct tcd_ctrl {
-       u32 saddr;              /* 0x00 Source Address */
-       u16 attr;               /* 0x04 Transfer Attributes */
-       u16 soff;               /* 0x06 Signed Source Address Offset */
-       u32 nbytes;             /* 0x08 Minor Byte Count */
-       u32 slast;              /* 0x0C Last Source Address Adjustment */
-       u32 daddr;              /* 0x10 Destination address */
-       u16 citer;              /* 0x14 Current Minor Loop Link, Major Loop Count */
-       u16 doff;               /* 0x16 Signed Destination Address Offset */
-       u32 dlast_sga;          /* 0x18 Last Destination Address Adjustment/Scatter Gather Address */
-       u16 biter;              /* 0x1C Beginning Minor Loop Link, Major Loop Count */
-       u16 csr;                /* 0x1E Control and Status */
-} tcd_st;
-
-typedef struct tcd_multiple {
-       tcd_st tcd[16];
-} tcd_t;
-
 /* Interrupt module registers */
 typedef struct int0_ctrl {
        /* Interrupt Controller 0 */
@@ -389,20 +282,6 @@ typedef struct intgack_ctrl1 {
        u8 Lniack[7];           /* 0xE1 - 0xE7 Global Level 0 Interrupt Acknowledge */
 } intgack_t;
 
-/*I2C module registers */
-typedef struct i2c_ctrl {
-       u8 adr;                 /* 0x00 address register */
-       u8 res1[3];             /* 0x01 - 0x03 */
-       u8 fdr;                 /* 0x04 frequency divider register */
-       u8 res2[3];             /* 0x05 - 0x07 */
-       u8 cr;                  /* 0x08 control register */
-       u8 res3[3];             /* 0x09 - 0x0B */
-       u8 sr;                  /* 0x0C status register */
-       u8 res4[3];             /* 0x0D - 0x0F */
-       u8 dr;                  /* 0x10 data register */
-       u8 res5[3];             /* 0x11 - 0x13 */
-} i2c_t;
-
 /* QSPI module registers */
 typedef struct qspi_ctrl {
        u16 qmr;                /* Mode register */
@@ -499,91 +378,133 @@ typedef struct rcm {
 /* GPIO port registers */
 typedef struct gpio_ctrl {
        /* Port Output Data Registers */
+#ifdef CONFIG_M5329
        u8 podr_fech;           /* 0x00 */
        u8 podr_fecl;           /* 0x01 */
+#else
+       u16 res00;              /* 0x00 - 0x01 */
+#endif
        u8 podr_ssi;            /* 0x02 */
        u8 podr_busctl;         /* 0x03 */
        u8 podr_be;             /* 0x04 */
        u8 podr_cs;             /* 0x05 */
        u8 podr_pwm;            /* 0x06 */
        u8 podr_feci2c;         /* 0x07 */
-       u8 res1;                /* 0x08 */
+       u8 res08;               /* 0x08 */
        u8 podr_uart;           /* 0x09 */
        u8 podr_qspi;           /* 0x0A */
        u8 podr_timer;          /* 0x0B */
-       u8 res2;                /* 0x0C */
+#ifdef CONFIG_M5329
+       u8 res0C;               /* 0x0C */
        u8 podr_lcddatah;       /* 0x0D */
        u8 podr_lcddatam;       /* 0x0E */
        u8 podr_lcddatal;       /* 0x0F */
        u8 podr_lcdctlh;        /* 0x10 */
        u8 podr_lcdctll;        /* 0x11 */
+#else
+       u16 res0C;              /* 0x0C - 0x0D */
+       u8 podr_fech;           /* 0x0E */
+       u8 podr_fecl;           /* 0x0F */
+       u16 res10[3];           /* 0x10 - 0x15 */
+#endif
 
        /* Port Data Direction Registers */
-       u16 res3;               /* 0x12 - 0x13 */
+#ifdef CONFIG_M5329
+       u16 res12;              /* 0x12 - 0x13 */
        u8 pddr_fech;           /* 0x14 */
        u8 pddr_fecl;           /* 0x15 */
+#endif
        u8 pddr_ssi;            /* 0x16 */
        u8 pddr_busctl;         /* 0x17 */
        u8 pddr_be;             /* 0x18 */
        u8 pddr_cs;             /* 0x19 */
        u8 pddr_pwm;            /* 0x1A */
        u8 pddr_feci2c;         /* 0x1B */
-       u8 res4;                /* 0x1C */
+       u8 res1C;               /* 0x1C */
        u8 pddr_uart;           /* 0x1D */
        u8 pddr_qspi;           /* 0x1E */
        u8 pddr_timer;          /* 0x1F */
-       u8 res5;                /* 0x20 */
+#ifdef CONFIG_M5329
+       u8 res20;               /* 0x20 */
        u8 pddr_lcddatah;       /* 0x21 */
        u8 pddr_lcddatam;       /* 0x22 */
        u8 pddr_lcddatal;       /* 0x23 */
        u8 pddr_lcdctlh;        /* 0x24 */
        u8 pddr_lcdctll;        /* 0x25 */
-       u16 res6;               /* 0x26 - 0x27 */
+       u16 res26;              /* 0x26 - 0x27 */
+#else
+       u16 res20;              /* 0x20 - 0x21 */
+       u8 pddr_fech;           /* 0x22 */
+       u8 pddr_fecl;           /* 0x23 */
+       u16 res24[3];           /* 0x24 - 0x29 */
+#endif
 
        /* Port Data Direction Registers */
+#ifdef CONFIG_M5329
        u8 ppd_fech;            /* 0x28 */
        u8 ppd_fecl;            /* 0x29 */
+#endif
        u8 ppd_ssi;             /* 0x2A */
        u8 ppd_busctl;          /* 0x2B */
        u8 ppd_be;              /* 0x2C */
        u8 ppd_cs;              /* 0x2D */
        u8 ppd_pwm;             /* 0x2E */
        u8 ppd_feci2c;          /* 0x2F */
-       u8 res7;                /* 0x30 */
+       u8 res30;               /* 0x30 */
        u8 ppd_uart;            /* 0x31 */
        u8 ppd_qspi;            /* 0x32 */
        u8 ppd_timer;           /* 0x33 */
-       u8 res8;                /* 0x34 */
+#ifdef CONFIG_M5329
+       u8 res34;               /* 0x34 */
        u8 ppd_lcddatah;        /* 0x35 */
        u8 ppd_lcddatam;        /* 0x36 */
        u8 ppd_lcddatal;        /* 0x37 */
        u8 ppd_lcdctlh;         /* 0x38 */
        u8 ppd_lcdctll;         /* 0x39 */
-       u16 res9;               /* 0x3A - 0x3B */
+       u16 res3A;              /* 0x3A - 0x3B */
+#else
+       u16 res34;              /* 0x34 - 0x35 */
+       u8 ppd_fech;            /* 0x36 */
+       u8 ppd_fecl;            /* 0x37 */
+       u16 res38[3];           /* 0x38 - 0x3D */
+#endif
 
        /* Port Clear Output Data Registers */
-       u8 pclrr_fech;          /* 0x3C */
-       u8 pclrr_fecl;          /* 0x3D */
+#ifdef CONFIG_M5329
+       u8 res3C;               /* 0x3C */
+       u8 pclrr_fech;          /* 0x3D */
+       u8 pclrr_fecl;          /* 0x3E */
+#else
        u8 pclrr_ssi;           /* 0x3E */
+#endif
        u8 pclrr_busctl;        /* 0x3F */
        u8 pclrr_be;            /* 0x40 */
        u8 pclrr_cs;            /* 0x41 */
        u8 pclrr_pwm;           /* 0x42 */
        u8 pclrr_feci2c;        /* 0x43 */
-       u8 res10;               /* 0x44 */
+       u8 res44;               /* 0x44 */
        u8 pclrr_uart;          /* 0x45 */
        u8 pclrr_qspi;          /* 0x46 */
        u8 pclrr_timer;         /* 0x47 */
-       u8 res11;               /* 0x48 */
-       u8 pclrr_lcddatah;      /* 0x49 */
-       u8 pclrr_lcddatam;      /* 0x4A */
-       u8 pclrr_lcddatal;      /* 0x4B */
+#ifdef CONFIG_M5329
+       u8 pclrr_lcddatah;      /* 0x48 */
+       u8 pclrr_lcddatam;      /* 0x49 */
+       u8 pclrr_lcddatal;      /* 0x4A */
+       u8 pclrr_ssi;           /* 0x4B */
        u8 pclrr_lcdctlh;       /* 0x4C */
        u8 pclrr_lcdctll;       /* 0x4D */
-       u16 res12;              /* 0x4E - 0x4F */
+       u16 res4E;              /* 0x4E - 0x4F */
+#else
+       u16 res48;              /* 0x48 - 0x49 */
+       u8 pclrr_fech;          /* 0x4A */
+       u8 pclrr_fecl;          /* 0x4B */
+       u8 res4C[5];            /* 0x4C - 0x50 */
+#endif
 
        /* Pin Assignment Registers */
+#ifdef CONFIG_M5329
        u8 par_fec;             /* 0x50 */
+#endif
        u8 par_pwm;             /* 0x51 */
        u8 par_busctl;          /* 0x52 */
        u8 par_feci2c;          /* 0x53 */
@@ -593,15 +514,20 @@ typedef struct gpio_ctrl {
        u16 par_uart;           /* 0x58 */
        u16 par_qspi;           /* 0x5A */
        u8 par_timer;           /* 0x5C */
+#ifdef CONFIG_M5329
        u8 par_lcddata;         /* 0x5D */
        u16 par_lcdctl;         /* 0x5E */
+#else
+       u8 par_fec;             /* 0x5D */
+       u16 res5E;              /* 0x5E - 0x5F */
+#endif
        u16 par_irq;            /* 0x60 */
-       u16 res16;              /* 0x62 - 0x63 */
+       u16 res62;              /* 0x62 - 0x63 */
 
        /* Mode Select Control Registers */
        u8 mscr_flexbus;        /* 0x64 */
        u8 mscr_sdram;          /* 0x65 */
-       u16 res17;              /* 0x66 - 0x67 */
+       u16 res66;              /* 0x66 - 0x67 */
 
        /* Drive Strength Control Registers */
        u8 dscr_i2c;            /* 0x68 */
@@ -611,49 +537,16 @@ typedef struct gpio_ctrl {
        u8 dscr_qspi;           /* 0x6C */
        u8 dscr_timer;          /* 0x6D */
        u8 dscr_ssi;            /* 0x6E */
+#ifdef CONFIG_M5329
        u8 dscr_lcd;            /* 0x6F */
+#else
+       u8 res6F;               /* 0x6F */
+#endif
        u8 dscr_debug;          /* 0x70 */
        u8 dscr_clkrst;         /* 0x71 */
        u8 dscr_irq;            /* 0x72 */
 } gpio_t;
 
-/* LCD module registers */
-typedef struct lcd_ctrl {
-       u32 ssar;               /* 0x00 Screen Start Address Register */
-       u32 sr;                 /* 0x04 LCD Size Register */
-       u32 vpw;                /* 0x08 Virtual Page Width Register */
-       u32 cpr;                /* 0x0C Cursor Position Register */
-       u32 cwhb;               /* 0x10 Cursor Width Height and Blink Register */
-       u32 ccmr;               /* 0x14 Color Cursor Mapping Register */
-       u32 pcr;                /* 0x18 Panel Configuration Register */
-       u32 hcr;                /* 0x1C Horizontal Configuration Register */
-       u32 vcr;                /* 0x20 Vertical Configuration Register */
-       u32 por;                /* 0x24 Panning Offset Register */
-       u32 scr;                /* 0x28 Sharp Configuration Register */
-       u32 pccr;               /* 0x2C PWM Contrast Control Register */
-       u32 dcr;                /* 0x30 DMA Control Register */
-       u32 rmcr;               /* 0x34 Refresh Mode Control Register */
-       u32 icr;                /* 0x38 Refresh Mode Control Register */
-       u32 ier;                /* 0x3C Interrupt Enable Register */
-       u32 isr;                /* 0x40 Interrupt Status Register */
-       u32 res[4];
-       u32 gwsar;              /* 0x50 Graphic Window Start Address Register */
-       u32 gwsr;               /* 0x54 Graphic Window Size Register */
-       u32 gwvpw;              /* 0x58 Graphic Window Virtual Page Width Register */
-       u32 gwpor;              /* 0x5C Graphic Window Panning Offset Register */
-       u32 gwpr;               /* 0x60 Graphic Window Position Register */
-       u32 gwcr;               /* 0x64 Graphic Window Control Register */
-       u32 gwdcr;              /* 0x68 Graphic Window DMA Control Register */
-} lcd_t;
-
-typedef struct lcdbg_ctrl {
-       u32 bglut[255];
-} lcdbg_t;
-
-typedef struct lcdgw_ctrl {
-       u32 gwlut[255];
-} lcdgw_t;
-
 /* USB OTG module registers */
 typedef struct usb_otg {
        u32 id;                 /* 0x000 Identification Register */
@@ -758,29 +651,6 @@ typedef struct sdram_ctrl {
        u32 cs1;                /* 0x114 Chip Select 1 Configuration */
 } sdram_t;
 
-/* Synchronous serial interface */
-typedef struct ssi_ctrl {
-       u32 tx0;                /* 0x00 Transmit Data Register 0 */
-       u32 tx1;                /* 0x04 Transmit Data Register 1 */
-       u32 rx0;                /* 0x08 Receive Data Register 0 */
-       u32 rx1;                /* 0x0C Receive Data Register 1 */
-       u32 cr;                 /* 0x10 Control Register */
-       u32 isr;                /* 0x14 Interrupt Status Register */
-       u32 ier;                /* 0x18 Interrupt Enable Register */
-       u32 tcr;                /* 0x1C Transmit Configuration Register */
-       u32 rcr;                /* 0x20 Receive Configuration Register */
-       u32 ccr;                /* 0x24 Clock Control Register */
-       u32 res1;               /* 0x28 */
-       u32 fcsr;               /* 0x2C FIFO Control/Status Register */
-       u32 res2[2];            /* 0x30 - 0x37 */
-       u32 acr;                /* 0x38 AC97 Control Register */
-       u32 acadd;              /* 0x3C AC97 Command Address Register */
-       u32 acdat;              /* 0x40 AC97 Command Data Register */
-       u32 atag;               /* 0x44 AC97 Tag Register */
-       u32 tmask;              /* 0x48 Transmit Time Slot Mask Register */
-       u32 rmask;              /* 0x4C Receive Time Slot Mask Register */
-} ssi_t;
-
 /* Clock Module registers */
 typedef struct pll_ctrl {
        u8 podr;                /* 0x00 Output Divider Register */
index d091d7b73c7f99719df28689783d12a27d3e496c..ef8930ecd513ba4c5e11f526f1a0e56b6047fcc6 100644 (file)
@@ -33,6 +33,7 @@
 #define MMAP_FEC0      0xFC030000
 #define MMAP_FEC1      0xFC034000
 #define MMAP_RTC       0xFC03C000
+#define MMAP_SCM2      0xFC040000
 #define MMAP_EDMA      0xFC044000
 #define MMAP_INTC0     0xFC048000
 #define MMAP_INTC1     0xFC04C000
 #define MMAP_SSI       0xFC0BC000
 #define MMAP_PLL       0xFC0C4000
 #define MMAP_ATA       0x90000000
-
-/*********************************************************************
-* ATA
-*********************************************************************/
-
+#define MMAP_USBHW     0xFC0B0000
+#define MMAP_USBCAPS   0xFC0B0100
+#define MMAP_USBEHCI   0xFC0B0140
+#define MMAP_USBOTG    0xFC0B01A0
+
+#include <asm/coldfire/crossbar.h>
+#include <asm/coldfire/dspi.h>
+#include <asm/coldfire/edma.h>
+#include <asm/coldfire/flexbus.h>
+#include <asm/coldfire/ssi.h>
+
+/* ATA */
 typedef struct atac {
        /* PIO */
        u8 toff;                /* 0x00 */
@@ -117,379 +125,7 @@ typedef struct atac {
        u8 rsvd6[106];
 } atac_t;
 
-/*********************************************************************
-* Cross-bar switch (XBS)
-*********************************************************************/
-
-typedef struct xbs {
-       u8 resv0[0x100];
-       u32 prs1;               /* XBS Priority Register */
-       u8 resv1[0xC];
-       u32 crs1;               /* XBS Control Register */
-       u8 resv2[0xEC];
-       u32 prs2;               /* XBS Priority Register */
-       u8 resv3[0xC];
-       u32 crs2;               /* XBS Control Register */
-       u8 resv4[0xEC];
-       u32 prs3;               /* XBS Priority Register */
-       u8 resv5[0xC];
-       u32 crs3;               /* XBS Control Register */
-       u8 resv6[0xEC];
-       u32 prs4;               /* XBS Priority Register */
-       u8 resv7[0xC];
-       u32 crs4;               /* XBS Control Register */
-       u8 resv8[0xEC];
-       u32 prs5;               /* XBS Priority Register */
-       u8 resv9[0xC];
-       u32 crs5;               /* XBS Control Register */
-       u8 resv10[0xEC];
-       u32 prs6;               /* XBS Priority Register */
-       u8 resv11[0xC];
-       u32 crs6;               /* XBS Control Register */
-       u8 resv12[0xEC];
-       u32 prs7;               /* XBS Priority Register */
-       u8 resv13[0xC];
-       u32 crs7;               /* XBS Control Register */
-} xbs_t;
-
-/*********************************************************************
-* FlexBus Chip Selects (FBCS)
-*********************************************************************/
-
-typedef struct fbcs {
-       u32 csar0;              /* Chip-select Address Register */
-       u32 csmr0;              /* Chip-select Mask Register */
-       u32 cscr0;              /* Chip-select Control Register */
-       u32 csar1;              /* Chip-select Address Register */
-       u32 csmr1;              /* Chip-select Mask Register */
-       u32 cscr1;              /* Chip-select Control Register */
-       u32 csar2;              /* Chip-select Address Register */
-       u32 csmr2;              /* Chip-select Mask Register */
-       u32 cscr2;              /* Chip-select Control Register */
-       u32 csar3;              /* Chip-select Address Register */
-       u32 csmr3;              /* Chip-select Mask Register */
-       u32 cscr3;              /* Chip-select Control Register */
-} fbcs_t;
-
-/*********************************************************************
-* Enhanced DMA (EDMA)
-*********************************************************************/
-
-typedef struct edma {
-       u32 cr;
-       u32 es;
-       u8 resv0[0x6];
-       u16 erq;
-       u8 resv1[0x6];
-       u16 eei;
-       u8 serq;
-       u8 cerq;
-       u8 seei;
-       u8 ceei;
-       u8 cint;
-       u8 cerr;
-       u8 ssrt;
-       u8 cdne;
-       u8 resv2[0x6];
-       u16 intr;
-       u8 resv3[0x6];
-       u16 err;
-       u8 resv4[0xD0];
-       u8 dchpri0;
-       u8 dchpri1;
-       u8 dchpri2;
-       u8 dchpri3;
-       u8 dchpri4;
-       u8 dchpri5;
-       u8 dchpri6;
-       u8 dchpri7;
-       u8 dchpri8;
-       u8 dchpri9;
-       u8 dchpri10;
-       u8 dchpri11;
-       u8 dchpri12;
-       u8 dchpri13;
-       u8 dchpri14;
-       u8 dchpri15;
-       u8 resv5[0xEF0];
-       u32 tcd0_saddr;
-       u16 tcd0_attr;
-       u16 tcd0_soff;
-       u32 tcd0_nbytes;
-       u32 tcd0_slast;
-       u32 tcd0_daddr;
-       union {
-               u16 tcd0_citer_elink;
-               u16 tcd0_citer;
-       };
-       u16 tcd0_doff;
-       u32 tcd0_dlast_sga;
-       union {
-               u16 tcd0_biter_elink;
-               u16 tcd0_biter;
-       };
-       u16 tcd0_csr;
-       u32 tcd1_saddr;
-       u16 tcd1_attr;
-       u16 tcd1_soff;
-       u32 tcd1_nbytes;
-       u32 tcd1_slast;
-       u32 tcd1_daddr;
-       union {
-               u16 tcd1_citer_elink;
-               u16 tcd1_citer;
-       };
-       u16 tcd1_doff;
-       u32 tcd1_dlast_sga;
-       union {
-               u16 tcd1_biter;
-               u16 tcd1_biter_elink;
-       };
-       u16 tcd1_csr;
-       u32 tcd2_saddr;
-       u16 tcd2_attr;
-       u16 tcd2_soff;
-       u32 tcd2_nbytes;
-       u32 tcd2_slast;
-       u32 tcd2_daddr;
-       union {
-               u16 tcd2_citer;
-               u16 tcd2_citer_elink;
-       };
-       u16 tcd2_doff;
-       u32 tcd2_dlast_sga;
-       union {
-               u16 tcd2_biter_elink;
-               u16 tcd2_biter;
-       };
-       u16 tcd2_csr;
-       u32 tcd3_saddr;
-       u16 tcd3_attr;
-       u16 tcd3_soff;
-       u32 tcd3_nbytes;
-       u32 tcd3_slast;
-       u32 tcd3_daddr;
-       union {
-               u16 tcd3_citer;
-               u16 tcd3_citer_elink;
-       };
-       u16 tcd3_doff;
-       u32 tcd3_dlast_sga;
-       union {
-               u16 tcd3_biter_elink;
-               u16 tcd3_biter;
-       };
-       u16 tcd3_csr;
-       u32 tcd4_saddr;
-       u16 tcd4_attr;
-       u16 tcd4_soff;
-       u32 tcd4_nbytes;
-       u32 tcd4_slast;
-       u32 tcd4_daddr;
-       union {
-               u16 tcd4_citer;
-               u16 tcd4_citer_elink;
-       };
-       u16 tcd4_doff;
-       u32 tcd4_dlast_sga;
-       union {
-               u16 tcd4_biter;
-               u16 tcd4_biter_elink;
-       };
-       u16 tcd4_csr;
-       u32 tcd5_saddr;
-       u16 tcd5_attr;
-       u16 tcd5_soff;
-       u32 tcd5_nbytes;
-       u32 tcd5_slast;
-       u32 tcd5_daddr;
-       union {
-               u16 tcd5_citer;
-               u16 tcd5_citer_elink;
-       };
-       u16 tcd5_doff;
-       u32 tcd5_dlast_sga;
-       union {
-               u16 tcd5_biter_elink;
-               u16 tcd5_biter;
-       };
-       u16 tcd5_csr;
-       u32 tcd6_saddr;
-       u16 tcd6_attr;
-       u16 tcd6_soff;
-       u32 tcd6_nbytes;
-       u32 tcd6_slast;
-       u32 tcd6_daddr;
-       union {
-               u16 tcd6_citer;
-               u16 tcd6_citer_elink;
-       };
-       u16 tcd6_doff;
-       u32 tcd6_dlast_sga;
-       union {
-               u16 tcd6_biter_elink;
-               u16 tcd6_biter;
-       };
-       u16 tcd6_csr;
-       u32 tcd7_saddr;
-       u16 tcd7_attr;
-       u16 tcd7_soff;
-       u32 tcd7_nbytes;
-       u32 tcd7_slast;
-       u32 tcd7_daddr;
-       union {
-               u16 tcd7_citer;
-               u16 tcd7_citer_elink;
-       };
-       u16 tcd7_doff;
-       u32 tcd7_dlast_sga;
-       union {
-               u16 tcd7_biter_elink;
-               u16 tcd7_biter;
-       };
-       u16 tcd7_csr;
-       u32 tcd8_saddr;
-       u16 tcd8_attr;
-       u16 tcd8_soff;
-       u32 tcd8_nbytes;
-       u32 tcd8_slast;
-       u32 tcd8_daddr;
-       union {
-               u16 tcd8_citer;
-               u16 tcd8_citer_elink;
-       };
-       u16 tcd8_doff;
-       u32 tcd8_dlast_sga;
-       union {
-               u16 tcd8_biter_elink;
-               u16 tcd8_biter;
-       };
-       u16 tcd8_csr;
-       u32 tcd9_saddr;
-       u16 tcd9_attr;
-       u16 tcd9_soff;
-       u32 tcd9_nbytes;
-       u32 tcd9_slast;
-       u32 tcd9_daddr;
-       union {
-               u16 tcd9_citer_elink;
-               u16 tcd9_citer;
-       };
-       u16 tcd9_doff;
-       u32 tcd9_dlast_sga;
-       union {
-               u16 tcd9_biter_elink;
-               u16 tcd9_biter;
-       };
-       u16 tcd9_csr;
-       u32 tcd10_saddr;
-       u16 tcd10_attr;
-       u16 tcd10_soff;
-       u32 tcd10_nbytes;
-       u32 tcd10_slast;
-       u32 tcd10_daddr;
-       union {
-               u16 tcd10_citer_elink;
-               u16 tcd10_citer;
-       };
-       u16 tcd10_doff;
-       u32 tcd10_dlast_sga;
-       union {
-               u16 tcd10_biter;
-               u16 tcd10_biter_elink;
-       };
-       u16 tcd10_csr;
-       u32 tcd11_saddr;
-       u16 tcd11_attr;
-       u16 tcd11_soff;
-       u32 tcd11_nbytes;
-       u32 tcd11_slast;
-       u32 tcd11_daddr;
-       union {
-               u16 tcd11_citer;
-               u16 tcd11_citer_elink;
-       };
-       u16 tcd11_doff;
-       u32 tcd11_dlast_sga;
-       union {
-               u16 tcd11_biter;
-               u16 tcd11_biter_elink;
-       };
-       u16 tcd11_csr;
-       u32 tcd12_saddr;
-       u16 tcd12_attr;
-       u16 tcd12_soff;
-       u32 tcd12_nbytes;
-       u32 tcd12_slast;
-       u32 tcd12_daddr;
-       union {
-               u16 tcd12_citer;
-               u16 tcd12_citer_elink;
-       };
-       u16 tcd12_doff;
-       u32 tcd12_dlast_sga;
-       union {
-               u16 tcd12_biter;
-               u16 tcd12_biter_elink;
-       };
-       u16 tcd12_csr;
-       u32 tcd13_saddr;
-       u16 tcd13_attr;
-       u16 tcd13_soff;
-       u32 tcd13_nbytes;
-       u32 tcd13_slast;
-       u32 tcd13_daddr;
-       union {
-               u16 tcd13_citer_elink;
-               u16 tcd13_citer;
-       };
-       u16 tcd13_doff;
-       u32 tcd13_dlast_sga;
-       union {
-               u16 tcd13_biter_elink;
-               u16 tcd13_biter;
-       };
-       u16 tcd13_csr;
-       u32 tcd14_saddr;
-       u16 tcd14_attr;
-       u16 tcd14_soff;
-       u32 tcd14_nbytes;
-       u32 tcd14_slast;
-       u32 tcd14_daddr;
-       union {
-               u16 tcd14_citer;
-               u16 tcd14_citer_elink;
-       };
-       u16 tcd14_doff;
-       u32 tcd14_dlast_sga;
-       union {
-               u16 tcd14_biter_elink;
-               u16 tcd14_biter;
-       };
-       u16 tcd14_csr;
-       u32 tcd15_saddr;
-       u16 tcd15_attr;
-       u16 tcd15_soff;
-       u32 tcd15_nbytes;
-       u32 tcd15_slast;
-       u32 tcd15_daddr;
-       union {
-               u16 tcd15_citer_elink;
-               u16 tcd15_citer;
-       };
-       u16 tcd15_doff;
-       u32 tcd15_dlast_sga;
-       union {
-               u16 tcd15_biter;
-               u16 tcd15_biter_elink;
-       };
-       u16 tcd15_csr;
-} edma_t;
-
-/*********************************************************************
-* Interrupt Controller (INTC)
-*********************************************************************/
-
+/* Interrupt Controller (INTC) */
 typedef struct int0_ctrl {
        u32 iprh0;              /* 0x00 Pending Register High */
        u32 iprl0;              /* 0x04 Pending Register Low */
@@ -558,10 +194,7 @@ typedef struct int1_ctrl {
        u8 resc[3];             /* 0xFD - 0xFF */
 } int1_t;
 
-/*********************************************************************
-* Global Interrupt Acknowledge (IACK)
-*********************************************************************/
-
+/* Global Interrupt Acknowledge (IACK) */
 typedef struct iack {
        u8 resv0[0xE0];
        u8 gswiack;
@@ -581,41 +214,7 @@ typedef struct iack {
        u8 gl7iack;
 } iack_t;
 
-/*********************************************************************
-* DMA Serial Peripheral Interface (DSPI)
-*********************************************************************/
-
-typedef struct dspi {
-       u32 dmcr;
-       u8 resv0[0x4];
-       u32 dtcr;
-       u32 dctar0;
-       u32 dctar1;
-       u32 dctar2;
-       u32 dctar3;
-       u32 dctar4;
-       u32 dctar5;
-       u32 dctar6;
-       u32 dctar7;
-       u32 dsr;
-       u32 dirsr;
-       u32 dtfr;
-       u32 drfr;
-       u32 dtfdr0;
-       u32 dtfdr1;
-       u32 dtfdr2;
-       u32 dtfdr3;
-       u8 resv1[0x30];
-       u32 drfdr0;
-       u32 drfdr1;
-       u32 drfdr2;
-       u32 drfdr3;
-} dspi_t;
-
-/*********************************************************************
-* Edge Port Module (EPORT)
-*********************************************************************/
-
+/* Edge Port Module (EPORT) */
 typedef struct eport {
        u16 eppar;
        u8 epddr;
@@ -625,10 +224,7 @@ typedef struct eport {
        u8 epfr;
 } eport_t;
 
-/*********************************************************************
-* Watchdog Timer Modules (WTM)
-*********************************************************************/
-
+/* Watchdog Timer Modules (WTM) */
 typedef struct wtm {
        u16 wcr;
        u16 wmr;
@@ -636,10 +232,7 @@ typedef struct wtm {
        u16 wsr;
 } wtm_t;
 
-/*********************************************************************
-* Serial Boot Facility (SBF)
-*********************************************************************/
-
+/* Serial Boot Facility (SBF) */
 typedef struct sbf {
        u8 resv0[0x18];
        u16 sbfsr;              /* Serial Boot Facility Status Register */
@@ -647,19 +240,13 @@ typedef struct sbf {
        u16 sbfcr;              /* Serial Boot Facility Control Register */
 } sbf_t;
 
-/*********************************************************************
-* Reset Controller Module (RCM)
-*********************************************************************/
-
+/* Reset Controller Module (RCM) */
 typedef struct rcm {
        u8 rcr;
        u8 rsr;
 } rcm_t;
 
-/*********************************************************************
-* Chip Configuration Module (CCM)
-*********************************************************************/
-
+/* Chip Configuration Module (CCM) */
 typedef struct ccm {
        u8 ccm_resv0[0x4];
        u16 ccr;                /* Chip Configuration Register (256 TEPBGA, Read-only) */
@@ -672,10 +259,7 @@ typedef struct ccm {
        u16 uocsr;              /* USB On-the-Go Controller Status Register */
 } ccm_t;
 
-/*********************************************************************
-* General Purpose I/O Module (GPIO)
-*********************************************************************/
-
+/* General Purpose I/O Module (GPIO) */
 typedef struct gpio {
        u8 podr_fec0h;          /* FEC0 High Port Output Data Register */
        u8 podr_fec0l;          /* FEC0 Low Port Output Data Register */
@@ -803,10 +387,7 @@ typedef struct gpio {
        u8 dscr_ata;            /* ATA Drive Strength Control Register */
 } gpio_t;
 
-/*********************************************************************
-* Random Number Generator (RNG)
-*********************************************************************/
-
+/* Random Number Generator (RNG) */
 typedef struct rng {
        u32 rngcr;
        u32 rngsr;
@@ -814,10 +395,7 @@ typedef struct rng {
        u32 rngout;
 } rng_t;
 
-/*********************************************************************
-* SDRAM Controller (SDRAMC)
-*********************************************************************/
-
+/* SDRAM Controller (SDRAMC) */
 typedef struct sdramc {
        u32 sdmr;               /* SDRAM Mode/Extended Mode Register */
        u32 sdcr;               /* SDRAM Control Register */
@@ -828,36 +406,7 @@ typedef struct sdramc {
        u32 sdcs1;              /* SDRAM Mode/Extended Mode Register */
 } sdramc_t;
 
-/*********************************************************************
-* Synchronous Serial Interface (SSI)
-*********************************************************************/
-
-typedef struct ssi {
-       u32 tx0;
-       u32 tx1;
-       u32 rx0;
-       u32 rx1;
-       u32 cr;
-       u32 isr;
-       u32 ier;
-       u32 tcr;
-       u32 rcr;
-       u32 ccr;
-       u8 resv0[0x4];
-       u32 fcsr;
-       u8 resv1[0x8];
-       u32 acr;
-       u32 acadd;
-       u32 acdat;
-       u32 atag;
-       u32 tmask;
-       u32 rmask;
-} ssi_t;
-
-/*********************************************************************
-* Phase Locked Loop (PLL)
-*********************************************************************/
-
+/* Phase Locked Loop (PLL) */
 typedef struct pll {
        u32 pcr;                /* PLL Control Register */
        u32 psr;                /* PLL Status Register */
@@ -927,7 +476,27 @@ typedef struct scm1 {
        u32 pacrf;              /* 0x44 Peripheral Access Control Register F */
        u32 pacrg;              /* 0x48 Peripheral Access Control Register G */
 } scm1_t;
-/********************************************************************/
+
+typedef struct scm2 {
+       u8 rsvd1[19];           /* 0x00 - 0x12 */
+       u8 wcr;                 /* 0x13 */
+       u16 rsvd2;              /* 0x14 - 0x15 */
+       u16 cwcr;               /* 0x16 */
+       u8 rsvd3[3];            /* 0x18 - 0x1A */
+       u8 cwsr;                /* 0x1B */
+       u8 rsvd4[3];            /* 0x1C - 0x1E */
+       u8 scmisr;              /* 0x1F */
+       u32 rsvd5;              /* 0x20 - 0x23 */
+       u8 bcr;                 /* 0x24 */
+       u8 rsvd6[74];           /* 0x25 - 0x6F */
+       u32 cfadr;              /* 0x70 */
+       u8 rsvd7;               /* 0x74 */
+       u8 cfier;               /* 0x75 */
+       u8 cfloc;               /* 0x76 */
+       u8 cfatr;               /* 0x77 */
+       u32 rsvd8;              /* 0x78 - 0x7B */
+       u32 cfdtr;              /* 0x7C */
+} scm2_t;
 
 typedef struct rtcex {
        u32 rsvd1[3];
diff --git a/include/asm-m68k/immap_547x_8x.h b/include/asm-m68k/immap_547x_8x.h
new file mode 100644 (file)
index 0000000..54ef40f
--- /dev/null
@@ -0,0 +1,297 @@
+/*
+ * MCF547x_8x Internal Memory Map
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __IMMAP_547x_8x__
+#define __IMMAP_547x_8x__
+
+#define MMAP_SIU       (CFG_MBAR + 0x00000000)
+#define MMAP_SDRAM     (CFG_MBAR + 0x00000100)
+#define MMAP_XARB      (CFG_MBAR + 0x00000240)
+#define MMAP_FBCS      (CFG_MBAR + 0x00000500)
+#define MMAP_INTC0     (CFG_MBAR + 0x00000700)
+#define MMAP_GPTMR     (CFG_MBAR + 0x00000800)
+#define MMAP_SLT0      (CFG_MBAR + 0x00000900)
+#define MMAP_SLT1      (CFG_MBAR + 0x00000910)
+#define MMAP_GPIO      (CFG_MBAR + 0x00000A00)
+#define MMAP_PCI       (CFG_MBAR + 0x00000B00)
+#define MMAP_PCIARB    (CFG_MBAR + 0x00000C00)
+#define MMAP_EXTDMA    (CFG_MBAR + 0x00000D00)
+#define MMAP_EPORT     (CFG_MBAR + 0x00000F00)
+#define MMAP_CTM       (CFG_MBAR + 0x00007F00)
+#define MMAP_MCDMA     (CFG_MBAR + 0x00008000)
+#define MMAP_SCPCI     (CFG_MBAR + 0x00008400)
+#define MMAP_UART0     (CFG_MBAR + 0x00008600)
+#define MMAP_UART1     (CFG_MBAR + 0x00008700)
+#define MMAP_UART2     (CFG_MBAR + 0x00008800)
+#define MMAP_UART3     (CFG_MBAR + 0x00008900)
+#define MMAP_DSPI      (CFG_MBAR + 0x00008A00)
+#define MMAP_I2C       (CFG_MBAR + 0x00008F00)
+#define MMAP_FEC0      (CFG_MBAR + 0x00009000)
+#define MMAP_FEC1      (CFG_MBAR + 0x00009800)
+#define MMAP_CAN0      (CFG_MBAR + 0x0000A000)
+#define MMAP_CAN1      (CFG_MBAR + 0x0000A800)
+#define MMAP_USBD      (CFG_MBAR + 0x0000B000)
+#define MMAP_SRAM      (CFG_MBAR + 0x00010000)
+#define MMAP_SRAMCFG   (CFG_MBAR + 0x0001FF00)
+#define MMAP_SEC       (CFG_MBAR + 0x00020000)
+
+#include <asm/coldfire/flexbus.h>
+
+typedef struct siu {
+       u32 mbar;               /* 0x00 */
+       u32 drv;                /* 0x04 */
+       u32 rsvd1[2];           /* 0x08 - 0x1F */
+       u32 sbcr;               /* 0x10 */
+       u32 rsvd2[3];           /* 0x14 - 0x1F */
+       u32 cs0cfg;             /* 0x20 */
+       u32 cs1cfg;             /* 0x24 */
+       u32 cs2cfg;             /* 0x28 */
+       u32 cs3cfg;             /* 0x2C */
+       u32 rsvd3[2];           /* 0x30 - 0x37 */
+       u32 secsacr;            /* 0x38 */
+       u32 rsvd4[2];           /* 0x3C - 0x43 */
+       u32 rsr;                /* 0x44 */
+       u32 rsvd5[2];           /* 0x48 - 0x4F */
+       u32 jtagid;             /* 0x50 */
+} siu_t;
+
+typedef struct sdram {
+       u32 mode;               /* 0x00 */
+       u32 ctrl;               /* 0x04 */
+       u32 cfg1;               /* 0x08 */
+       u32 cfg2;               /* 0x0c */
+} sdram_t;
+
+typedef struct xlb_arb {
+       u32 cfg;                /* 0x240 */
+       u32 ver;                /* 0x244 */
+       u32 sr;                 /* 0x248 */
+       u32 imr;                /* 0x24c */
+       u32 adrcap;             /* 0x250 */
+       u32 sigcap;             /* 0x254 */
+       u32 adrto;              /* 0x258 */
+       u32 datto;              /* 0x25c */
+       u32 busto;              /* 0x260 */
+       u32 prien;              /* 0x264 */
+       u32 pri;                /* 0x268 */
+} xlbarb_t;
+
+typedef struct int0_ctrl {
+       u32 iprh0;              /* 0x00 */
+       u32 iprl0;              /* 0x04 */
+       u32 imrh0;              /* 0x08 */
+       u32 imrl0;              /* 0x0C */
+       u32 frch0;              /* 0x10 */
+       u32 frcl0;              /* 0x14 */
+       u8 irlr;                /* 0x18 */
+       u8 iacklpr;             /* 0x19 */
+       u16 res1;               /* 0x1A - 0x1B */
+       u32 res2[9];            /* 0x1C - 0x3F */
+       u8 icr0[64];            /* 0x40 - 0x7F */
+       u32 res3[24];           /* 0x80 - 0xDF */
+       u8 swiack0;             /* 0xE0 */
+       u8 res4[3];             /* 0xE1 - 0xE3 */
+       u8 Lniack0_1;           /* 0xE4 */
+       u8 res5[3];             /* 0xE5 - 0xE7 */
+       u8 Lniack0_2;           /* 0xE8 */
+       u8 res6[3];             /* 0xE9 - 0xEB */
+       u8 Lniack0_3;           /* 0xEC */
+       u8 res7[3];             /* 0xED - 0xEF */
+       u8 Lniack0_4;           /* 0xF0 */
+       u8 res8[3];             /* 0xF1 - 0xF3 */
+       u8 Lniack0_5;           /* 0xF4 */
+       u8 res9[3];             /* 0xF5 - 0xF7 */
+       u8 Lniack0_6;           /* 0xF8 */
+       u8 resa[3];             /* 0xF9 - 0xFB */
+       u8 Lniack0_7;           /* 0xFC */
+       u8 resb[3];             /* 0xFD - 0xFF */
+} int0_t;
+
+typedef struct gptmr {
+       u8 ocpw;
+       u8 octict;
+       u8 ctrl;
+       u8 mode;
+
+       u16 pre;                /* Prescale */
+       u16 cnt;
+
+       u16 pwmwidth;
+       u8 pwmop;               /* Output Polarity */
+       u8 pwmld;               /* Immediate Update */
+
+       u16 cap;                /* Capture internal counter */
+       u8 ovfpin;              /* Ovf and Pin */
+       u8 intr;                /* Interrupts */
+} gptmr_t;
+
+typedef struct slt {
+       u32 tcnt;               /* 0x00 */
+       u32 cr;                 /* 0x04 */
+       u32 cnt;                /* 0x08 */
+       u32 sr;                 /* 0x0C */
+} slt_t;
+
+typedef struct gpio {
+       /* Port Output Data Registers */
+       u8 podr_fbctl;          /*0x00 */
+       u8 podr_fbcs;           /*0x01 */
+       u8 podr_dma;            /*0x02 */
+       u8 rsvd1;               /*0x03 */
+       u8 podr_fec0h;          /*0x04 */
+       u8 podr_fec0l;          /*0x05 */
+       u8 podr_fec1h;          /*0x06 */
+       u8 podr_fec1l;          /*0x07 */
+       u8 podr_feci2c;         /*0x08 */
+       u8 podr_pcibg;          /*0x09 */
+       u8 podr_pcibr;          /*0x0A */
+       u8 rsvd2;               /*0x0B */
+       u8 podr_psc3psc2;       /*0x0C */
+       u8 podr_psc1psc0;       /*0x0D */
+       u8 podr_dspi;           /*0x0E */
+       u8 rsvd3;               /*0x0F */
+
+       /* Port Data Direction Registers */
+       u8 pddr_fbctl;          /*0x10 */
+       u8 pddr_fbcs;           /*0x11 */
+       u8 pddr_dma;            /*0x12 */
+       u8 rsvd4;               /*0x13 */
+       u8 pddr_fec0h;          /*0x14 */
+       u8 pddr_fec0l;          /*0x15 */
+       u8 pddr_fec1h;          /*0x16 */
+       u8 pddr_fec1l;          /*0x17 */
+       u8 pddr_feci2c;         /*0x18 */
+       u8 pddr_pcibg;          /*0x19 */
+       u8 pddr_pcibr;          /*0x1A */
+       u8 rsvd5;               /*0x1B */
+       u8 pddr_psc3psc2;       /*0x1C */
+       u8 pddr_psc1psc0;       /*0x1D */
+       u8 pddr_dspi;           /*0x1E */
+       u8 rsvd6;               /*0x1F */
+
+       /* Port Pin Data/Set Data Registers */
+       u8 ppdsdr_fbctl;        /*0x20 */
+       u8 ppdsdr_fbcs;         /*0x21 */
+       u8 ppdsdr_dma;          /*0x22 */
+       u8 rsvd7;               /*0x23 */
+       u8 ppdsdr_fec0h;        /*0x24 */
+       u8 ppdsdr_fec0l;        /*0x25 */
+       u8 ppdsdr_fec1h;        /*0x26 */
+       u8 ppdsdr_fec1l;        /*0x27 */
+       u8 ppdsdr_feci2c;       /*0x28 */
+       u8 ppdsdr_pcibg;        /*0x29 */
+       u8 ppdsdr_pcibr;        /*0x2A */
+       u8 rsvd8;               /*0x2B */
+       u8 ppdsdr_psc3psc2;     /*0x2C */
+       u8 ppdsdr_psc1psc0;     /*0x2D */
+       u8 ppdsdr_dspi;         /*0x2E */
+       u8 rsvd9;               /*0x2F */
+
+       /* Port Clear Output Data Registers */
+       u8 pclrr_fbctl;         /*0x30 */
+       u8 pclrr_fbcs;          /*0x31 */
+       u8 pclrr_dma;           /*0x32 */
+       u8 rsvd10;              /*0x33 */
+       u8 pclrr_fec0h;         /*0x34 */
+       u8 pclrr_fec0l;         /*0x35 */
+       u8 pclrr_fec1h;         /*0x36 */
+       u8 pclrr_fec1l;         /*0x37 */
+       u8 pclrr_feci2c;        /*0x38 */
+       u8 pclrr_pcibg;         /*0x39 */
+       u8 pclrr_pcibr;         /*0x3A */
+       u8 rsvd11;              /*0x3B */
+       u8 pclrr_psc3psc2;      /*0x3C */
+       u8 pclrr_psc1psc0;      /*0x3D */
+       u8 pclrr_dspi;          /*0x3E */
+       u8 rsvd12;              /*0x3F */
+
+       /* Pin Assignment Registers */
+       u16 par_fbctl;          /*0x40 */
+       u8 par_fbcs;            /*0x42 */
+       u8 par_dma;             /*0x43 */
+       u16 par_feci2cirq;      /*0x44 */
+       u16 rsvd13;             /*0x46 */
+       u16 par_pcibg;          /*0x48 */
+       u16 par_pcibr;          /*0x4A */
+       u8 par_psc3;            /*0x4C */
+       u8 par_psc2;            /*0x4D */
+       u8 par_psc1;            /*0x4E */
+       u8 par_psc0;            /*0x4F */
+       u16 par_dspi;           /*0x50 */
+       u8 par_timer;           /*0x52 */
+       u8 rsvd14;              /*0x53 */
+} gpio_t;
+
+typedef struct pci {
+       u32 idr;                /* 0x00 Device Id / Vendor Id */
+       u32 scr;                /* 0x04 Status / command */
+       u32 ccrir;              /* 0x08 Class Code / Revision Id */
+       u32 cr1;                /* 0x0c Configuration 1 */
+       u32 bar0;               /* 0x10 Base address register 0 */
+       u32 bar1;               /* 0x14 Base address register 1 */
+       u32 bar2;               /* 0x18 NA */
+       u32 bar3;               /* 0x1c NA */
+       u32 bar4;               /* 0x20 NA */
+       u32 bar5;               /* 0x24 NA */
+       u32 ccpr;               /* 0x28 Cardbus CIS Pointer */
+       u32 sid;                /* 0x2c Subsystem ID / Subsystem Vendor ID */
+       u32 erbar;              /* 0x30 Expansion ROM Base Address */
+       u32 cpr;                /* 0x34 Capabilities Pointer */
+       u32 rsvd1;              /* 0x38 */
+       u32 cr2;                /* 0x3c Configuration 2 */
+       u32 rsvd2[8];           /* 0x40 - 0x5f */
+
+       /* General control / status registers */
+       u32 gscr;               /* 0x60 Global Status / Control */
+       u32 tbatr0a;            /* 0x64 Target Base Adr Translation 0 */
+       u32 tbatr1a;            /* 0x68 Target Base Adr Translation 1 */
+       u32 tcr1;               /* 0x6c Target Control 1 Register */
+       u32 iw0btar;            /* 0x70 Initiator Win 0 Base/Translation adr */
+       u32 iw1btar;            /* 0x74 Initiator Win 1 Base/Translation adr */
+       u32 iw2btar;            /* 0x78 NA */
+       u32 rsvd3;              /* 0x7c */
+       u32 iwcr;               /* 0x80 Initiator Window Configuration */
+       u32 icr;                /* 0x84 Initiator Control */
+       u32 isr;                /* 0x88 Initiator Status */
+       u32 tcr2;               /* 0x8c NA */
+       u32 tbatr0;             /* 0x90 NA */
+       u32 tbatr1;             /* 0x94 NA */
+       u32 tbatr2;             /* 0x98 NA */
+       u32 tbatr3;             /* 0x9c NA */
+       u32 tbatr4;             /* 0xa0 NA */
+       u32 tbatr5;             /* 0xa4 NA */
+       u32 intr;               /* 0xa8 NA */
+       u32 rsvd4[19];          /* 0xac - 0xf7 */
+       u32 car;                /* 0xf8 Configuration Address */
+} pci_t;
+
+typedef struct pci_arbiter {
+       /* Pci Arbiter Registers */
+       union {
+               u32 acr;        /* Arbiter Control */
+               u32 asr;        /* Arbiter Status */
+       };
+} pciarb_t;
+#endif                         /* __IMMAP_547x_8x__ */
index 91d759219de94d72afe3b417b4ef8399cf24c2ec..33c454a4373155dc25bb372830007a60aea0d4a0 100644 (file)
 
 #include <asm/byteorder.h>
 
-/* ++roman: The assignments to temp. vars avoid that gcc sometimes generates
- * two accesses to memory, which may be undesirable for some devices.
- */
-#define __raw_readb(addr) \
-    ({ u8 __v = (*(volatile u8 *) (addr)); __v; })
-#define __raw_readw(addr) \
-    ({ u16 __v = (*(volatile u16 *) (addr)); __v; })
-#define __raw_readl(addr) \
-    ({ u32 __v = (*(volatile u32 *) (addr)); __v; })
+#define __raw_readb(addr) (*(volatile u8 *)(addr))
+#define __raw_readw(addr) (*(volatile u16 *)(addr))
+#define __raw_readl(addr) (*(volatile u32 *)(addr))
 
-#define __raw_writeb(addr,b) (void)((*(volatile u8 *) (addr)) = (b))
-#define __raw_writew(addr,w) (void)((*(volatile u16 *) (addr)) = (w))
-#define __raw_writel(addr,l) (void)((*(volatile u32 *) (addr)) = (l))
+#define __raw_writeb(b,addr) ((*(volatile u8 *) (addr)) = (b))
+#define __raw_writew(w,addr) ((*(volatile u16 *) (addr)) = (w))
+#define __raw_writel(l,addr) ((*(volatile u32 *) (addr)) = (l))
 
 #define readb(addr)            in_8((volatile u8 *)(addr))
 #define writeb(b,addr)         out_8((volatile u8 *)(addr), (b))
@@ -245,8 +239,8 @@ typedef unsigned long phys_addr_t;
 #define MAP_WRBACK     (0)
 #define MAP_WRTHROUGH  (0)
 
-static inline void *
-map_physmem(phys_addr_t paddr, unsigned long len, unsigned long flags)
+static inline void *map_physmem(phys_addr_t paddr, unsigned long len,
+                               unsigned long flags)
 {
        return (void *)paddr;
 }
diff --git a/include/asm-m68k/m5227x.h b/include/asm-m68k/m5227x.h
new file mode 100644 (file)
index 0000000..afd31ba
--- /dev/null
@@ -0,0 +1,796 @@
+/*
+ * MCF5227x Internal Memory Map
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __MCF5227X__
+#define __MCF5227X__
+
+/*********************************************************************
+* Interrupt Controller (INTC)
+*********************************************************************/
+#define INT0_LO_RSVD0                  (0)
+#define INT0_LO_EPORT1                 (1)
+#define INT0_LO_EPORT4                 (4)
+#define INT0_LO_EPORT7                 (7)
+#define INT0_LO_EDMA_00                        (8)
+#define INT0_LO_EDMA_01                        (9)
+#define INT0_LO_EDMA_02                        (10)
+#define INT0_LO_EDMA_03                        (11)
+#define INT0_LO_EDMA_04                        (12)
+#define INT0_LO_EDMA_05                        (13)
+#define INT0_LO_EDMA_06                        (14)
+#define INT0_LO_EDMA_07                        (15)
+#define INT0_LO_EDMA_08                        (16)
+#define INT0_LO_EDMA_09                        (17)
+#define INT0_LO_EDMA_10                        (18)
+#define INT0_LO_EDMA_11                        (19)
+#define INT0_LO_EDMA_12                        (20)
+#define INT0_LO_EDMA_13                        (21)
+#define INT0_LO_EDMA_14                        (22)
+#define INT0_LO_EDMA_15                        (23)
+#define INT0_LO_EDMA_ERR               (24)
+#define INT0_LO_SCM_CWIC               (25)
+#define INT0_LO_UART0                  (26)
+#define INT0_LO_UART1                  (27)
+#define INT0_LO_UART2                  (28)
+#define INT0_LO_I2C                    (30)
+#define INT0_LO_DSPI                   (31)
+#define INT0_HI_DTMR0                  (32)
+#define INT0_HI_DTMR1                  (33)
+#define INT0_HI_DTMR2                  (34)
+#define INT0_HI_DTMR3                  (35)
+#define INT0_HI_SCMIR                  (62)
+#define INT0_HI_RTC_ISR                        (63)
+
+#define INT1_HI_CAN_BOFFINT            (1)
+#define INT1_HI_CAN_ERRINT             (3)
+#define INT1_HI_CAN_BUF0I              (4)
+#define INT1_HI_CAN_BUF1I              (5)
+#define INT1_HI_CAN_BUF2I              (6)
+#define INT1_HI_CAN_BUF3I              (7)
+#define INT1_HI_CAN_BUF4I              (8)
+#define INT1_HI_CAN_BUF5I              (9)
+#define INT1_HI_CAN_BUF6I              (10)
+#define INT1_HI_CAN_BUF7I              (11)
+#define INT1_HI_CAN_BUF8I              (12)
+#define INT1_HI_CAN_BUF9I              (13)
+#define INT1_HI_CAN_BUF10I             (14)
+#define INT1_HI_CAN_BUF11I             (15)
+#define INT1_HI_CAN_BUF12I             (16)
+#define INT1_HI_CAN_BUF13I             (17)
+#define INT1_HI_CAN_BUF14I             (18)
+#define INT1_HI_CAN_BUF15I             (19)
+#define INT1_HI_PIT0_PIF               (43)
+#define INT1_HI_PIT1_PIF               (44)
+#define INT1_HI_USBOTG_STS             (47)
+#define INT1_HI_SSI_ISR                        (49)
+#define INT1_HI_PWM_INT                        (50)
+#define INT1_HI_LCDC_ISR               (51)
+#define INT1_HI_CCM_UOCSR              (53)
+#define INT1_HI_DSPI_EOQF              (54)
+#define INT1_HI_DSPI_TFFF              (55)
+#define INT1_HI_DSPI_TCF               (56)
+#define INT1_HI_DSPI_TFUF              (57)
+#define INT1_HI_DSPI_RFDF              (58)
+#define INT1_HI_DSPI_RFOF              (59)
+#define INT1_HI_DSPI_RFOF_TFUF         (60)
+#define INT1_HI_TOUCH_ADC              (61)
+#define INT1_HI_PLL_LOCKS              (62)
+
+/* Bit definitions and macros for IPRH */
+#define INTC_IPRH_INT32                        (0x00000001)
+#define INTC_IPRH_INT33                        (0x00000002)
+#define INTC_IPRH_INT34                        (0x00000004)
+#define INTC_IPRH_INT35                        (0x00000008)
+#define INTC_IPRH_INT36                        (0x00000010)
+#define INTC_IPRH_INT37                        (0x00000020)
+#define INTC_IPRH_INT38                        (0x00000040)
+#define INTC_IPRH_INT39                        (0x00000080)
+#define INTC_IPRH_INT40                        (0x00000100)
+#define INTC_IPRH_INT41                        (0x00000200)
+#define INTC_IPRH_INT42                        (0x00000400)
+#define INTC_IPRH_INT43                        (0x00000800)
+#define INTC_IPRH_INT44                        (0x00001000)
+#define INTC_IPRH_INT45                        (0x00002000)
+#define INTC_IPRH_INT46                        (0x00004000)
+#define INTC_IPRH_INT47                        (0x00008000)
+#define INTC_IPRH_INT48                        (0x00010000)
+#define INTC_IPRH_INT49                        (0x00020000)
+#define INTC_IPRH_INT50                        (0x00040000)
+#define INTC_IPRH_INT51                        (0x00080000)
+#define INTC_IPRH_INT52                        (0x00100000)
+#define INTC_IPRH_INT53                        (0x00200000)
+#define INTC_IPRH_INT54                        (0x00400000)
+#define INTC_IPRH_INT55                        (0x00800000)
+#define INTC_IPRH_INT56                        (0x01000000)
+#define INTC_IPRH_INT57                        (0x02000000)
+#define INTC_IPRH_INT58                        (0x04000000)
+#define INTC_IPRH_INT59                        (0x08000000)
+#define INTC_IPRH_INT60                        (0x10000000)
+#define INTC_IPRH_INT61                        (0x20000000)
+#define INTC_IPRH_INT62                        (0x40000000)
+#define INTC_IPRH_INT63                        (0x80000000)
+
+/* Bit definitions and macros for IPRL */
+#define INTC_IPRL_INT0                 (0x00000001)
+#define INTC_IPRL_INT1                 (0x00000002)
+#define INTC_IPRL_INT2                 (0x00000004)
+#define INTC_IPRL_INT3                 (0x00000008)
+#define INTC_IPRL_INT4                 (0x00000010)
+#define INTC_IPRL_INT5                 (0x00000020)
+#define INTC_IPRL_INT6                 (0x00000040)
+#define INTC_IPRL_INT7                 (0x00000080)
+#define INTC_IPRL_INT8                 (0x00000100)
+#define INTC_IPRL_INT9                 (0x00000200)
+#define INTC_IPRL_INT10                        (0x00000400)
+#define INTC_IPRL_INT11                        (0x00000800)
+#define INTC_IPRL_INT12                        (0x00001000)
+#define INTC_IPRL_INT13                        (0x00002000)
+#define INTC_IPRL_INT14                        (0x00004000)
+#define INTC_IPRL_INT15                        (0x00008000)
+#define INTC_IPRL_INT16                        (0x00010000)
+#define INTC_IPRL_INT17                        (0x00020000)
+#define INTC_IPRL_INT18                        (0x00040000)
+#define INTC_IPRL_INT19                        (0x00080000)
+#define INTC_IPRL_INT20                        (0x00100000)
+#define INTC_IPRL_INT21                        (0x00200000)
+#define INTC_IPRL_INT22                        (0x00400000)
+#define INTC_IPRL_INT23                        (0x00800000)
+#define INTC_IPRL_INT24                        (0x01000000)
+#define INTC_IPRL_INT25                        (0x02000000)
+#define INTC_IPRL_INT26                        (0x04000000)
+#define INTC_IPRL_INT27                        (0x08000000)
+#define INTC_IPRL_INT28                        (0x10000000)
+#define INTC_IPRL_INT29                        (0x20000000)
+#define INTC_IPRL_INT30                        (0x40000000)
+#define INTC_IPRL_INT31                        (0x80000000)
+
+/* Bit definitions and macros for IMRH */
+#define INTC_IMRH_INT_MASK32           (0x00000001)
+#define INTC_IMRH_INT_MASK33           (0x00000002)
+#define INTC_IMRH_INT_MASK34           (0x00000004)
+#define INTC_IMRH_INT_MASK35           (0x00000008)
+#define INTC_IMRH_INT_MASK36           (0x00000010)
+#define INTC_IMRH_INT_MASK37           (0x00000020)
+#define INTC_IMRH_INT_MASK38           (0x00000040)
+#define INTC_IMRH_INT_MASK39           (0x00000080)
+#define INTC_IMRH_INT_MASK40           (0x00000100)
+#define INTC_IMRH_INT_MASK41           (0x00000200)
+#define INTC_IMRH_INT_MASK42           (0x00000400)
+#define INTC_IMRH_INT_MASK43           (0x00000800)
+#define INTC_IMRH_INT_MASK44           (0x00001000)
+#define INTC_IMRH_INT_MASK45           (0x00002000)
+#define INTC_IMRH_INT_MASK46           (0x00004000)
+#define INTC_IMRH_INT_MASK47           (0x00008000)
+#define INTC_IMRH_INT_MASK48           (0x00010000)
+#define INTC_IMRH_INT_MASK49           (0x00020000)
+#define INTC_IMRH_INT_MASK50           (0x00040000)
+#define INTC_IMRH_INT_MASK51           (0x00080000)
+#define INTC_IMRH_INT_MASK52           (0x00100000)
+#define INTC_IMRH_INT_MASK53           (0x00200000)
+#define INTC_IMRH_INT_MASK54           (0x00400000)
+#define INTC_IMRH_INT_MASK55           (0x00800000)
+#define INTC_IMRH_INT_MASK56           (0x01000000)
+#define INTC_IMRH_INT_MASK57           (0x02000000)
+#define INTC_IMRH_INT_MASK58           (0x04000000)
+#define INTC_IMRH_INT_MASK59           (0x08000000)
+#define INTC_IMRH_INT_MASK60           (0x10000000)
+#define INTC_IMRH_INT_MASK61           (0x20000000)
+#define INTC_IMRH_INT_MASK62           (0x40000000)
+#define INTC_IMRH_INT_MASK63           (0x80000000)
+
+/* Bit definitions and macros for IMRL */
+#define INTC_IMRL_INT_MASK0            (0x00000001)
+#define INTC_IMRL_INT_MASK1            (0x00000002)
+#define INTC_IMRL_INT_MASK2            (0x00000004)
+#define INTC_IMRL_INT_MASK3            (0x00000008)
+#define INTC_IMRL_INT_MASK4            (0x00000010)
+#define INTC_IMRL_INT_MASK5            (0x00000020)
+#define INTC_IMRL_INT_MASK6            (0x00000040)
+#define INTC_IMRL_INT_MASK7            (0x00000080)
+#define INTC_IMRL_INT_MASK8            (0x00000100)
+#define INTC_IMRL_INT_MASK9            (0x00000200)
+#define INTC_IMRL_INT_MASK10           (0x00000400)
+#define INTC_IMRL_INT_MASK11           (0x00000800)
+#define INTC_IMRL_INT_MASK12           (0x00001000)
+#define INTC_IMRL_INT_MASK13           (0x00002000)
+#define INTC_IMRL_INT_MASK14           (0x00004000)
+#define INTC_IMRL_INT_MASK15           (0x00008000)
+#define INTC_IMRL_INT_MASK16           (0x00010000)
+#define INTC_IMRL_INT_MASK17           (0x00020000)
+#define INTC_IMRL_INT_MASK18           (0x00040000)
+#define INTC_IMRL_INT_MASK19           (0x00080000)
+#define INTC_IMRL_INT_MASK20           (0x00100000)
+#define INTC_IMRL_INT_MASK21           (0x00200000)
+#define INTC_IMRL_INT_MASK22           (0x00400000)
+#define INTC_IMRL_INT_MASK23           (0x00800000)
+#define INTC_IMRL_INT_MASK24           (0x01000000)
+#define INTC_IMRL_INT_MASK25           (0x02000000)
+#define INTC_IMRL_INT_MASK26           (0x04000000)
+#define INTC_IMRL_INT_MASK27           (0x08000000)
+#define INTC_IMRL_INT_MASK28           (0x10000000)
+#define INTC_IMRL_INT_MASK29           (0x20000000)
+#define INTC_IMRL_INT_MASK30           (0x40000000)
+#define INTC_IMRL_INT_MASK31           (0x80000000)
+
+/* Bit definitions and macros for INTFRCH */
+#define INTC_INTFRCH_INTFRC32          (0x00000001)
+#define INTC_INTFRCH_INTFRC33          (0x00000002)
+#define INTC_INTFRCH_INTFRC34          (0x00000004)
+#define INTC_INTFRCH_INTFRC35          (0x00000008)
+#define INTC_INTFRCH_INTFRC36          (0x00000010)
+#define INTC_INTFRCH_INTFRC37          (0x00000020)
+#define INTC_INTFRCH_INTFRC38          (0x00000040)
+#define INTC_INTFRCH_INTFRC39          (0x00000080)
+#define INTC_INTFRCH_INTFRC40          (0x00000100)
+#define INTC_INTFRCH_INTFRC41          (0x00000200)
+#define INTC_INTFRCH_INTFRC42          (0x00000400)
+#define INTC_INTFRCH_INTFRC43          (0x00000800)
+#define INTC_INTFRCH_INTFRC44          (0x00001000)
+#define INTC_INTFRCH_INTFRC45          (0x00002000)
+#define INTC_INTFRCH_INTFRC46          (0x00004000)
+#define INTC_INTFRCH_INTFRC47          (0x00008000)
+#define INTC_INTFRCH_INTFRC48          (0x00010000)
+#define INTC_INTFRCH_INTFRC49          (0x00020000)
+#define INTC_INTFRCH_INTFRC50          (0x00040000)
+#define INTC_INTFRCH_INTFRC51          (0x00080000)
+#define INTC_INTFRCH_INTFRC52          (0x00100000)
+#define INTC_INTFRCH_INTFRC53          (0x00200000)
+#define INTC_INTFRCH_INTFRC54          (0x00400000)
+#define INTC_INTFRCH_INTFRC55          (0x00800000)
+#define INTC_INTFRCH_INTFRC56          (0x01000000)
+#define INTC_INTFRCH_INTFRC57          (0x02000000)
+#define INTC_INTFRCH_INTFRC58          (0x04000000)
+#define INTC_INTFRCH_INTFRC59          (0x08000000)
+#define INTC_INTFRCH_INTFRC60          (0x10000000)
+#define INTC_INTFRCH_INTFRC61          (0x20000000)
+#define INTC_INTFRCH_INTFRC62          (0x40000000)
+#define INTC_INTFRCH_INTFRC63          (0x80000000)
+
+/* Bit definitions and macros for INTFRCL */
+#define INTC_INTFRCL_INTFRC0           (0x00000001)
+#define INTC_INTFRCL_INTFRC1           (0x00000002)
+#define INTC_INTFRCL_INTFRC2           (0x00000004)
+#define INTC_INTFRCL_INTFRC3           (0x00000008)
+#define INTC_INTFRCL_INTFRC4           (0x00000010)
+#define INTC_INTFRCL_INTFRC5           (0x00000020)
+#define INTC_INTFRCL_INTFRC6           (0x00000040)
+#define INTC_INTFRCL_INTFRC7           (0x00000080)
+#define INTC_INTFRCL_INTFRC8           (0x00000100)
+#define INTC_INTFRCL_INTFRC9           (0x00000200)
+#define INTC_INTFRCL_INTFRC10          (0x00000400)
+#define INTC_INTFRCL_INTFRC11          (0x00000800)
+#define INTC_INTFRCL_INTFRC12          (0x00001000)
+#define INTC_INTFRCL_INTFRC13          (0x00002000)
+#define INTC_INTFRCL_INTFRC14          (0x00004000)
+#define INTC_INTFRCL_INTFRC15          (0x00008000)
+#define INTC_INTFRCL_INTFRC16          (0x00010000)
+#define INTC_INTFRCL_INTFRC17          (0x00020000)
+#define INTC_INTFRCL_INTFRC18          (0x00040000)
+#define INTC_INTFRCL_INTFRC19          (0x00080000)
+#define INTC_INTFRCL_INTFRC20          (0x00100000)
+#define INTC_INTFRCL_INTFRC21          (0x00200000)
+#define INTC_INTFRCL_INTFRC22          (0x00400000)
+#define INTC_INTFRCL_INTFRC23          (0x00800000)
+#define INTC_INTFRCL_INTFRC24          (0x01000000)
+#define INTC_INTFRCL_INTFRC25          (0x02000000)
+#define INTC_INTFRCL_INTFRC26          (0x04000000)
+#define INTC_INTFRCL_INTFRC27          (0x08000000)
+#define INTC_INTFRCL_INTFRC28          (0x10000000)
+#define INTC_INTFRCL_INTFRC29          (0x20000000)
+#define INTC_INTFRCL_INTFRC30          (0x40000000)
+#define INTC_INTFRCL_INTFRC31          (0x80000000)
+
+/* Bit definitions and macros for ICONFIG */
+#define INTC_ICONFIG_EMASK             (0x0020)
+#define INTC_ICONFIG_ELVLPRI1          (0x0200)
+#define INTC_ICONFIG_ELVLPRI2          (0x0400)
+#define INTC_ICONFIG_ELVLPRI3          (0x0800)
+#define INTC_ICONFIG_ELVLPRI4          (0x1000)
+#define INTC_ICONFIG_ELVLPRI5          (0x2000)
+#define INTC_ICONFIG_ELVLPRI6          (0x4000)
+#define INTC_ICONFIG_ELVLPRI7          (0x8000)
+
+/* Bit definitions and macros for SIMR */
+#define INTC_SIMR_SIMR(x)              (((x)&0x7F))
+
+/* Bit definitions and macros for CIMR */
+#define INTC_CIMR_CIMR(x)              (((x)&0x7F))
+
+/* Bit definitions and macros for CLMASK */
+#define INTC_CLMASK_CLMASK(x)          (((x)&0x0F))
+
+/* Bit definitions and macros for SLMASK */
+#define INTC_SLMASK_SLMASK(x)          (((x)&0x0F))
+
+/* Bit definitions and macros for ICR group */
+#define INTC_ICR_IL(x)                 (((x)&0x07))
+
+/*********************************************************************
+* Reset Controller Module (RCM)
+*********************************************************************/
+
+/* Bit definitions and macros for RCR */
+#define RCM_RCR_FRCRSTOUT              (0x40)
+#define RCM_RCR_SOFTRST                        (0x80)
+
+/* Bit definitions and macros for RSR */
+#define RCM_RSR_LOL                    (0x01)
+#define RCM_RSR_WDR_CORE               (0x02)
+#define RCM_RSR_EXT                    (0x04)
+#define RCM_RSR_POR                    (0x08)
+#define RCM_RSR_SOFT                   (0x20)
+
+/*********************************************************************
+* Chip Configuration Module (CCM)
+*********************************************************************/
+
+/* Bit definitions and macros for CCR */
+#define CCM_CCR_DRAMSEL                        (0x0100)
+#define CCM_CCR_CSC_MASK               (0xFF3F)
+#define CCM_CCR_CSC_FBCS5_CS4          (0x00C0)
+#define CCM_CCR_CSC_FBCS5_A22          (0x0080)
+#define CCM_CCR_CSC_FB_A23_A22         (0x0040)
+#define CCM_CCR_LIMP                   (0x0020)
+#define CCM_CCR_LOAD                   (0x0010)
+#define CCM_CCR_BOOTPS_MASK            (0xFFF3)
+#define CCM_CCR_BOOTPS_PS16            (0x0008)
+#define CCM_CCR_BOOTPS_PS8             (0x0004)
+#define CCM_CCR_BOOTPS_PS32            (0x0000)
+#define CCM_CCR_OSCMODE_OSCBYPASS      (0x0002)
+
+/* Bit definitions and macros for RCON */
+#define CCM_RCON_CSC_MASK              (0xFF3F)
+#define CCM_RCON_CSC_FBCS5_CS4         (0x00C0)
+#define CCM_RCON_CSC_FBCS5_A22         (0x0080)
+#define CCM_RCON_CSC_FB_A23_A22                (0x0040)
+#define CCM_RCON_LIMP                  (0x0020)
+#define CCM_RCON_LOAD                  (0x0010)
+#define CCM_RCON_BOOTPS_MASK           (0xFFF3)
+#define CCM_RCON_BOOTPS_PS16           (0x0008)
+#define CCM_RCON_BOOTPS_PS8            (0x0004)
+#define CCM_RCON_BOOTPS_PS32           (0x0000)
+#define CCM_RCON_OSCMODE_OSCBYPASS     (0x0002)
+
+/* Bit definitions and macros for CIR */
+#define CCM_CIR_PRN(x)                 (((x)&0x003F))  /* Part revision number */
+#define CCM_CIR_PIN(x)                 (((x)&0x03FF)<<6)       /* Part identification number */
+#define CCM_CIR_PIN_MASK               (0xFFC0)
+#define CCM_CIR_PRN_MASK               (0x003F)
+#define CCM_CIR_PIN_MCF52277           (0x0000)
+
+/* Bit definitions and macros for MISCCR */
+#define CCM_MISCCR_RTCSRC              (0x4000)
+#define CCM_MISCCR_USBPUE              (0x2000)        /* USB transceiver pull-up */
+#define CCM_MISCCR_LIMP                        (0x1000)        /* Limp mode enable */
+
+#define CCM_MISCCR_BME                 (0x0800)        /* Bus monitor ext en bit */
+#define CCM_MISCCR_BMT_65536           (0)
+#define CCM_MISCCR_BMT_32768           (1)
+#define CCM_MISCCR_BMT_16384           (2)
+#define CCM_MISCCR_BMT_8192            (3)
+#define CCM_MISCCR_BMT_4096            (4)
+#define CCM_MISCCR_BMT_2048            (5)
+#define CCM_MISCCR_BMT_1024            (6)
+#define CCM_MISCCR_BMT_512             (7)
+
+#define CCM_MISCCR_SSIPUE              (0x0080)        /* SSI RXD/TXD pull enable */
+#define CCM_MISCCR_SSIPUS              (0x0040)        /* SSI RXD/TXD pull select */
+#define CCM_MISCCR_TIMDMA              (0x0020)        /* Timer DMA mux selection */
+#define CCM_MISCCR_SSISRC              (0x0010)        /* SSI clock source */
+#define CCM_MISCCR_LCDCHEN             (0x0004)        /* LCD Int CLK en */
+#define CCM_MISCCR_USBOC               (0x0002)        /* USB VBUS over-current sense pol */
+#define CCM_MISCCR_USBSRC              (0x0001)        /* USB clock source */
+
+/* Bit definitions and macros for CDR */
+#define CCM_CDR_USBDIV(x)              (((x)&0x0003)<<12)
+#define CCM_CDR_LPDIV(x)               (((x)&0x000F)<<8)       /* Low power clk div */
+#define CCM_CDR_SSIDIV(x)              (((x)&0x00FF))  /* SSI oversampling clk div */
+
+/* Bit definitions and macros for UOCSR */
+#define CCM_UOCSR_DPPD                 (0x2000)        /* D+ 15Kohm pull-down (rd-only) */
+#define CCM_UOCSR_DMPD                 (0x1000)        /* D- 15Kohm pull-down (rd-only) */
+#define CCM_UOCSR_CRG_VBUS             (0x0400)        /* VBUS charge resistor enabled (rd-only) */
+#define CCM_UOCSR_DCR_VBUS             (0x0200)        /* VBUS discharge resistor en (rd-only) */
+#define CCM_UOCSR_DPPU                 (0x0100)        /* D+ pull-up for FS enabled (rd-only) */
+#define CCM_UOCSR_AVLD                 (0x0080)        /* A-peripheral valid indicator */
+#define CCM_UOCSR_BVLD                 (0x0040)        /* B-peripheral valid indicator */
+#define CCM_UOCSR_VVLD                 (0x0020)        /* VBUS valid indicator */
+#define CCM_UOCSR_SEND                 (0x0010)        /* Session end */
+#define CCM_UOCSR_WKUP                 (0x0004)        /* USB OTG controller wake-up event */
+#define CCM_UOCSR_UOMIE                        (0x0002)        /* USB OTG misc interrupt en */
+#define CCM_UOCSR_XPDE                 (0x0001)        /* On-chip transceiver pull-down en */
+
+/*********************************************************************
+* General Purpose I/O Module (GPIO)
+*********************************************************************/
+/* Bit definitions and macros for PAR_BE */
+#define GPIO_PAR_BE_MASK               (0x0F)
+#define GPIO_PAR_BE_BE3_BE3            (0x08)
+#define GPIO_PAR_BE_BE3_GPIO           (0x00)
+#define GPIO_PAR_BE_BE2_BE2            (0x04)
+#define GPIO_PAR_BE_BE2_GPIO           (0x00)
+#define GPIO_PAR_BE_BE1_BE1            (0x02)
+#define GPIO_PAR_BE_BE1_GPIO           (0x00)
+#define GPIO_PAR_BE_BE0_BE0            (0x01)
+#define GPIO_PAR_BE_BE0_GPIO           (0x00)
+
+/* Bit definitions and macros for PAR_CS */
+#define GPIO_PAR_CS_CS3                        (0x10)
+#define GPIO_PAR_CS_CS2                        (0x08)
+#define GPIO_PAR_CS_CS1_FBCS1          (0x06)
+#define GPIO_PAR_CS_CS1_SDCS1          (0x04)
+#define GPIO_PAR_CS_CS1_GPIO           (0x00)
+#define GPIO_PAR_CS_CS0                        (0x01)
+
+/* Bit definitions and macros for PAR_FBCTL */
+#define GPIO_PAR_FBCTL_OE              (0x80)
+#define GPIO_PAR_FBCTL_TA              (0x40)
+#define GPIO_PAR_FBCTL_RW              (0x20)
+#define GPIO_PAR_FBCTL_TS_MASK         (0xE7)
+#define GPIO_PAR_FBCTL_TS_FBTS         (0x18)
+#define GPIO_PAR_FBCTL_TS_DMAACK       (0x10)
+#define GPIO_PAR_FBCTL_TS_GPIO         (0x00)
+
+/* Bit definitions and macros for PAR_FECI2C */
+#define GPIO_PAR_I2C_SCL_MASK          (0xF3)
+#define GPIO_PAR_I2C_SCL_SCL           (0x0C)
+#define GPIO_PAR_I2C_SCL_CANTXD                (0x08)
+#define GPIO_PAR_I2C_SCL_U2TXD         (0x04)
+#define GPIO_PAR_I2C_SCL_GPIO          (0x00)
+
+#define GPIO_PAR_I2C_SDA_MASK          (0xFC)
+#define GPIO_PAR_I2C_SDA_SDA           (0x03)
+#define GPIO_PAR_I2C_SDA_CANRXD                (0x02)
+#define GPIO_PAR_I2C_SDA_U2RXD         (0x01)
+#define GPIO_PAR_I2C_SDA_GPIO          (0x00)
+
+/* Bit definitions and macros for PAR_UART */
+#define GPIO_PAR_UART_U1CTS_MASK       (0x3FFF)
+#define GPIO_PAR_UART_U1CTS_U1CTS      (0xC000)
+#define GPIO_PAR_UART_U1CTS_SSIBCLK    (0x8000)
+#define GPIO_PAR_UART_U1CTS_LCDCLS     (0x4000)
+#define GPIO_PAR_UART_U1CTS_GPIO       (0x0000)
+
+#define GPIO_PAR_UART_U1RTS_MASK       (0xCFFF)
+#define GPIO_PAR_UART_U1RTS_U1RTS      (0x3000)
+#define GPIO_PAR_UART_U1RTS_SSIFS      (0x2000)
+#define GPIO_PAR_UART_U1RTS_LCDPS      (0x1000)
+#define GPIO_PAR_UART_U1RTS_GPIO       (0x0000)
+
+#define GPIO_PAR_UART_U1RXD_MASK       (0xF3FF)
+#define GPIO_PAR_UART_U1RXD_U1RXD      (0x0C00)
+#define GPIO_PAR_UART_U1RXD_SSIRXD     (0x0800)
+#define GPIO_PAR_UART_U1RXD_GPIO       (0x0000)
+
+#define GPIO_PAR_UART_U1TXD_MASK       (0xFCFF)
+#define GPIO_PAR_UART_U1TXD_U1TXD      (0x0300)
+#define GPIO_PAR_UART_U1TXD_SSITXD     (0x0200)
+#define GPIO_PAR_UART_U1TXD_GPIO       (0x0000)
+
+#define GPIO_PAR_UART_U0CTS_MASK       (0xFF3F)
+#define GPIO_PAR_UART_U0CTS_U0CTS      (0x00C0)
+#define GPIO_PAR_UART_U0CTS_T1OUT      (0x0080)
+#define GPIO_PAR_UART_U0CTS_USBVBUSEN  (0x0040)
+#define GPIO_PAR_UART_U0CTS_GPIO       (0x0000)
+
+#define GPIO_PAR_UART_U0RTS_MASK       (0xFFCF)
+#define GPIO_PAR_UART_U0RTS_U0RTS      (0x0030)
+#define GPIO_PAR_UART_U0RTS_T1IN       (0x0020)
+#define GPIO_PAR_UART_U0RTS_USBVBUSOC  (0x0010)
+#define GPIO_PAR_UART_U0RTS_GPIO       (0x0000)
+
+#define GPIO_PAR_UART_U0RXD_MASK       (0xFFF3)
+#define GPIO_PAR_UART_U0RXD_U0RXD      (0x000C)
+#define GPIO_PAR_UART_U0RXD_CANRX      (0x0008)
+#define GPIO_PAR_UART_U0RXD_GPIO       (0x0000)
+
+#define GPIO_PAR_UART_U0TXD_MASK       (0xFFFC)
+#define GPIO_PAR_UART_U0TXD_U0TXD      (0x0003)
+#define GPIO_PAR_UART_U0TXD_CANTX      (0x0002)
+#define GPIO_PAR_UART_U0TXD_GPIO       (0x0000)
+
+/* Bit definitions and macros for PAR_DSPI */
+#define GPIO_PAR_DSPI_PCS0_MASK                (0x3F)
+#define GPIO_PAR_DSPI_PCS0_PCS0                (0x80)
+#define GPIO_PAR_DSPI_PCS0_U2RTS       (0x40)
+#define GPIO_PAR_DSPI_PCS0_GPIO                (0x00)
+#define GPIO_PAR_DSPI_SIN_MASK         (0xCF)
+#define GPIO_PAR_DSPI_SIN_SIN          (0x30)
+#define GPIO_PAR_DSPI_SIN_U2RXD                (0x20)
+#define GPIO_PAR_DSPI_SIN_GPIO         (0x00)
+#define GPIO_PAR_DSPI_SOUT_MASK                (0xF3)
+#define GPIO_PAR_DSPI_SOUT_SOUT                (0x0C)
+#define GPIO_PAR_DSPI_SOUT_U2TXD       (0x08)
+#define GPIO_PAR_DSPI_SOUT_GPIO                (0x00)
+#define GPIO_PAR_DSPI_SCK_MASK         (0xFC)
+#define GPIO_PAR_DSPI_SCK_SCK          (0x03)
+#define GPIO_PAR_DSPI_SCK_U2CTS                (0x02)
+#define GPIO_PAR_DSPI_SCK_GPIO         (0x00)
+
+/* Bit definitions and macros for PAR_TIMER */
+#define GPIO_PAR_TIMER_T3IN_MASK       (0x3F)
+#define GPIO_PAR_TIMER_T3IN_T3IN       (0xC0)
+#define GPIO_PAR_TIMER_T3IN_T3OUT      (0x80)
+#define GPIO_PAR_TIMER_T3IN_SSIMCLK    (0x40)
+#define GPIO_PAR_TIMER_T3IN_GPIO       (0x00)
+#define GPIO_PAR_TIMER_T2IN_MASK       (0xCF)
+#define GPIO_PAR_TIMER_T2IN_T2IN       (0x30)
+#define GPIO_PAR_TIMER_T2IN_T2OUT      (0x20)
+#define GPIO_PAR_TIMER_T2IN_DSPIPCS2   (0x10)
+#define GPIO_PAR_TIMER_T2IN_GPIO       (0x00)
+#define GPIO_PAR_TIMER_T1IN_MASK       (0xF3)
+#define GPIO_PAR_TIMER_T1IN_T1IN       (0x0C)
+#define GPIO_PAR_TIMER_T1IN_T1OUT      (0x08)
+#define GPIO_PAR_TIMER_T1IN_LCDCONTRAST        (0x04)
+#define GPIO_PAR_TIMER_T1IN_GPIO       (0x00)
+#define GPIO_PAR_TIMER_T0IN_MASK       (0xFC)
+#define GPIO_PAR_TIMER_T0IN_T0IN       (0x03)
+#define GPIO_PAR_TIMER_T0IN_T0OUT      (0x02)
+#define GPIO_PAR_TIMER_T0IN_LCDREV     (0x01)
+#define GPIO_PAR_TIMER_T0IN_GPIO       (0x00)
+
+/* Bit definitions and macros for GPIO_PAR_LCDCTL */
+#define GPIO_PAR_LCDCTL_ACDOE_MASK     (0xE7)
+#define GPIO_PAR_LCDCTL_ACDOE_ACDOE    (0x18)
+#define GPIO_PAR_LCDCTL_ACDOE_SPLSPR   (0x10)
+#define GPIO_PAR_LCDCTL_ACDOE_GPIO     (0x00)
+#define GPIO_PAR_LCDCTL_FLM_VSYNC      (0x04)
+#define GPIO_PAR_LCDCTL_LP_HSYNC       (0x02)
+#define GPIO_PAR_LCDCTL_LSCLK          (0x01)
+
+/* Bit definitions and macros for PAR_IRQ */
+#define GPIO_PAR_IRQ_IRQ4_MASK         (0xF3)
+#define GPIO_PAR_IRQ_IRQ4_SSIINPCLK    (0x0C)
+#define GPIO_PAR_IRQ_IRQ4_DMAREQ0      (0x08)
+#define GPIO_PAR_IRQ_IRQ4_GPIO         (0x00)
+#define GPIO_PAR_IRQ_IRQ1_MASK         (0xFC)
+#define GPIO_PAR_IRQ_IRQ1_PCIINT       (0x03)
+#define GPIO_PAR_IRQ_IRQ1_USBCLKIN     (0x02)
+#define GPIO_PAR_IRQ_IRQ1_SSICLKIN     (0x01)
+#define GPIO_PAR_IRQ_IRQ1_GPIO         (0x00)
+
+/* Bit definitions and macros for GPIO_PAR_LCDH */
+#define GPIO_PAR_LCDH_LD17_MASK                (0xFFFFF3FF)
+#define GPIO_PAR_LCDH_LD17_LD17                (0x00000C00)
+#define GPIO_PAR_LCDH_LD17_LD11                (0x00000800)
+#define GPIO_PAR_LCDH_LD17_GPIO                (0x00000000)
+
+#define GPIO_PAR_LCDH_LD16_MASK                (0xFFFFFCFF)
+#define GPIO_PAR_LCDH_LD16_LD16                (0x00000300)
+#define GPIO_PAR_LCDH_LD16_LD10                (0x00000200)
+#define GPIO_PAR_LCDH_LD16_GPIO                (0x00000000)
+
+#define GPIO_PAR_LCDH_LD15_MASK                (0xFFFFFF3F)
+#define GPIO_PAR_LCDH_LD15_LD15                (0x000000C0)
+#define GPIO_PAR_LCDH_LD15_LD9         (0x00000080)
+#define GPIO_PAR_LCDH_LD15_GPIO                (0x00000000)
+
+#define GPIO_PAR_LCDH_LD14_MASK                (0xFFFFFFCF)
+#define GPIO_PAR_LCDH_LD14_LD14                (0x00000030)
+#define GPIO_PAR_LCDH_LD14_LD8         (0x00000020)
+#define GPIO_PAR_LCDH_LD14_GPIO                (0x00000000)
+
+#define GPIO_PAR_LCDH_LD13_MASK                (0xFFFFFFF3)
+#define GPIO_PAR_LCDH_LD13_LD13                (0x0000000C)
+#define GPIO_PAR_LCDH_LD13_CANTX       (0x00000008)
+#define GPIO_PAR_LCDH_LD13_GPIO                (0x00000000)
+
+#define GPIO_PAR_LCDH_LD12_MASK                (0xFFFFFFFC)
+#define GPIO_PAR_LCDH_LD12_LD12                (0x00000003)
+#define GPIO_PAR_LCDH_LD12_CANRX       (0x00000002)
+#define GPIO_PAR_LCDH_LD12_GPIO                (0x00000000)
+
+/* Bit definitions and macros for GPIO_PAR_LCDL */
+#define GPIO_PAR_LCDL_LD11_MASK                (0x3FFFFFFF)
+#define GPIO_PAR_LCDL_LD11_LD11                (0xC0000000)
+#define GPIO_PAR_LCDL_LD11_LD7         (0x80000000)
+#define GPIO_PAR_LCDL_LD11_GPIO                (0x00000000)
+
+#define GPIO_PAR_LCDL_LD10_MASK                (0xCFFFFFFF)
+#define GPIO_PAR_LCDL_LD10_LD10                (0x30000000)
+#define GPIO_PAR_LCDL_LD10_LD6         (0x20000000)
+#define GPIO_PAR_LCDL_LD10_GPIO                (0x00000000)
+
+#define GPIO_PAR_LCDL_LD9_MASK         (0xF3FFFFFF)
+#define GPIO_PAR_LCDL_LD9_LD9          (0x0C000000)
+#define GPIO_PAR_LCDL_LD9_LD5          (0x08000000)
+#define GPIO_PAR_LCDL_LD9_GPIO         (0x00000000)
+
+#define GPIO_PAR_LCDL_LD8_MASK         (0xFCFFFFFF)
+#define GPIO_PAR_LCDL_LD8_LD8          (0x03000000)
+#define GPIO_PAR_LCDL_LD8_LD4          (0x02000000)
+#define GPIO_PAR_LCDL_LD8_GPIO         (0x00000000)
+
+#define GPIO_PAR_LCDL_LD7_MASK         (0xFF3FFFFF)
+#define GPIO_PAR_LCDL_LD7_LD7          (0x00C00000)
+#define GPIO_PAR_LCDL_LD7_PWM7         (0x00800000)
+#define GPIO_PAR_LCDL_LD7_GPIO         (0x00000000)
+
+#define GPIO_PAR_LCDL_LD6_MASK         (0xFFCFFFFF)
+#define GPIO_PAR_LCDL_LD6_LD6          (0x00300000)
+#define GPIO_PAR_LCDL_LD6_PWM5         (0x00200000)
+#define GPIO_PAR_LCDL_LD6_GPIO         (0x00000000)
+
+#define GPIO_PAR_LCDL_LD5_MASK         (0xFFF3FFFF)
+#define GPIO_PAR_LCDL_LD5_LD5          (0x000C0000)
+#define GPIO_PAR_LCDL_LD5_LD3          (0x00080000)
+#define GPIO_PAR_LCDL_LD5_GPIO         (0x00000000)
+
+#define GPIO_PAR_LCDL_LD4_MASK         (0xFFFCFFFF)
+#define GPIO_PAR_LCDL_LD4_LD4          (0x00030000)
+#define GPIO_PAR_LCDL_LD4_LD2          (0x00020000)
+#define GPIO_PAR_LCDL_LD4_GPIO         (0x00000000)
+
+#define GPIO_PAR_LCDL_LD3_MASK         (0xFFFF3FFF)
+#define GPIO_PAR_LCDL_LD3_LD3          (0x0000C000)
+#define GPIO_PAR_LCDL_LD3_LD1          (0x00008000)
+#define GPIO_PAR_LCDL_LD3_GPIO         (0x00000000)
+
+#define GPIO_PAR_LCDL_LD2_MASK         (0xFFFFCFFF)
+#define GPIO_PAR_LCDL_LD2_LD2          (0x00003000)
+#define GPIO_PAR_LCDL_LD2_LD0          (0x00002000)
+#define GPIO_PAR_LCDL_LD2_GPIO         (0x00000000)
+
+#define GPIO_PAR_LCDL_LD1_MASK         (0xFFFFF3FF)
+#define GPIO_PAR_LCDL_LD1_LD1          (0x00000C00)
+#define GPIO_PAR_LCDL_LD1_PWM3         (0x00000800)
+#define GPIO_PAR_LCDL_LD1_GPIO         (0x00000000)
+
+#define GPIO_PAR_LCDL_LD0_MASK         (0xFFFFFCFF)
+#define GPIO_PAR_LCDL_LD0_LD0          (0x00000300)
+#define GPIO_PAR_LCDL_LD0_PWM1         (0x00000200)
+#define GPIO_PAR_LCDL_LD0_GPIO         (0x00000000)
+
+/* Bit definitions and macros for MSCR_FB */
+#define GPIO_MSCR_FB_DUPPER_MASK       (0xCF)
+#define GPIO_MSCR_FB_DUPPER_25V_33V    (0x30)
+#define GPIO_MSCR_FB_DUPPER_FULL_18V   (0x20)
+#define GPIO_MSCR_FB_DUPPER_OD         (0x10)
+#define GPIO_MSCR_FB_DUPPER_HALF_18V   (0x00)
+
+#define GPIO_MSCR_FB_DLOWER_MASK       (0xF3)
+#define GPIO_MSCR_FB_DLOWER_25V_33V    (0x0C)
+#define GPIO_MSCR_FB_DLOWER_FULL_18V   (0x08)
+#define GPIO_MSCR_FB_DLOWER_OD         (0x04)
+#define GPIO_MSCR_FB_DLOWER_HALF_18V   (0x00)
+
+#define GPIO_MSCR_FB_ADDRCTL_MASK      (0xFC)
+#define GPIO_MSCR_FB_ADDRCTL_25V_33V   (0x03)
+#define GPIO_MSCR_FB_ADDRCTL_FULL_18V  (0x02)
+#define GPIO_MSCR_FB_ADDRCTL_OD                (0x01)
+#define GPIO_MSCR_FB_ADDRCTL_HALF_18V  (0x00)
+
+/* Bit definitions and macros for MSCR_SDRAM */
+#define GPIO_MSCR_SDRAM_SDCLKB_MASK    (0xCF)
+#define GPIO_MSCR_SDRAM_SDCLKB_25V_33V (0x30)
+#define GPIO_MSCR_SDRAM_SDCLKB_FULL_18V        (0x20)
+#define GPIO_MSCR_SDRAM_SDCLKB_OD      (0x10)
+#define GPIO_MSCR_SDRAM_SDCLKB_HALF_18V        (0x00)
+
+#define GPIO_MSCR_SDRAM_SDCLK_MASK     (0xF3)
+#define GPIO_MSCR_SDRAM_SDCLK_25V_33V  (0x0C)
+#define GPIO_MSCR_SDRAM_SDCLK_FULL_18V (0x08)
+#define GPIO_MSCR_SDRAM_SDCLK_OPD      (0x04)
+#define GPIO_MSCR_SDRAM_SDCLK_HALF_18V (0x00)
+
+#define GPIO_MSCR_SDRAM_SDCTL_MASK     (0xFC)
+#define GPIO_MSCR_SDRAM_SDCTL_25V_33V  (0x03)
+#define GPIO_MSCR_SDRAM_SDCTL_FULL_18V (0x02)
+#define GPIO_MSCR_SDRAM_SDCTL_OPD      (0x01)
+#define GPIO_MSCR_SDRAM_SDCTL_HALF_18V (0x00)
+
+/* Bit definitions and macros for Drive Strength Control */
+#define DSCR_LOAD_50PF (0x03)
+#define DSCR_LOAD_30PF (0x02)
+#define DSCR_LOAD_20PF (0x01)
+#define DSCR_LOAD_10PF (0x00)
+
+/*********************************************************************
+* SDRAM Controller (SDRAMC)
+*********************************************************************/
+
+/* Bit definitions and macros for SDMR */
+#define SDRAMC_SDMR_DDR2_AD(x)         (((x)&0x00003FFF))      /* Address for DDR2 */
+#define SDRAMC_SDMR_CMD                        (0x00010000)    /* Command */
+#define SDRAMC_SDMR_AD(x)              (((x)&0x00000FFF)<<18)  /* Address */
+#define SDRAMC_SDMR_BK(x)              (((x)&0x00000003)<<30)  /* Bank Address */
+#define SDRAMC_SDMR_BK_LMR             (0x00000000)
+#define SDRAMC_SDMR_BK_LEMR            (0x40000000)
+
+/* Bit definitions and macros for SDCR */
+#define SDRAMC_SDCR_DPD                        (0x00000001)    /* Deep Power-Down Mode */
+#define SDRAMC_SDCR_IPALL              (0x00000002)    /* Initiate Precharge All */
+#define SDRAMC_SDCR_IREF               (0x00000004)    /* Initiate Refresh */
+#define SDRAMC_SDCR_DQS_OE(x)          (((x)&0x00000003)<<10)  /* DQS Output Enable */
+#define SDRAMC_SDCR_MEM_PS             (0x00002000)    /* Data Port Size */
+#define SDRAMC_SDCR_REF_CNT(x)         (((x)&0x0000003F)<<16)  /* Periodic Refresh Counter */
+#define SDRAMC_SDCR_OE_RULE            (0x00400000)    /* Drive Rule Selection */
+#define SDRAMC_SDCR_ADDR_MUX(x)                (((x)&0x00000003)<<24)  /* Internal Address Mux Select */
+#define SDRAMC_SDCR_DDR2_MODE          (0x08000000)    /* DDR2 Mode Select */
+#define SDRAMC_SDCR_REF_EN             (0x10000000)    /* Refresh Enable */
+#define SDRAMC_SDCR_DDR_MODE           (0x20000000)    /* DDR Mode Select */
+#define SDRAMC_SDCR_CKE                        (0x40000000)    /* Clock Enable */
+#define SDRAMC_SDCR_MODE_EN            (0x80000000)    /* SDRAM Mode Register Programming Enable */
+#define SDRAMC_SDCR_DQS_OE_BOTH                (0x00000C000)
+
+/* Bit definitions and macros for SDCFG1 */
+#define SDRAMC_SDCFG1_WT_LAT(x)                (((x)&0x00000007)<<4)   /* Write Latency */
+#define SDRAMC_SDCFG1_REF2ACT(x)       (((x)&0x0000000F)<<8)   /* Refresh to active delay */
+#define SDRAMC_SDCFG1_PRE2ACT(x)       (((x)&0x00000007)<<12)  /* Precharge to active delay */
+#define SDRAMC_SDCFG1_ACT2RW(x)                (((x)&0x00000007)<<16)  /* Active to read/write delay */
+#define SDRAMC_SDCFG1_RD_LAT(x)                (((x)&0x0000000F)<<20)  /* Read CAS Latency */
+#define SDRAMC_SDCFG1_SWT2RWP(x)       (((x)&0x00000007)<<24)  /* Single write to read/write/precharge delay */
+#define SDRAMC_SDCFG1_SRD2RWP(x)       (((x)&0x0000000F)<<28)  /* Single read to read/write/precharge delay */
+
+/* Bit definitions and macros for SDCFG2 */
+#define SDRAMC_SDCFG2_BL(x)            (((x)&0x0000000F)<<16)  /* Burst Length */
+#define SDRAMC_SDCFG2_BRD2W(x)         (((x)&0x0000000F)<<20)  /* Burst read to write delay */
+#define SDRAMC_SDCFG2_BWT2RWP(x)       (((x)&0x0000000F)<<24)  /* Burst write to read/write/precharge delay */
+#define SDRAMC_SDCFG2_BRD2RP(x)                (((x)&0x0000000F)<<28)  /* Burst read to read/precharge delay */
+
+/* Bit definitions and macros for SDCS group */
+#define SDRAMC_SDCS_CSSZ(x)            (((x)&0x0000001F))      /* Chip-Select Size */
+#define SDRAMC_SDCS_CSBA(x)            (((x)&0x00000FFF)<<20)  /* Chip-Select Base Address */
+#define SDRAMC_SDCS_BA(x)              ((x)&0xFFF00000)
+#define SDRAMC_SDCS_CSSZ_DISABLE       (0x00000000)
+#define SDRAMC_SDCS_CSSZ_1MBYTE                (0x00000013)
+#define SDRAMC_SDCS_CSSZ_2MBYTE                (0x00000014)
+#define SDRAMC_SDCS_CSSZ_4MBYTE                (0x00000015)
+#define SDRAMC_SDCS_CSSZ_8MBYTE                (0x00000016)
+#define SDRAMC_SDCS_CSSZ_16MBYTE       (0x00000017)
+#define SDRAMC_SDCS_CSSZ_32MBYTE       (0x00000018)
+#define SDRAMC_SDCS_CSSZ_64MBYTE       (0x00000019)
+#define SDRAMC_SDCS_CSSZ_128MBYTE      (0x0000001A)
+#define SDRAMC_SDCS_CSSZ_256MBYTE      (0x0000001B)
+#define SDRAMC_SDCS_CSSZ_512MBYTE      (0x0000001C)
+#define SDRAMC_SDCS_CSSZ_1GBYTE                (0x0000001D)
+#define SDRAMC_SDCS_CSSZ_2GBYTE                (0x0000001E)
+#define SDRAMC_SDCS_CSSZ_4GBYTE                (0x0000001F)
+
+/*********************************************************************
+* Phase Locked Loop (PLL)
+*********************************************************************/
+
+/* Bit definitions and macros for PCR */
+#define PLL_PCR_OUTDIV1(x)             (((x)&0x0000000F))      /* Output divider for CPU clock frequency */
+#define PLL_PCR_OUTDIV2(x)             (((x)&0x0000000F)<<4)   /* Output divider for bus/flexbus clock frequency */
+#define PLL_PCR_OUTDIV3(x)             (((x)&0x0000000F)<<8)   /* Output divider for SDRAM clock frequency */
+#define PLL_PCR_OUTDIV5(x)             (((x)&0x0000000F)<<16)  /* Output divider for USB clock frequency */
+#define PLL_PCR_PFDR(x)                        (((x)&0x000000FF)<<24)  /* Feedback divider for VCO frequency */
+#define PLL_PCR_PFDR_MASK              (0x000F0000)
+#define PLL_PCR_OUTDIV5_MASK           (0x000F0000)
+#define PLL_PCR_OUTDIV3_MASK           (0x00000F00)
+#define PLL_PCR_OUTDIV2_MASK           (0x000000F0)
+#define PLL_PCR_OUTDIV1_MASK           (0x0000000F)
+
+/* Bit definitions and macros for PSR */
+#define PLL_PSR_LOCKS                  (0x00000001)    /* PLL lost lock - sticky */
+#define PLL_PSR_LOCK                   (0x00000002)    /* PLL lock status */
+#define PLL_PSR_LOLIRQ                 (0x00000004)    /* PLL loss-of-lock interrupt enable */
+#define PLL_PSR_LOLRE                  (0x00000008)    /* PLL loss-of-lock reset enable */
+
+/********************************************************************/
+
+#endif                         /* __MCF5227X__ */
index 3f056511cb60dcf76f4d3c02b59f7f6b7b0c1ca1..c1669dcb10bbbc9b1c73438e67cb07dbc5c174e1 100644 (file)
 #define GPIO_PCLRR_LCDCTLL7            (0x80)
 
 /* Bit definitions and macros for GPIO_PAR_FEC */
+#ifdef CONFIG_M5329
 #define GPIO_PAR_FEC_MII(x)            (((x)&0x03)<<0)
 #define GPIO_PAR_FEC_7W(x)             (((x)&0x03)<<2)
 #define GPIO_PAR_FEC_7W_GPIO           (0x00)
 #define GPIO_PAR_FEC_MII_GPIO          (0x00)
 #define GPIO_PAR_FEC_MII_UART          (0x01)
 #define GPIO_PAR_FEC_MII_FEC           (0x03)
+#else
+#define GPIO_PAR_FEC_7W_FEC            (0x08)
+#define GPIO_PAR_FEC_MII_FEC           (0x02)
+#endif
 
 /* Bit definitions and macros for GPIO_PAR_PWM */
 #define GPIO_PAR_PWM1(x)               (((x)&0x03)<<0)
 /* Bit definitions and macros for GPIO_DSCR_IRQ */
 #define GPIO_DSCR_IRQ_DSE(x)           ((x)&0x03)
 
-/* not done yet */
-/*********************************************************************
-* LCD Controller (LCDC)
-*********************************************************************/
-/* Bit definitions and macros for LCDC_LSSAR */
-#define LCDC_LSSAR_SSA(x)              (((x)&0x3FFFFFFF)<<2)
-
-/* Bit definitions and macros for LCDC_LSR */
-#define LCDC_LSR_YMAX(x)               (((x)&0x000003FF)<<0)
-#define LCDC_LSR_XMAX(x)               (((x)&0x0000003F)<<20)
-
-/* Bit definitions and macros for LCDC_LVPWR */
-#define LCDC_LVPWR_VPW(x)              (((x)&0x000003FF)<<0)
-
-/* Bit definitions and macros for LCDC_LCPR */
-#define LCDC_LCPR_CYP(x)               (((x)&0x000003FF)<<0)
-#define LCDC_LCPR_CXP(x)               (((x)&0x000003FF)<<16)
-#define LCDC_LCPR_OP                   (0x10000000)
-#define LCDC_LCPR_CC(x)                        (((x)&0x00000003)<<30)
-#define LCDC_LCPR_CC_TRANSPARENT       (0x00000000)
-#define LCDC_LCPR_CC_OR                        (0x40000000)
-#define LCDC_LCPR_CC_XOR               (0x80000000)
-#define LCDC_LCPR_CC_AND               (0xC0000000)
-#define LCDC_LCPR_OP_ON                        (0x10000000)
-#define LCDC_LCPR_OP_OFF               (0x00000000)
-
-/* Bit definitions and macros for LCDC_LCWHBR */
-#define LCDC_LCWHBR_BD(x)              (((x)&0x000000FF)<<0)
-#define LCDC_LCWHBR_CH(x)              (((x)&0x0000001F)<<16)
-#define LCDC_LCWHBR_CW(x)              (((x)&0x0000001F)<<24)
-#define LCDC_LCWHBR_BK_EN              (0x80000000)
-#define LCDC_LCWHBR_BK_EN_ON           (0x80000000)
-#define LCDC_LCWHBR_BK_EN_OFF          (0x00000000)
-
-/* Bit definitions and macros for LCDC_LCCMR */
-#define LCDC_LCCMR_CUR_COL_B(x)                (((x)&0x0000003F)<<0)
-#define LCDC_LCCMR_CUR_COL_G(x)                (((x)&0x0000003F)<<6)
-#define LCDC_LCCMR_CUR_COL_R(x)                (((x)&0x0000003F)<<12)
-
-/* Bit definitions and macros for LCDC_LPCR */
-#define LCDC_LPCR_PCD(x)               (((x)&0x0000003F)<<0)
-#define LCDC_LPCR_SHARP                        (0x00000040)
-#define LCDC_LPCR_SCLKSEL              (0x00000080)
-#define LCDC_LPCR_ACD(x)               (((x)&0x0000007F)<<8)
-#define LCDC_LPCR_ACDSEL               (0x00008000)
-#define LCDC_LPCR_REV_VS               (0x00010000)
-#define LCDC_LPCR_SWAP_SEL             (0x00020000)
-#define LCDC_LPCR_ENDSEL               (0x00040000)
-#define LCDC_LPCR_SCLKIDLE             (0x00080000)
-#define LCDC_LPCR_OEPOL                        (0x00100000)
-#define LCDC_LPCR_CLKPOL               (0x00200000)
-#define LCDC_LPCR_LPPOL                        (0x00400000)
-#define LCDC_LPCR_FLM                  (0x00800000)
-#define LCDC_LPCR_PIXPOL               (0x01000000)
-#define LCDC_LPCR_BPIX(x)              (((x)&0x00000007)<<25)
-#define LCDC_LPCR_PBSIZ(x)             (((x)&0x00000003)<<28)
-#define LCDC_LPCR_COLOR                        (0x40000000)
-#define LCDC_LPCR_TFT                  (0x80000000)
-#define LCDC_LPCR_MODE_MONOCHROME      (0x00000000)
-#define LCDC_LPCR_MODE_CSTN            (0x40000000)
-#define LCDC_LPCR_MODE_TFT             (0xC0000000)
-#define LCDC_LPCR_PBSIZ_1              (0x00000000)
-#define LCDC_LPCR_PBSIZ_2              (0x10000000)
-#define LCDC_LPCR_PBSIZ_4              (0x20000000)
-#define LCDC_LPCR_PBSIZ_8              (0x30000000)
-#define LCDC_LPCR_BPIX_1bpp            (0x00000000)
-#define LCDC_LPCR_BPIX_2bpp            (0x02000000)
-#define LCDC_LPCR_BPIX_4bpp            (0x04000000)
-#define LCDC_LPCR_BPIX_8bpp            (0x06000000)
-#define LCDC_LPCR_BPIX_12bpp           (0x08000000)
-#define LCDC_LPCR_BPIX_16bpp           (0x0A000000)
-#define LCDC_LPCR_BPIX_18bpp           (0x0C000000)
-
-#define LCDC_LPCR_PANEL_TYPE(x)                (((x)&0x00000003)<<30)
-
-/* Bit definitions and macros for LCDC_LHCR */
-#define LCDC_LHCR_H_WAIT_2(x)          (((x)&0x000000FF)<<0)
-#define LCDC_LHCR_H_WAIT_1(x)          (((x)&0x000000FF)<<8)
-#define LCDC_LHCR_H_WIDTH(x)           (((x)&0x0000003F)<<26)
-
-/* Bit definitions and macros for LCDC_LVCR */
-#define LCDC_LVCR_V_WAIT_2(x)          (((x)&0x000000FF)<<0)
-#define LCDC_LVCR_V_WAIT_1(x)          (((x)&0x000000FF)<<8)
-#define LCDC_LVCR_V_WIDTH(x)           (((x)&0x0000003F)<<26)
-
-/* Bit definitions and macros for LCDC_LPOR */
-#define LCDC_LPOR_POS(x)               (((x)&0x0000001F)<<0)
-
-/* Bit definitions and macros for LCDC_LPCCR */
-#define LCDC_LPCCR_PW(x)               (((x)&0x000000FF)<<0)
-#define LCDC_LPCCR_CC_EN               (0x00000100)
-#define LCDC_LPCCR_SCR(x)              (((x)&0x00000003)<<9)
-#define LCDC_LPCCR_LDMSK               (0x00008000)
-#define LCDC_LPCCR_CLS_HI_WIDTH(x)     (((x)&0x000001FF)<<16)
-#define LCDC_LPCCR_SCR_LINEPULSE       (0x00000000)
-#define LCDC_LPCCR_SCR_PIXELCLK                (0x00002000)
-#define LCDC_LPCCR_SCR_LCDCLOCK                (0x00004000)
-
-/* Bit definitions and macros for LCDC_LDCR */
-#define LCDC_LDCR_TM(x)                        (((x)&0x0000001F)<<0)
-#define LCDC_LDCR_HM(x)                        (((x)&0x0000001F)<<16)
-#define LCDC_LDCR_BURST                        (0x80000000)
-
-/* Bit definitions and macros for LCDC_LRMCR */
-#define LCDC_LRMCR_SEL_REF             (0x00000001)
-
-/* Bit definitions and macros for LCDC_LICR */
-#define LCDC_LICR_INTCON               (0x00000001)
-#define LCDC_LICR_INTSYN               (0x00000004)
-#define LCDC_LICR_GW_INT_CON           (0x00000010)
-
-/* Bit definitions and macros for LCDC_LIER */
-#define LCDC_LIER_BOF_EN               (0x00000001)
-#define LCDC_LIER_EOF_EN               (0x00000002)
-#define LCDC_LIER_ERR_RES_EN           (0x00000004)
-#define LCDC_LIER_UDR_ERR_EN           (0x00000008)
-#define LCDC_LIER_GW_BOF_EN            (0x00000010)
-#define LCDC_LIER_GW_EOF_EN            (0x00000020)
-#define LCDC_LIER_GW_ERR_RES_EN                (0x00000040)
-#define LCDC_LIER_GW_UDR_ERR_EN                (0x00000080)
-
-/* Bit definitions and macros for LCDC_LISR */
-#define LCDC_LISR_BOF                  (0x00000001)
-#define LCDC_LISR_EOF                  (0x00000002)
-#define LCDC_LISR_ERR_RES              (0x00000004)
-#define LCDC_LISR_UDR_ERR              (0x00000008)
-#define LCDC_LISR_GW_BOF               (0x00000010)
-#define LCDC_LISR_GW_EOF               (0x00000020)
-#define LCDC_LISR_GW_ERR_RES           (0x00000040)
-#define LCDC_LISR_GW_UDR_ERR           (0x00000080)
-
-/* Bit definitions and macros for LCDC_LGWSAR */
-#define LCDC_LGWSAR_GWSA(x)            (((x)&0x3FFFFFFF)<<2)
-
-/* Bit definitions and macros for LCDC_LGWSR */
-#define LCDC_LGWSR_GWH(x)              (((x)&0x000003FF)<<0)
-#define LCDC_LGWSR_GWW(x)              (((x)&0x0000003F)<<20)
-
-/* Bit definitions and macros for LCDC_LGWVPWR */
-#define LCDC_LGWVPWR_GWVPW(x)          (((x)&0x000003FF)<<0)
-
-/* Bit definitions and macros for LCDC_LGWPOR */
-#define LCDC_LGWPOR_GWPO(x)            (((x)&0x0000001F)<<0)
-
-/* Bit definitions and macros for LCDC_LGWPR */
-#define LCDC_LGWPR_GWYP(x)             (((x)&0x000003FF)<<0)
-#define LCDC_LGWPR_GWXP(x)             (((x)&0x000003FF)<<16)
-
-/* Bit definitions and macros for LCDC_LGWCR */
-#define LCDC_LGWCR_GWCKB(x)            (((x)&0x0000003F)<<0)
-#define LCDC_LGWCR_GWCKG(x)            (((x)&0x0000003F)<<6)
-#define LCDC_LGWCR_GWCKR(x)            (((x)&0x0000003F)<<12)
-#define LCDC_LGWCR_GW_RVS              (0x00200000)
-#define LCDC_LGWCR_GWE                 (0x00400000)
-#define LCDC_LGWCR_GWCKE               (0x00800000)
-#define LCDC_LGWCR_GWAV(x)             (((x)&0x000000FF)<<24)
-
-/* Bit definitions and macros for LCDC_LGWDCR */
-#define LCDC_LGWDCR_GWTM(x)            (((x)&0x0000001F)<<0)
-#define LCDC_LGWDCR_GWHM(x)            (((x)&0x0000001F)<<16)
-#define LCDC_LGWDCR_GWBT               (0x80000000)
-
 /*********************************************************************
 * SDRAM Controller (SDRAMC)
 *********************************************************************/
 #define SDRAMC_SDCS_CSSZ_1MBYTE                (0x00000013)
 #define SDRAMC_SDCS_CSSZ_DIABLE                (0x00000000)
 
-/*********************************************************************
-* Synchronous Serial Interface (SSI)
-*********************************************************************/
-/* Bit definitions and macros for SSI_CR */
-#define SSI_CR_CIS                     (0x00000200)
-#define SSI_CR_TCH                     (0x00000100)
-#define SSI_CR_MCE                     (0x00000080)
-#define SSI_CR_I2S_SLAVE               (0x00000040)
-#define SSI_CR_I2S_MASTER              (0x00000020)
-#define SSI_CR_I2S_NORMAL              (0x00000000)
-#define SSI_CR_SYN                     (0x00000010)
-#define SSI_CR_NET                     (0x00000008)
-#define SSI_CR_RE                      (0x00000004)
-#define SSI_CR_TE                      (0x00000002)
-#define SSI_CR_SSI_EN                  (0x00000001)
-
-/* Bit definitions and macros for SSI_ISR */
-#define SSI_ISR_CMDAU                  (0x00040000)
-#define SSI_ISR_CMDDU                  (0x00020000)
-#define SSI_ISR_RXT                    (0x00010000)
-#define SSI_ISR_RDR1                   (0x00008000)
-#define SSI_ISR_RDR0                   (0x00004000)
-#define SSI_ISR_TDE1                   (0x00002000)
-#define SSI_ISR_TDE0                   (0x00001000)
-#define SSI_ISR_ROE1                   (0x00000800)
-#define SSI_ISR_ROE0                   (0x00000400)
-#define SSI_ISR_TUE1                   (0x00000200)
-#define SSI_ISR_TUE0                   (0x00000100)
-#define SSI_ISR_TFS                    (0x00000080)
-#define SSI_ISR_RFS                    (0x00000040)
-#define SSI_ISR_TLS                    (0x00000020)
-#define SSI_ISR_RLS                    (0x00000010)
-#define SSI_ISR_RFF1                   (0x00000008)
-#define SSI_ISR_RFF0                   (0x00000004)
-#define SSI_ISR_TFE1                   (0x00000002)
-#define SSI_ISR_TFE0                   (0x00000001)
-
-/* Bit definitions and macros for SSI_IER */
-#define SSI_IER_RDMAE                  (0x00400000)
-#define SSI_IER_RIE                    (0x00200000)
-#define SSI_IER_TDMAE                  (0x00100000)
-#define SSI_IER_TIE                    (0x00080000)
-#define SSI_IER_CMDAU                  (0x00040000)
-#define SSI_IER_CMDU                   (0x00020000)
-#define SSI_IER_RXT                    (0x00010000)
-#define SSI_IER_RDR1                   (0x00008000)
-#define SSI_IER_RDR0                   (0x00004000)
-#define SSI_IER_TDE1                   (0x00002000)
-#define SSI_IER_TDE0                   (0x00001000)
-#define SSI_IER_ROE1                   (0x00000800)
-#define SSI_IER_ROE0                   (0x00000400)
-#define SSI_IER_TUE1                   (0x00000200)
-#define SSI_IER_TUE0                   (0x00000100)
-#define SSI_IER_TFS                    (0x00000080)
-#define SSI_IER_RFS                    (0x00000040)
-#define SSI_IER_TLS                    (0x00000020)
-#define SSI_IER_RLS                    (0x00000010)
-#define SSI_IER_RFF1                   (0x00000008)
-#define SSI_IER_RFF0                   (0x00000004)
-#define SSI_IER_TFE1                   (0x00000002)
-#define SSI_IER_TFE0                   (0x00000001)
-
-/* Bit definitions and macros for SSI_TCR */
-#define SSI_TCR_TXBIT0                 (0x00000200)
-#define SSI_TCR_TFEN1                  (0x00000100)
-#define SSI_TCR_TFEN0                  (0x00000080)
-#define SSI_TCR_TFDIR                  (0x00000040)
-#define SSI_TCR_TXDIR                  (0x00000020)
-#define SSI_TCR_TSHFD                  (0x00000010)
-#define SSI_TCR_TSCKP                  (0x00000008)
-#define SSI_TCR_TFSI                   (0x00000004)
-#define SSI_TCR_TFSL                   (0x00000002)
-#define SSI_TCR_TEFS                   (0x00000001)
-
-/* Bit definitions and macros for SSI_RCR */
-#define SSI_RCR_RXEXT                  (0x00000400)
-#define SSI_RCR_RXBIT0                 (0x00000200)
-#define SSI_RCR_RFEN1                  (0x00000100)
-#define SSI_RCR_RFEN0                  (0x00000080)
-#define SSI_RCR_RSHFD                  (0x00000010)
-#define SSI_RCR_RSCKP                  (0x00000008)
-#define SSI_RCR_RFSI                   (0x00000004)
-#define SSI_RCR_RFSL                   (0x00000002)
-#define SSI_RCR_REFS                   (0x00000001)
-
-/* Bit definitions and macros for SSI_CCR */
-#define SSI_CCR_DIV2                   (0x00040000)
-#define SSI_CCR_PSR                    (0x00020000)
-#define SSI_CCR_WL(x)                  (((x)&0x0000000F)<<13)
-#define SSI_CCR_DC(x)                  (((x)&0x0000001F)<<8)
-#define SSI_CCR_PM(x)                  ((x)&0x000000FF)
-
-/* Bit definitions and macros for SSI_FCSR */
-#define SSI_FCSR_RFCNT1(x)             (((x)&0x0000000F)<<28)
-#define SSI_FCSR_TFCNT1(x)             (((x)&0x0000000F)<<24)
-#define SSI_FCSR_RFWM1(x)              (((x)&0x0000000F)<<20)
-#define SSI_FCSR_TFWM1(x)              (((x)&0x0000000F)<<16)
-#define SSI_FCSR_RFCNT0(x)             (((x)&0x0000000F)<<12)
-#define SSI_FCSR_TFCNT0(x)             (((x)&0x0000000F)<<8)
-#define SSI_FCSR_RFWM0(x)              (((x)&0x0000000F)<<4)
-#define SSI_FCSR_TFWM0(x)              ((x)&0x0000000F)
-
-/* Bit definitions and macros for SSI_ACR */
-#define SSI_ACR_FRDIV(x)               (((x)&0x0000003F)<<5)
-#define SSI_ACR_WR                     (0x00000010)
-#define SSI_ACR_RD                     (0x00000008)
-#define SSI_ACR_TIF                    (0x00000004)
-#define SSI_ACR_FV                     (0x00000002)
-#define SSI_ACR_AC97EN                 (0x00000001)
-
-/* Bit definitions and macros for SSI_ACADD */
-#define SSI_ACADD_SSI_ACADD(x)         ((x)&0x0007FFFF)
-
-/* Bit definitions and macros for SSI_ACDAT */
-#define SSI_ACDAT_SSI_ACDAT(x)         ((x)&0x0007FFFF)
-
-/* Bit definitions and macros for SSI_ATAG */
-#define SSI_ATAG_DDI_ATAG(x)           ((x)&0x0000FFFF)
-
 /*********************************************************************
 * Phase Locked Loop (PLL)
 *********************************************************************/
index b2bfb69264cc4819fe62e66090d85c82dcb7d7a6..7fcf4ef7d4992c13fd7f0bbb85d818731bc77658 100644 (file)
 #ifndef __MCF5445X__
 #define __MCF5445X__
 
-/*********************************************************************
-* Cross-bar switch (XBS)
-*********************************************************************/
-
-/* Bit definitions and macros for PRS group */
-#define XBS_PRS_M0(x)                  (((x)&0x00000007))      /* Core */
-#define XBS_PRS_M1(x)                  (((x)&0x00000007)<<4)   /* eDMA */
-#define XBS_PRS_M2(x)                  (((x)&0x00000007)<<8)   /* FEC0 */
-#define XBS_PRS_M3(x)                  (((x)&0x00000007)<<12)  /* FEC1 */
-#define XBS_PRS_M5(x)                  (((x)&0x00000007)<<20)  /* PCI controller */
-#define XBS_PRS_M6(x)                  (((x)&0x00000007)<<24)  /* USB OTG */
-#define XBS_PRS_M7(x)                  (((x)&0x00000007)<<28)  /* Serial Boot */
-
-/* Bit definitions and macros for CRS group */
-#define XBS_CRS_PARK(x)                        (((x)&0x00000007))      /* Master parking ctrl */
-#define XBS_CRS_PCTL(x)                        (((x)&0x00000003)<<4)   /* Parking mode ctrl */
-#define XBS_CRS_ARB                    (0x00000100)    /* Arbitration Mode */
-#define XBS_CRS_RO                     (0x80000000)    /* Read Only */
-
-#define XBS_CRS_PCTL_PARK_FIELD                (0)
-#define XBS_CRS_PCTL_PARK_ON_LAST      (1)
-#define XBS_CRS_PCTL_PARK_NONE         (2)
-#define XBS_CRS_PCTL_PARK_CORE         (0)
-#define XBS_CRS_PCTL_PARK_EDMA         (1)
-#define XBS_CRS_PCTL_PARK_FEC0         (2)
-#define XBS_CRS_PCTL_PARK_FEC1         (3)
-#define XBS_CRS_PCTL_PARK_PCI          (5)
-#define XBS_CRS_PCTL_PARK_USB          (6)
-#define XBS_CRS_PCTL_PARK_SBF          (7)
-
-/*********************************************************************
-* FlexBus Chip Selects (FBCS)
-*********************************************************************/
-
-/* Bit definitions and macros for CSAR group */
-#define FBCS_CSAR_BA(x)                        ((x)&0xFFFF0000)
-
-/* Bit definitions and macros for CSMR group */
-#define FBCS_CSMR_V                    (0x00000001)    /* Valid bit */
-#define FBCS_CSMR_WP                   (0x00000100)    /* Write protect */
-#define FBCS_CSMR_BAM(x)               (((x)&0x0000FFFF)<<16)  /* Base address mask */
-#define FBCS_CSMR_BAM_4G               (0xFFFF0000)
-#define FBCS_CSMR_BAM_2G               (0x7FFF0000)
-#define FBCS_CSMR_BAM_1G               (0x3FFF0000)
-#define FBCS_CSMR_BAM_1024M            (0x3FFF0000)
-#define FBCS_CSMR_BAM_512M             (0x1FFF0000)
-#define FBCS_CSMR_BAM_256M             (0x0FFF0000)
-#define FBCS_CSMR_BAM_128M             (0x07FF0000)
-#define FBCS_CSMR_BAM_64M              (0x03FF0000)
-#define FBCS_CSMR_BAM_32M              (0x01FF0000)
-#define FBCS_CSMR_BAM_16M              (0x00FF0000)
-#define FBCS_CSMR_BAM_8M               (0x007F0000)
-#define FBCS_CSMR_BAM_4M               (0x003F0000)
-#define FBCS_CSMR_BAM_2M               (0x001F0000)
-#define FBCS_CSMR_BAM_1M               (0x000F0000)
-#define FBCS_CSMR_BAM_1024K            (0x000F0000)
-#define FBCS_CSMR_BAM_512K             (0x00070000)
-#define FBCS_CSMR_BAM_256K             (0x00030000)
-#define FBCS_CSMR_BAM_128K             (0x00010000)
-#define FBCS_CSMR_BAM_64K              (0x00000000)
-
-/* Bit definitions and macros for CSCR group */
-#define FBCS_CSCR_BSTW                 (0x00000008)    /* Burst-write enable */
-#define FBCS_CSCR_BSTR                 (0x00000010)    /* Burst-read enable */
-#define FBCS_CSCR_BEM                  (0x00000020)    /* Byte-enable mode */
-#define FBCS_CSCR_PS(x)                        (((x)&0x00000003)<<6)   /* Port size */
-#define FBCS_CSCR_AA                   (0x00000100)    /* Auto-acknowledge */
-#define FBCS_CSCR_WS(x)                        (((x)&0x0000003F)<<10)  /* Wait states */
-#define FBCS_CSCR_WRAH(x)              (((x)&0x00000003)<<16)  /* Write address hold or deselect */
-#define FBCS_CSCR_RDAH(x)              (((x)&0x00000003)<<18)  /* Read address hold or deselect */
-#define FBCS_CSCR_ASET(x)              (((x)&0x00000003)<<20)  /* Address setup */
-#define FBCS_CSCR_SWSEN                        (0x00800000)    /* Secondary wait state enable */
-#define FBCS_CSCR_SWS(x)               (((x)&0x0000003F)<<26)  /* Secondary wait states */
-
-#define FBCS_CSCR_PS_8                 (0x00000040)
-#define FBCS_CSCR_PS_16                        (0x00000080)
-#define FBCS_CSCR_PS_32                        (0x00000000)
-
 /*********************************************************************
 * Interrupt Controller (INTC)
 *********************************************************************/
 /* Bit definitions and macros for ICR group */
 #define INTC_ICR_IL(x)                 (((x)&0x07))
 
-/*********************************************************************
-* DMA Serial Peripheral Interface (DSPI)
-*********************************************************************/
-
-/* Bit definitions and macros for DMCR */
-#define DSPI_DMCR_HALT                 (0x00000001)
-#define DSPI_DMCR_SMPL_PT(x)           (((x)&0x00000003)<<8)
-#define DSPI_DMCR_CRXF                 (0x00000400)
-#define DSPI_DMCR_CTXF                 (0x00000800)
-#define DSPI_DMCR_DRXF                 (0x00001000)
-#define DSPI_DMCR_DTXF                 (0x00002000)
-#define DSPI_DMCR_CSIS0                        (0x00010000)
-#define DSPI_DMCR_CSIS2                        (0x00040000)
-#define DSPI_DMCR_CSIS3                        (0x00080000)
-#define DSPI_DMCR_CSIS5                        (0x00200000)
-#define DSPI_DMCR_ROOE                 (0x01000000)
-#define DSPI_DMCR_PCSSE                        (0x02000000)
-#define DSPI_DMCR_MTFE                 (0x04000000)
-#define DSPI_DMCR_FRZ                  (0x08000000)
-#define DSPI_DMCR_DCONF(x)             (((x)&0x00000003)<<28)
-#define DSPI_DMCR_CSCK                 (0x40000000)
-#define DSPI_DMCR_MSTR                 (0x80000000)
-
-/* Bit definitions and macros for DTCR */
-#define DSPI_DTCR_SPI_TCNT(x)          (((x)&0x0000FFFF)<<16)
-
-/* Bit definitions and macros for DCTAR group */
-#define DSPI_DCTAR_BR(x)               (((x)&0x0000000F))
-#define DSPI_DCTAR_DT(x)               (((x)&0x0000000F)<<4)
-#define DSPI_DCTAR_ASC(x)              (((x)&0x0000000F)<<8)
-#define DSPI_DCTAR_CSSCK(x)            (((x)&0x0000000F)<<12)
-#define DSPI_DCTAR_PBR(x)              (((x)&0x00000003)<<16)
-#define DSPI_DCTAR_PDT(x)              (((x)&0x00000003)<<18)
-#define DSPI_DCTAR_PASC(x)             (((x)&0x00000003)<<20)
-#define DSPI_DCTAR_PCSSCK(x)           (((x)&0x00000003)<<22)
-#define DSPI_DCTAR_LSBFE               (0x01000000)
-#define DSPI_DCTAR_CPHA                        (0x02000000)
-#define DSPI_DCTAR_CPOL                        (0x04000000)
-#define DSPI_DCTAR_TRSZ(x)             (((x)&0x0000000F)<<27)
-#define DSPI_DCTAR_PCSSCK_1CLK         (0x00000000)
-#define DSPI_DCTAR_PCSSCK_3CLK         (0x00400000)
-#define DSPI_DCTAR_PCSSCK_5CLK         (0x00800000)
-#define DSPI_DCTAR_PCSSCK_7CLK         (0x00A00000)
-#define DSPI_DCTAR_PASC_1CLK           (0x00000000)
-#define DSPI_DCTAR_PASC_3CLK           (0x00100000)
-#define DSPI_DCTAR_PASC_5CLK           (0x00200000)
-#define DSPI_DCTAR_PASC_7CLK           (0x00300000)
-#define DSPI_DCTAR_PDT_1CLK            (0x00000000)
-#define DSPI_DCTAR_PDT_3CLK            (0x00040000)
-#define DSPI_DCTAR_PDT_5CLK            (0x00080000)
-#define DSPI_DCTAR_PDT_7CLK            (0x000A0000)
-#define DSPI_DCTAR_PBR_1CLK            (0x00000000)
-#define DSPI_DCTAR_PBR_3CLK            (0x00010000)
-#define DSPI_DCTAR_PBR_5CLK            (0x00020000)
-#define DSPI_DCTAR_PBR_7CLK            (0x00030000)
-
-/* Bit definitions and macros for DSR */
-#define DSPI_DSR_RXPTR(x)              (((x)&0x0000000F))
-#define DSPI_DSR_RXCTR(x)              (((x)&0x0000000F)<<4)
-#define DSPI_DSR_TXPTR(x)              (((x)&0x0000000F)<<8)
-#define DSPI_DSR_TXCTR(x)              (((x)&0x0000000F)<<12)
-#define DSPI_DSR_RFDF                  (0x00020000)
-#define DSPI_DSR_RFOF                  (0x00080000)
-#define DSPI_DSR_TFFF                  (0x02000000)
-#define DSPI_DSR_TFUF                  (0x08000000)
-#define DSPI_DSR_EOQF                  (0x10000000)
-#define DSPI_DSR_TXRXS                 (0x40000000)
-#define DSPI_DSR_TCF                   (0x80000000)
-
-/* Bit definitions and macros for DIRSR */
-#define DSPI_DIRSR_RFDFS               (0x00010000)
-#define DSPI_DIRSR_RFDFE               (0x00020000)
-#define DSPI_DIRSR_RFOFE               (0x00080000)
-#define DSPI_DIRSR_TFFFS               (0x01000000)
-#define DSPI_DIRSR_TFFFE               (0x02000000)
-#define DSPI_DIRSR_TFUFE               (0x08000000)
-#define DSPI_DIRSR_EOQFE               (0x10000000)
-#define DSPI_DIRSR_TCFE                        (0x80000000)
-
-/* Bit definitions and macros for DTFR */
-#define DSPI_DTFR_TXDATA(x)            (((x)&0x0000FFFF))
-#define DSPI_DTFR_CS0                  (0x00010000)
-#define DSPI_DTFR_CS2                  (0x00040000)
-#define DSPI_DTFR_CS3                  (0x00080000)
-#define DSPI_DTFR_CS5                  (0x00200000)
-#define DSPI_DTFR_CTCNT                        (0x04000000)
-#define DSPI_DTFR_EOQ                  (0x08000000)
-#define DSPI_DTFR_CTAS(x)              (((x)&0x00000007)<<28)
-#define DSPI_DTFR_CONT                 (0x80000000)
-
-/* Bit definitions and macros for DRFR */
-#define DSPI_DRFR_RXDATA(x)            (((x)&0x0000FFFF))
-
-/* Bit definitions and macros for DTFDR group */
-#define DSPI_DTFDR_TXDATA(x)           (((x)&0x0000FFFF))
-#define DSPI_DTFDR_TXCMD(x)            (((x)&0x0000FFFF)<<16)
-
-/* Bit definitions and macros for DRFDR group */
-#define DSPI_DRFDR_RXDATA(x)           (((x)&0x0000FFFF))
-
 /*********************************************************************
 * Edge Port Module (EPORT)
 *********************************************************************/
 #define SDRAMC_SDCS_CSSZ_2GBYTE                (0x0000001E)
 #define SDRAMC_SDCS_CSSZ_4GBYTE                (0x0000001F)
 
-/*********************************************************************
-* Synchronous Serial Interface (SSI)
-*********************************************************************/
-
-/* Bit definitions and macros for CR */
-#define SSI_CR_SSI_EN                  (0x00000001)
-#define SSI_CR_TE                      (0x00000002)
-#define SSI_CR_RE                      (0x00000004)
-#define SSI_CR_NET                     (0x00000008)
-#define SSI_CR_SYN                     (0x00000010)
-#define SSI_CR_I2S(x)                  (((x)&0x00000003)<<5)
-#define SSI_CR_MCE                     (0x00000080)
-#define SSI_CR_TCH                     (0x00000100)
-#define SSI_CR_CIS                     (0x00000200)
-#define SSI_CR_I2S_NORMAL              (0x00000000)
-#define SSI_CR_I2S_MASTER              (0x00000020)
-#define SSI_CR_I2S_SLAVE               (0x00000040)
-
-/* Bit definitions and macros for ISR */
-#define SSI_ISR_TFE0                   (0x00000001)
-#define SSI_ISR_TFE1                   (0x00000002)
-#define SSI_ISR_RFF0                   (0x00000004)
-#define SSI_ISR_RFF1                   (0x00000008)
-#define SSI_ISR_RLS                    (0x00000010)
-#define SSI_ISR_TLS                    (0x00000020)
-#define SSI_ISR_RFS                    (0x00000040)
-#define SSI_ISR_TFS                    (0x00000080)
-#define SSI_ISR_TUE0                   (0x00000100)
-#define SSI_ISR_TUE1                   (0x00000200)
-#define SSI_ISR_ROE0                   (0x00000400)
-#define SSI_ISR_ROE1                   (0x00000800)
-#define SSI_ISR_TDE0                   (0x00001000)
-#define SSI_ISR_TDE1                   (0x00002000)
-#define SSI_ISR_RDR0                   (0x00004000)
-#define SSI_ISR_RDR1                   (0x00008000)
-#define SSI_ISR_RXT                    (0x00010000)
-#define SSI_ISR_CMDDU                  (0x00020000)
-#define SSI_ISR_CMDAU                  (0x00040000)
-
-/* Bit definitions and macros for IER */
-#define SSI_IER_TFE0                   (0x00000001)
-#define SSI_IER_TFE1                   (0x00000002)
-#define SSI_IER_RFF0                   (0x00000004)
-#define SSI_IER_RFF1                   (0x00000008)
-#define SSI_IER_RLS                    (0x00000010)
-#define SSI_IER_TLS                    (0x00000020)
-#define SSI_IER_RFS                    (0x00000040)
-#define SSI_IER_TFS                    (0x00000080)
-#define SSI_IER_TUE0                   (0x00000100)
-#define SSI_IER_TUE1                   (0x00000200)
-#define SSI_IER_ROE0                   (0x00000400)
-#define SSI_IER_ROE1                   (0x00000800)
-#define SSI_IER_TDE0                   (0x00001000)
-#define SSI_IER_TDE1                   (0x00002000)
-#define SSI_IER_RDR0                   (0x00004000)
-#define SSI_IER_RDR1                   (0x00008000)
-#define SSI_IER_RXT                    (0x00010000)
-#define SSI_IER_CMDU                   (0x00020000)
-#define SSI_IER_CMDAU                  (0x00040000)
-#define SSI_IER_TIE                    (0x00080000)
-#define SSI_IER_TDMAE                  (0x00100000)
-#define SSI_IER_RIE                    (0x00200000)
-#define SSI_IER_RDMAE                  (0x00400000)
-
-/* Bit definitions and macros for TCR */
-#define SSI_TCR_TEFS                   (0x00000001)
-#define SSI_TCR_TFSL                   (0x00000002)
-#define SSI_TCR_TFSI                   (0x00000004)
-#define SSI_TCR_TSCKP                  (0x00000008)
-#define SSI_TCR_TSHFD                  (0x00000010)
-#define SSI_TCR_TXDIR                  (0x00000020)
-#define SSI_TCR_TFDIR                  (0x00000040)
-#define SSI_TCR_TFEN0                  (0x00000080)
-#define SSI_TCR_TFEN1                  (0x00000100)
-#define SSI_TCR_TXBIT0                 (0x00000200)
-
-/* Bit definitions and macros for RCR */
-#define SSI_RCR_REFS                   (0x00000001)
-#define SSI_RCR_RFSL                   (0x00000002)
-#define SSI_RCR_RFSI                   (0x00000004)
-#define SSI_RCR_RSCKP                  (0x00000008)
-#define SSI_RCR_RSHFD                  (0x00000010)
-#define SSI_RCR_RFEN0                  (0x00000080)
-#define SSI_RCR_RFEN1                  (0x00000100)
-#define SSI_RCR_RXBIT0                 (0x00000200)
-#define SSI_RCR_RXEXT                  (0x00000400)
-
-/* Bit definitions and macros for CCR */
-#define SSI_CCR_PM(x)                  (((x)&0x000000FF))
-#define SSI_CCR_DC(x)                  (((x)&0x0000001F)<<8)
-#define SSI_CCR_WL(x)                  (((x)&0x0000000F)<<13)
-#define SSI_CCR_PSR                    (0x00020000)
-#define SSI_CCR_DIV2                   (0x00040000)
-
-/* Bit definitions and macros for FCSR */
-#define SSI_FCSR_TFWM0(x)              (((x)&0x0000000F))
-#define SSI_FCSR_RFWM0(x)              (((x)&0x0000000F)<<4)
-#define SSI_FCSR_TFCNT0(x)             (((x)&0x0000000F)<<8)
-#define SSI_FCSR_RFCNT0(x)             (((x)&0x0000000F)<<12)
-#define SSI_FCSR_TFWM1(x)              (((x)&0x0000000F)<<16)
-#define SSI_FCSR_RFWM1(x)              (((x)&0x0000000F)<<20)
-#define SSI_FCSR_TFCNT1(x)             (((x)&0x0000000F)<<24)
-#define SSI_FCSR_RFCNT1(x)             (((x)&0x0000000F)<<28)
-
-/* Bit definitions and macros for ACR */
-#define SSI_ACR_AC97EN                 (0x00000001)
-#define SSI_ACR_FV                     (0x00000002)
-#define SSI_ACR_TIF                    (0x00000004)
-#define SSI_ACR_RD                     (0x00000008)
-#define SSI_ACR_WR                     (0x00000010)
-#define SSI_ACR_FRDIV(x)               (((x)&0x0000003F)<<5)
-
-/* Bit definitions and macros for ACADD */
-#define SSI_ACADD_SSI_ACADD(x)         (((x)&0x0007FFFF))
-
-/* Bit definitions and macros for ACDAT */
-#define SSI_ACDAT_SSI_ACDAT(x)         (((x)&0x0007FFFF))
-
-/* Bit definitions and macros for ATAG */
-#define SSI_ATAG_DDI_ATAG(x)           (((x)&0x0000FFFF))
-
 /*********************************************************************
 * Phase Locked Loop (PLL)
 *********************************************************************/
 #define PCI_TCR1_P                     (0x00010000)    /* Prefetch reads */
 #define PCI_TCR1_WCD                   (0x00000100)    /* Write combine disable */
 
-#define PCI_TCR1_B5E                   (0x00002000)    /*  */
-#define PCI_TCR1_B4E                   (0x00001000)    /*  */
-#define PCI_TCR1_B3E                   (0x00000800)    /*  */
-#define PCI_TCR1_B2E                   (0x00000400)    /*  */
-#define PCI_TCR1_B1E                   (0x00000200)    /*  */
-#define PCI_TCR1_B0E                   (0x00000100)    /*  */
-#define PCI_TCR1_CR                    (0x00000001)    /*  */
+#define PCI_TCR2_B5E                   (0x00002000)    /*  */
+#define PCI_TCR2_B4E                   (0x00001000)    /*  */
+#define PCI_TCR2_B3E                   (0x00000800)    /*  */
+#define PCI_TCR2_B2E                   (0x00000400)    /*  */
+#define PCI_TCR2_B1E                   (0x00000200)    /*  */
+#define PCI_TCR2_B0E                   (0x00000100)    /*  */
+#define PCI_TCR2_CR                    (0x00000001)    /*  */
 
 #define PCI_TBATR_BAT(x)               ((x & 0xFFF) << 20)
 #define PCI_TBATR_EN                   (0x00000001)    /* Enable */
 #define PCI_ICR_REE                    (0x04000000)    /* Retry error enable */
 #define PCI_ICR_IAE                    (0x02000000)    /* Initiator abort enable */
 #define PCI_ICR_TAE                    (0x01000000)    /* Target abort enable */
-
-#define PCI_IDR_DEVID                  (
+#define PCI_ICR_MAXRETRY(x)            ((x) & 0x000000FF)
 
 /********************************************************************/
 
diff --git a/include/asm-m68k/m547x_8x.h b/include/asm-m68k/m547x_8x.h
new file mode 100644 (file)
index 0000000..2db8df2
--- /dev/null
@@ -0,0 +1,502 @@
+/*
+ * mcf547x_8x.h -- Definitions for Freescale Coldfire 547x_8x
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef mcf547x_8x_h
+#define mcf547x_8x_h
+
+/*********************************************************************
+* XLB Arbiter (XLB)
+*********************************************************************/
+/* Bit definitions and macros for XARB_CFG */
+#define XARB_CFG_AT                    (0x00000002)
+#define XARB_CFG_DT                    (0x00000004)
+#define XARB_CFG_BA                    (0x00000008)
+#define XARB_CFG_PM(x)                 (((x)&0x00000003)<<5)
+#define XARB_CFG_SP(x)                 (((x)&0x00000007)<<8)
+#define XARB_CFG_PLDIS                 (0x80000000)
+
+/* Bit definitions and macros for XARB_SR */
+#define XARB_SR_AT                     (0x00000001)
+#define XARB_SR_DT                     (0x00000002)
+#define XARB_SR_BA                     (0x00000004)
+#define XARB_SR_TTM                    (0x00000008)
+#define XARB_SR_ECW                    (0x00000010)
+#define XARB_SR_TTR                    (0x00000020)
+#define XARB_SR_TTA                    (0x00000040)
+#define XARB_SR_MM                     (0x00000080)
+#define XARB_SR_SEA                    (0x00000100)
+
+/* Bit definitions and macros for XARB_IMR */
+#define XARB_IMR_ATE                   (0x00000001)
+#define XARB_IMR_DTE                   (0x00000002)
+#define XARB_IMR_BAE                   (0x00000004)
+#define XARB_IMR_TTME                  (0x00000008)
+#define XARB_IMR_ECWE                  (0x00000010)
+#define XARB_IMR_TTRE                  (0x00000020)
+#define XARB_IMR_TTAE                  (0x00000040)
+#define XARB_IMR_MME                   (0x00000080)
+#define XARB_IMR_SEAE                  (0x00000100)
+
+/* Bit definitions and macros for XARB_SIGCAP */
+#define XARB_SIGCAP_TT(x)              ((x)&0x0000001F)
+#define XARB_SIGCAP_TBST               (0x00000020)
+#define XARB_SIGCAP_TSIZ(x)            (((x)&0x00000007)<<7)
+
+/* Bit definitions and macros for XARB_PRIEN */
+#define XARB_PRIEN_M0                  (0x00000001)
+#define XARB_PRIEN_M2                  (0x00000004)
+#define XARB_PRIEN_M3                  (0x00000008)
+
+/* Bit definitions and macros for XARB_PRI */
+#define XARB_PRI_M0P(x)                        (((x)&0x00000007)<<0)
+#define XARB_PRI_M2P(x)                        (((x)&0x00000007)<<8)
+#define XARB_PRI_M3P(x)                        (((x)&0x00000007)<<12)
+
+/*********************************************************************
+* General Purpose I/O (GPIO)
+*********************************************************************/
+/* Bit definitions and macros for GPIO_PAR_FBCTL */
+#define GPIO_PAR_FBCTL_TS(x)           (((x)&0x0003)<<0)
+#define GPIO_PAR_FBCTL_TA              (0x0004)
+#define GPIO_PAR_FBCTL_RWB(x)          (((x)&0x0003)<<4)
+#define GPIO_PAR_FBCTL_OE              (0x0040)
+#define GPIO_PAR_FBCTL_BWE0            (0x0100)
+#define GPIO_PAR_FBCTL_BWE1            (0x0400)
+#define GPIO_PAR_FBCTL_BWE2            (0x1000)
+#define GPIO_PAR_FBCTL_BWE3            (0x4000)
+#define GPIO_PAR_FBCTL_TS_GPIO         (0)
+#define GPIO_PAR_FBCTL_TS_TBST         (2)
+#define GPIO_PAR_FBCTL_TS_TS           (3)
+#define GPIO_PAR_FBCTL_RWB_GPIO                (0x0000)
+#define GPIO_PAR_FBCTL_RWB_TBST                (0x0020)
+#define GPIO_PAR_FBCTL_RWB_RWB         (0x0030)
+
+/* Bit definitions and macros for GPIO_PAR_FBCS */
+#define GPIO_PAR_FBCS_CS1              (0x02)
+#define GPIO_PAR_FBCS_CS2              (0x04)
+#define GPIO_PAR_FBCS_CS3              (0x08)
+#define GPIO_PAR_FBCS_CS4              (0x10)
+#define GPIO_PAR_FBCS_CS5              (0x20)
+
+/* Bit definitions and macros for GPIO_PAR_DMA */
+#define GPIO_PAR_DMA_DREQ0(x)          (((x)&0x03)<<0)
+#define GPIO_PAR_DMA_DREQ1(x)          (((x)&0x03)<<2)
+#define GPIO_PAR_DMA_DACK0(x)          (((x)&0x03)<<4)
+#define GPIO_PAR_DMA_DACK1(x)          (((x)&0x03)<<6)
+#define GPIO_PAR_DMA_DACKx_GPIO                (0)
+#define GPIO_PAR_DMA_DACKx_TOUT                (2)
+#define GPIO_PAR_DMA_DACKx_DACK                (3)
+#define GPIO_PAR_DMA_DREQx_GPIO                (0)
+#define GPIO_PAR_DMA_DREQx_TIN         (2)
+#define GPIO_PAR_DMA_DREQx_DREQ                (3)
+
+/* Bit definitions and macros for GPIO_PAR_FECI2CIRQ */
+#define GPIO_PAR_FECI2CIRQ_IRQ5                (0x0001)
+#define GPIO_PAR_FECI2CIRQ_IRQ6                (0x0002)
+#define GPIO_PAR_FECI2CIRQ_SCL         (0x0004)
+#define GPIO_PAR_FECI2CIRQ_SDA         (0x0008)
+#define GPIO_PAR_FECI2CIRQ_E1MDC(x)    (((x)&0x0003)<<6)
+#define GPIO_PAR_FECI2CIRQ_E1MDIO(x)   (((x)&0x0003)<<8)
+#define GPIO_PAR_FECI2CIRQ_E1MII       (0x0400)
+#define GPIO_PAR_FECI2CIRQ_E17         (0x0800)
+#define GPIO_PAR_FECI2CIRQ_E0MDC       (0x1000)
+#define GPIO_PAR_FECI2CIRQ_E0MDIO      (0x2000)
+#define GPIO_PAR_FECI2CIRQ_E0MII       (0x4000)
+#define GPIO_PAR_FECI2CIRQ_E07         (0x8000)
+#define GPIO_PAR_FECI2CIRQ_E1MDIO_CANRX        (0x0000)
+#define GPIO_PAR_FECI2CIRQ_E1MDIO_SDA  (0x0200)
+#define GPIO_PAR_FECI2CIRQ_E1MDIO_EMDIO        (0x0300)
+#define GPIO_PAR_FECI2CIRQ_E1MDC_CANTX (0x0000)
+#define GPIO_PAR_FECI2CIRQ_E1MDC_SCL   (0x0080)
+#define GPIO_PAR_FECI2CIRQ_E1MDC_EMDC  (0x00C0)
+
+/* Bit definitions and macros for GPIO_PAR_PCIBG */
+#define GPIO_PAR_PCIBG_PCIBG0(x)       (((x)&0x0003)<<0)
+#define GPIO_PAR_PCIBG_PCIBG1(x)       (((x)&0x0003)<<2)
+#define GPIO_PAR_PCIBG_PCIBG2(x)       (((x)&0x0003)<<4)
+#define GPIO_PAR_PCIBG_PCIBG3(x)       (((x)&0x0003)<<6)
+#define GPIO_PAR_PCIBG_PCIBG4(x)       (((x)&0x0003)<<8)
+
+/* Bit definitions and macros for GPIO_PAR_PCIBR */
+#define GPIO_PAR_PCIBR_PCIBR0(x)       (((x)&0x0003)<<0)
+#define GPIO_PAR_PCIBR_PCIBR1(x)       (((x)&0x0003)<<2)
+#define GPIO_PAR_PCIBR_PCIBR2(x)       (((x)&0x0003)<<4)
+#define GPIO_PAR_PCIBR_PCIBR3(x)       (((x)&0x0003)<<6)
+#define GPIO_PAR_PCIBR_PCIBR4(x)       (((x)&0x0003)<<8)
+
+/* Bit definitions and macros for GPIO_PAR_PSC3 */
+#define GPIO_PAR_PSC3_TXD3             (0x04)
+#define GPIO_PAR_PSC3_RXD3             (0x08)
+#define GPIO_PAR_PSC3_RTS3(x)          (((x)&0x03)<<4)
+#define GPIO_PAR_PSC3_CTS3(x)          (((x)&0x03)<<6)
+#define GPIO_PAR_PSC3_CTS3_GPIO                (0x00)
+#define GPIO_PAR_PSC3_CTS3_BCLK                (0x80)
+#define GPIO_PAR_PSC3_CTS3_CTS         (0xC0)
+#define GPIO_PAR_PSC3_RTS3_GPIO                (0x00)
+#define GPIO_PAR_PSC3_RTS3_FSYNC       (0x20)
+#define GPIO_PAR_PSC3_RTS3_RTS         (0x30)
+#define GPIO_PAR_PSC3_CTS2_CANRX       (0x40)
+
+/* Bit definitions and macros for GPIO_PAR_PSC2 */
+#define GPIO_PAR_PSC2_TXD2             (0x04)
+#define GPIO_PAR_PSC2_RXD2             (0x08)
+#define GPIO_PAR_PSC2_RTS2(x)          (((x)&0x03)<<4)
+#define GPIO_PAR_PSC2_CTS2(x)          (((x)&0x03)<<6)
+#define GPIO_PAR_PSC2_CTS2_GPIO                (0x00)
+#define GPIO_PAR_PSC2_CTS2_BCLK                (0x80)
+#define GPIO_PAR_PSC2_CTS2_CTS         (0xC0)
+#define GPIO_PAR_PSC2_RTS2_GPIO                (0x00)
+#define GPIO_PAR_PSC2_RTS2_CANTX       (0x10)
+#define GPIO_PAR_PSC2_RTS2_FSYNC       (0x20)
+#define GPIO_PAR_PSC2_RTS2_RTS         (0x30)
+
+/* Bit definitions and macros for GPIO_PAR_PSC1 */
+#define GPIO_PAR_PSC1_TXD1             (0x04)
+#define GPIO_PAR_PSC1_RXD1             (0x08)
+#define GPIO_PAR_PSC1_RTS1(x)          (((x)&0x03)<<4)
+#define GPIO_PAR_PSC1_CTS1(x)          (((x)&0x03)<<6)
+#define GPIO_PAR_PSC1_CTS1_GPIO                (0x00)
+#define GPIO_PAR_PSC1_CTS1_BCLK                (0x80)
+#define GPIO_PAR_PSC1_CTS1_CTS         (0xC0)
+#define GPIO_PAR_PSC1_RTS1_GPIO                (0x00)
+#define GPIO_PAR_PSC1_RTS1_FSYNC       (0x20)
+#define GPIO_PAR_PSC1_RTS1_RTS         (0x30)
+
+/* Bit definitions and macros for GPIO_PAR_PSC0 */
+#define GPIO_PAR_PSC0_TXD0             (0x04)
+#define GPIO_PAR_PSC0_RXD0             (0x08)
+#define GPIO_PAR_PSC0_RTS0(x)          (((x)&0x03)<<4)
+#define GPIO_PAR_PSC0_CTS0(x)          (((x)&0x03)<<6)
+#define GPIO_PAR_PSC0_CTS0_GPIO                (0x00)
+#define GPIO_PAR_PSC0_CTS0_BCLK                (0x80)
+#define GPIO_PAR_PSC0_CTS0_CTS         (0xC0)
+#define GPIO_PAR_PSC0_RTS0_GPIO                (0x00)
+#define GPIO_PAR_PSC0_RTS0_FSYNC       (0x20)
+#define GPIO_PAR_PSC0_RTS0_RTS         (0x30)
+
+/* Bit definitions and macros for GPIO_PAR_DSPI */
+#define GPIO_PAR_DSPI_SOUT(x)          (((x)&0x0003)<<0)
+#define GPIO_PAR_DSPI_SIN(x)           (((x)&0x0003)<<2)
+#define GPIO_PAR_DSPI_SCK(x)           (((x)&0x0003)<<4)
+#define GPIO_PAR_DSPI_CS0(x)           (((x)&0x0003)<<6)
+#define GPIO_PAR_DSPI_CS2(x)           (((x)&0x0003)<<8)
+#define GPIO_PAR_DSPI_CS3(x)           (((x)&0x0003)<<10)
+#define GPIO_PAR_DSPI_CS5              (0x1000)
+#define GPIO_PAR_DSPI_CS3_GPIO         (0x0000)
+#define GPIO_PAR_DSPI_CS3_CANTX                (0x0400)
+#define GPIO_PAR_DSPI_CS3_TOUT         (0x0800)
+#define GPIO_PAR_DSPI_CS3_DSPICS       (0x0C00)
+#define GPIO_PAR_DSPI_CS2_GPIO         (0x0000)
+#define GPIO_PAR_DSPI_CS2_CANTX                (0x0100)
+#define GPIO_PAR_DSPI_CS2_TOUT         (0x0200)
+#define GPIO_PAR_DSPI_CS2_DSPICS       (0x0300)
+#define GPIO_PAR_DSPI_CS0_GPIO         (0x0000)
+#define GPIO_PAR_DSPI_CS0_FSYNC                (0x0040)
+#define GPIO_PAR_DSPI_CS0_RTS          (0x0080)
+#define GPIO_PAR_DSPI_CS0_DSPICS       (0x00C0)
+#define GPIO_PAR_DSPI_SCK_GPIO         (0x0000)
+#define GPIO_PAR_DSPI_SCK_BCLK         (0x0010)
+#define GPIO_PAR_DSPI_SCK_CTS          (0x0020)
+#define GPIO_PAR_DSPI_SCK_SCK          (0x0030)
+#define GPIO_PAR_DSPI_SIN_GPIO         (0x0000)
+#define GPIO_PAR_DSPI_SIN_RXD          (0x0008)
+#define GPIO_PAR_DSPI_SIN_SIN          (0x000C)
+#define GPIO_PAR_DSPI_SOUT_GPIO                (0x0000)
+#define GPIO_PAR_DSPI_SOUT_TXD         (0x0002)
+#define GPIO_PAR_DSPI_SOUT_SOUT                (0x0003)
+
+/* Bit definitions and macros for GPIO_PAR_TIMER */
+#define GPIO_PAR_TIMER_TOUT2           (0x01)
+#define GPIO_PAR_TIMER_TIN2(x)         (((x)&0x03)<<1)
+#define GPIO_PAR_TIMER_TOUT3           (0x08)
+#define GPIO_PAR_TIMER_TIN3(x)         (((x)&0x03)<<4)
+#define GPIO_PAR_TIMER_TIN3_CANRX      (0x00)
+#define GPIO_PAR_TIMER_TIN3_IRQ                (0x20)
+#define GPIO_PAR_TIMER_TIN3_TIN                (0x30)
+#define GPIO_PAR_TIMER_TIN2_CANRX      (0x00)
+#define GPIO_PAR_TIMER_TIN2_IRQ                (0x04)
+#define GPIO_PAR_TIMER_TIN2_TIN                (0x06)
+
+/*********************************************************************
+* Slice Timer (SLT)
+*********************************************************************/
+#define SLT_CR_RUN                     (0x04000000)
+#define SLT_CR_IEN                     (0x02000000)
+#define SLT_CR_TEN                     (0x01000000)
+
+#define SLT_SR_BE                      (0x02000000)
+#define SLT_SR_ST                      (0x01000000)
+
+/*********************************************************************
+* Interrupt Controller (INTC)
+*********************************************************************/
+#define INT0_LO_RSVD0                  (0)
+#define INT0_LO_EPORT1                 (1)
+#define INT0_LO_EPORT2                 (2)
+#define INT0_LO_EPORT3                 (3)
+#define INT0_LO_EPORT4                 (4)
+#define INT0_LO_EPORT5                 (5)
+#define INT0_LO_EPORT6                 (6)
+#define INT0_LO_EPORT7                 (7)
+#define INT0_LO_EP0ISR                 (15)
+#define INT0_LO_EP1ISR                 (16)
+#define INT0_LO_EP2ISR                 (17)
+#define INT0_LO_EP3ISR                 (18)
+#define INT0_LO_EP4ISR                 (19)
+#define INT0_LO_EP5ISR                 (20)
+#define INT0_LO_EP6ISR                 (21)
+#define INT0_LO_USBISR                 (22)
+#define INT0_LO_USBAISR                        (23)
+#define INT0_LO_USB                    (24)
+#define INT1_LO_DSPI_RFOF_TFUF         (25)
+#define INT1_LO_DSPI_RFOF              (26)
+#define INT1_LO_DSPI_RFDF              (27)
+#define INT1_LO_DSPI_TFUF              (28)
+#define INT1_LO_DSPI_TCF               (29)
+#define INT1_LO_DSPI_TFFF              (30)
+#define INT1_LO_DSPI_EOQF              (31)
+
+#define INT0_HI_UART3                  (32)
+#define INT0_HI_UART2                  (33)
+#define INT0_HI_UART1                  (34)
+#define INT0_HI_UART0                  (35)
+#define INT0_HI_COMMTIM_TC             (36)
+#define INT0_HI_SEC                    (37)
+#define INT0_HI_FEC1                   (38)
+#define INT0_HI_FEC0                   (39)
+#define INT0_HI_I2C                    (40)
+#define INT0_HI_PCIARB                 (41)
+#define INT0_HI_CBPCI                  (42)
+#define INT0_HI_XLBPCI                 (43)
+#define INT0_HI_XLBARB                 (47)
+#define INT0_HI_DMA                    (48)
+#define INT0_HI_CAN0_ERROR             (49)
+#define INT0_HI_CAN0_BUSOFF            (50)
+#define INT0_HI_CAN0_MBOR              (51)
+#define INT0_HI_SLT1                   (53)
+#define INT0_HI_SLT0                   (54)
+#define INT0_HI_CAN1_ERROR             (55)
+#define INT0_HI_CAN1_BUSOFF            (56)
+#define INT0_HI_CAN1_MBOR              (57)
+#define INT0_HI_GPT3                   (59)
+#define INT0_HI_GPT2                   (60)
+#define INT0_HI_GPT1                   (61)
+#define INT0_HI_GPT0                   (62)
+
+/* Bit definitions and macros for IPRH */
+#define INTC_IPRH_INT32                        (0x00000001)
+#define INTC_IPRH_INT33                        (0x00000002)
+#define INTC_IPRH_INT34                        (0x00000004)
+#define INTC_IPRH_INT35                        (0x00000008)
+#define INTC_IPRH_INT36                        (0x00000010)
+#define INTC_IPRH_INT37                        (0x00000020)
+#define INTC_IPRH_INT38                        (0x00000040)
+#define INTC_IPRH_INT39                        (0x00000080)
+#define INTC_IPRH_INT40                        (0x00000100)
+#define INTC_IPRH_INT41                        (0x00000200)
+#define INTC_IPRH_INT42                        (0x00000400)
+#define INTC_IPRH_INT43                        (0x00000800)
+#define INTC_IPRH_INT44                        (0x00001000)
+#define INTC_IPRH_INT45                        (0x00002000)
+#define INTC_IPRH_INT46                        (0x00004000)
+#define INTC_IPRH_INT47                        (0x00008000)
+#define INTC_IPRH_INT48                        (0x00010000)
+#define INTC_IPRH_INT49                        (0x00020000)
+#define INTC_IPRH_INT50                        (0x00040000)
+#define INTC_IPRH_INT51                        (0x00080000)
+#define INTC_IPRH_INT52                        (0x00100000)
+#define INTC_IPRH_INT53                        (0x00200000)
+#define INTC_IPRH_INT54                        (0x00400000)
+#define INTC_IPRH_INT55                        (0x00800000)
+#define INTC_IPRH_INT56                        (0x01000000)
+#define INTC_IPRH_INT57                        (0x02000000)
+#define INTC_IPRH_INT58                        (0x04000000)
+#define INTC_IPRH_INT59                        (0x08000000)
+#define INTC_IPRH_INT60                        (0x10000000)
+#define INTC_IPRH_INT61                        (0x20000000)
+#define INTC_IPRH_INT62                        (0x40000000)
+#define INTC_IPRH_INT63                        (0x80000000)
+
+/* Bit definitions and macros for IPRL */
+#define INTC_IPRL_INT0                 (0x00000001)
+#define INTC_IPRL_INT1                 (0x00000002)
+#define INTC_IPRL_INT2                 (0x00000004)
+#define INTC_IPRL_INT3                 (0x00000008)
+#define INTC_IPRL_INT4                 (0x00000010)
+#define INTC_IPRL_INT5                 (0x00000020)
+#define INTC_IPRL_INT6                 (0x00000040)
+#define INTC_IPRL_INT7                 (0x00000080)
+#define INTC_IPRL_INT8                 (0x00000100)
+#define INTC_IPRL_INT9                 (0x00000200)
+#define INTC_IPRL_INT10                        (0x00000400)
+#define INTC_IPRL_INT11                        (0x00000800)
+#define INTC_IPRL_INT12                        (0x00001000)
+#define INTC_IPRL_INT13                        (0x00002000)
+#define INTC_IPRL_INT14                        (0x00004000)
+#define INTC_IPRL_INT15                        (0x00008000)
+#define INTC_IPRL_INT16                        (0x00010000)
+#define INTC_IPRL_INT17                        (0x00020000)
+#define INTC_IPRL_INT18                        (0x00040000)
+#define INTC_IPRL_INT19                        (0x00080000)
+#define INTC_IPRL_INT20                        (0x00100000)
+#define INTC_IPRL_INT21                        (0x00200000)
+#define INTC_IPRL_INT22                        (0x00400000)
+#define INTC_IPRL_INT23                        (0x00800000)
+#define INTC_IPRL_INT24                        (0x01000000)
+#define INTC_IPRL_INT25                        (0x02000000)
+#define INTC_IPRL_INT26                        (0x04000000)
+#define INTC_IPRL_INT27                        (0x08000000)
+#define INTC_IPRL_INT28                        (0x10000000)
+#define INTC_IPRL_INT29                        (0x20000000)
+#define INTC_IPRL_INT30                        (0x40000000)
+#define INTC_IPRL_INT31                        (0x80000000)
+
+/*********************************************************************
+* General Purpose Timers (GPTMR)
+*********************************************************************/
+/* Enable and Mode Select */
+#define GPT_OCT(x)                     (x & 0x3)<<4    /* Output Compare Type */
+#define GPT_ICT(x)                     (x & 0x3)       /* Input Capture Type */
+#define GPT_CTRL_WDEN                  0x80            /* Watchdog Enable */
+#define GPT_CTRL_CE                    0x10            /* Counter Enable */
+#define GPT_CTRL_STPCNT                        0x04            /* Stop continous */
+#define GPT_CTRL_ODRAIN                        0x02            /* Open Drain */
+#define GPT_CTRL_INTEN                 0x01            /* Interrupt Enable */
+#define GPT_MODE_GPIO(x)               (x & 0x3)<<4    /* Gpio Mode Type */
+#define GPT_TMS_ICT                    0x01            /* Input Capture Enable */
+#define GPT_TMS_OCT                    0x02            /* Output Capture Enable */
+#define GPT_TMS_PWM                    0x03            /* PWM Capture Enable */
+#define GPT_TMS_SGPIO                  0x04            /* PWM Capture Enable */
+
+#define GPT_PWM_WIDTH(x)               (x & 0xffff)
+
+/* Status */
+#define GPT_STA_CAPTURE(x)             (x & 0xffff)
+
+#define GPT_OVFPIN_OVF(x)              (x & 0x70)
+#define GPT_OVFPIN_PIN                 0x01
+
+#define GPT_INT_TEXP                   0x08
+#define GPT_INT_PWMP                   0x04
+#define GPT_INT_COMP                   0x02
+#define GPT_INT_CAPT                   0x01
+
+/*********************************************************************
+* PCI
+*********************************************************************/
+
+/* Bit definitions and macros for SCR */
+#define PCI_SCR_PE                     (0x80000000)    /* Parity Error detected */
+#define PCI_SCR_SE                     (0x40000000)    /* System error signalled */
+#define PCI_SCR_MA                     (0x20000000)    /* Master aboart received */
+#define PCI_SCR_TR                     (0x10000000)    /* Target abort received */
+#define PCI_SCR_TS                     (0x08000000)    /* Target abort signalled */
+#define PCI_SCR_DT                     (0x06000000)    /* PCI_DEVSEL timing */
+#define PCI_SCR_DP                     (0x01000000)    /* Master data parity err */
+#define PCI_SCR_FC                     (0x00800000)    /* Fast back-to-back */
+#define PCI_SCR_R                      (0x00400000)    /* Reserved */
+#define PCI_SCR_66M                    (0x00200000)    /* 66Mhz */
+#define PCI_SCR_C                      (0x00100000)    /* Capabilities list */
+#define PCI_SCR_F                      (0x00000200)    /* Fast back-to-back enable */
+#define PCI_SCR_S                      (0x00000100)    /* SERR enable */
+#define PCI_SCR_ST                     (0x00000080)    /* Addr and Data stepping */
+#define PCI_SCR_PER                    (0x00000040)    /* Parity error response */
+#define PCI_SCR_V                      (0x00000020)    /* VGA palette snoop enable */
+#define PCI_SCR_MW                     (0x00000010)    /* Memory write and invalidate enable */
+#define PCI_SCR_SP                     (0x00000008)    /* Special cycle monitor or ignore */
+#define PCI_SCR_B                      (0x00000004)    /* Bus master enable */
+#define PCI_SCR_M                      (0x00000002)    /* Memory access control */
+#define PCI_SCR_IO                     (0x00000001)    /* I/O access control */
+
+#define PCI_CR1_BIST(x)                        ((x & 0xFF) << 24)      /* Built in self test */
+#define PCI_CR1_HDR(x)                 ((x & 0xFF) << 16)      /* Header type */
+#define PCI_CR1_LTMR(x)                        ((x & 0xF8) << 8)       /* Latency timer */
+#define PCI_CR1_CLS(x)                 (x & 0x0F)              /* Cache line size */
+
+#define PCI_BAR_BAR0(x)                        (x & 0xFFFC0000)
+#define PCI_BAR_BAR1(x)                        (x & 0xC0000000)
+#define PCI_BAR_PREF                   (0x00000004)    /* Prefetchable access */
+#define PCI_BAR_RANGE                  (0x00000002)    /* Fixed to 00 */
+#define PCI_BAR_IO_M                   (0x00000001)    /* IO / memory space */
+
+#define PCI_CR2_MAXLAT(x)              ((x & 0xFF) << 24)      /* Maximum latency */
+#define PCI_CR2_MINGNT(x)              ((x & 0xFF) << 16)      /* Minimum grant */
+#define PCI_CR2_INTPIN(x)              ((x & 0xFF) << 8)       /* Interrupt Pin */
+#define PCI_CR2_INTLIN(x)              (x & 0xFF)      /* Interrupt Line */
+
+#define PCI_GSCR_DRD                   (0x80000000)    /* Delayed read discarded */
+#define PCI_GSCR_PE                    (0x20000000)    /* PCI_PERR detected */
+#define PCI_GSCR_SE                    (0x10000000)    /* SERR detected */
+#define PCI_GSCR_ER                    (0x08000000)    /* Error response detected */
+#define PCI_GSCR_DRDE                  (0x00008000)    /* Delayed read discarded enable */
+#define PCI_GSCR_PEE                   (0x00002000)    /* PERR detected interrupt enable */
+#define PCI_GSCR_SEE                   (0x00001000)    /* SERR detected interrupt enable */
+#define PCI_GSCR_PR                    (0x00000001)    /* PCI reset */
+
+#define PCI_TCR1_LD                    (0x01000000)    /* Latency rule disable */
+#define PCI_TCR1_PID                   (0x00020000)    /* Prefetch invalidate and disable */
+#define PCI_TCR1_P                     (0x00010000)    /* Prefetch reads */
+#define PCI_TCR1_WCD                   (0x00000100)    /* Write combine disable */
+
+#define PCI_TCR1_B5E                   (0x00002000)    /*  */
+#define PCI_TCR1_B4E                   (0x00001000)    /*  */
+#define PCI_TCR1_B3E                   (0x00000800)    /*  */
+#define PCI_TCR1_B2E                   (0x00000400)    /*  */
+#define PCI_TCR1_B1E                   (0x00000200)    /*  */
+#define PCI_TCR1_B0E                   (0x00000100)    /*  */
+#define PCI_TCR1_CR                    (0x00000001)    /*  */
+
+#define PCI_TBATR_BAT0(x)              (x & 0xFFFC0000)
+#define PCI_TBATR_BAT1(x)              (x & 0xC0000000)
+#define PCI_TBATR_EN                   (0x00000001)    /* Enable */
+
+#define PCI_IWCR_W0C_IO                        (0x08000000)    /* Windows Maps to PCI I/O */
+#define PCI_IWCR_W0C_PRC_RDMUL         (0x04000000)    /* PCI Memory Read multiple */
+#define PCI_IWCR_W0C_PRC_RDLN          (0x02000000)    /* PCI Memory Read line */
+#define PCI_IWCR_W0C_PRC_RD            (0x00000000)    /* PCI Memory Read */
+#define PCI_IWCR_W0C_EN                        (0x01000000)    /* Enable - Register initialize */
+#define PCI_IWCR_W1C_IO                        (0x00080000)    /* Windows Maps to PCI I/O */
+#define PCI_IWCR_W1C_PRC_RDMUL         (0x00040000)    /* PCI Memory Read multiple */
+#define PCI_IWCR_W1C_PRC_RDLN          (0x00020000)    /* PCI Memory Read line */
+#define PCI_IWCR_W1C_PRC_RD            (0x00000000)    /* PCI Memory Read */
+#define PCI_IWCR_W1C_EN                        (0x00010000)    /* Enable - Register initialize */
+#define PCI_IWCR_W2C_IO                        (0x00000800)    /* Windows Maps to PCI I/O */
+#define PCI_IWCR_W2C_PRC_RDMUL         (0x00000400)    /* PCI Memory Read multiple */
+#define PCI_IWCR_W2C_PRC_RDLN          (0x00000200)    /* PCI Memory Read line */
+#define PCI_IWCR_W2C_PRC_RD            (0x00000000)    /* PCI Memory Read */
+#define PCI_IWCR_W2C_EN                        (0x00000100)    /* Enable - Register initialize */
+
+#define PCI_ICR_REE                    (0x04000000)    /* Retry error enable */
+#define PCI_ICR_IAE                    (0x02000000)    /* Initiator abort enable */
+#define PCI_ICR_TAE                    (0x01000000)    /* Target abort enable */
+#define PCI_ICR_MAXRETRY(x)            ((x) & 0x000000FF)
+
+#define PCIARB_ACR_DS                  (0x80000000)
+#define PCIARB_ARC_EXTMINTEN(x)                (((x)&0x1F) << 17)
+#define PCIARB_ARC_INTMINTEN           (0x00010000)
+#define PCIARB_ARC_EXTMPRI(x)          (((x)&0x1F) << 1)
+#define PCIARB_ARC_INTMPRI             (0x00000001)
+
+#endif                         /* mcf547x_8x_h */
diff --git a/include/asm-ppc/fsl_law.h b/include/asm-ppc/fsl_law.h
new file mode 100644 (file)
index 0000000..7cb8840
--- /dev/null
@@ -0,0 +1,80 @@
+#ifndef _FSL_LAW_H_
+#define _FSL_LAW_H_
+
+#include <asm/io.h>
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#define SET_LAW_ENTRY(idx, a, sz, trgt) \
+       { .index = idx, .addr = a, .size = sz, .trgt_id = trgt }
+
+enum law_size {
+       LAW_SIZE_4K = 0xb,
+       LAW_SIZE_8K,
+       LAW_SIZE_16K,
+       LAW_SIZE_32K,
+       LAW_SIZE_64K,
+       LAW_SIZE_128K,
+       LAW_SIZE_256K,
+       LAW_SIZE_512K,
+       LAW_SIZE_1M,
+       LAW_SIZE_2M,
+       LAW_SIZE_4M,
+       LAW_SIZE_8M,
+       LAW_SIZE_16M,
+       LAW_SIZE_32M,
+       LAW_SIZE_64M,
+       LAW_SIZE_128M,
+       LAW_SIZE_256M,
+       LAW_SIZE_512M,
+       LAW_SIZE_1G,
+       LAW_SIZE_2G,
+       LAW_SIZE_4G,
+       LAW_SIZE_8G,
+       LAW_SIZE_16G,
+       LAW_SIZE_32G,
+};
+
+enum law_trgt_if {
+       LAW_TRGT_IF_PCI = 0x00,
+       LAW_TRGT_IF_PCI_2 = 0x01,
+#ifndef CONFIG_MPC8641
+       LAW_TRGT_IF_PCIE_1 = 0x02,
+#endif
+#ifndef CONFIG_MPC8572
+       LAW_TRGT_IF_PCIE_3 = 0x03,
+#endif
+       LAW_TRGT_IF_LBC = 0x04,
+       LAW_TRGT_IF_CCSR = 0x08,
+       LAW_TRGT_IF_DDR_INTRLV = 0x0b,
+       LAW_TRGT_IF_RIO = 0x0c,
+       LAW_TRGT_IF_DDR = 0x0f,
+       LAW_TRGT_IF_DDR_2 = 0x16,       /* 2nd controller */
+};
+#define LAW_TRGT_IF_DDR_1      LAW_TRGT_IF_DDR
+#define LAW_TRGT_IF_PCI_1      LAW_TRGT_IF_PCI
+#define LAW_TRGT_IF_PCIX       LAW_TRGT_IF_PCI
+#define LAW_TRGT_IF_PCIE_2     LAW_TRGT_IF_PCI_2
+
+#ifdef CONFIG_MPC8641
+#define LAW_TRGT_IF_PCIE_1     LAW_TRGT_IF_PCI
+#endif
+
+#ifdef CONFIG_MPC8572
+#define LAW_TRGT_IF_PCIE_3     LAW_TRGT_IF_PCI
+#endif
+
+struct law_entry {
+       int index;
+       phys_addr_t addr;
+       enum law_size size;
+       enum law_trgt_if trgt_id;
+};
+
+extern void set_law(u8 idx, phys_addr_t addr, enum law_size sz, enum law_trgt_if id);
+extern void disable_law(u8 idx);
+extern void init_laws(void);
+
+/* define in board code */
+extern struct law_entry law_table[];
+extern int num_law_entries;
+#endif
index 34ea2959902eba1a6bedb332e56d8bd33cacd23e..5b215393eef2a6f17ee27a4362f1c8badc8cefcf 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <asm/types.h>
 #include <asm/fsl_i2c.h>
+#include <asm/mpc8xxx_spi.h>
 
 /*
  * Local Access Window
@@ -383,20 +384,6 @@ typedef struct lbus83xx {
        u8 res8[0xF08];
 } lbus83xx_t;
 
-/*
- * Serial Peripheral Interface
- */
-typedef struct spi83xx {
-       u32 mode;               /* mode register */
-       u32 event;              /* event register */
-       u32 mask;               /* mask register */
-       u32 com;                /* command register */
-       u8 res0[0x10];
-       u32 tx;                 /* transmit register */
-       u32 rx;                 /* receive register */
-       u8 res1[0xFD8];
-} spi83xx_t;
-
 /*
  * DMA/Messaging Unit
  */
@@ -627,7 +614,7 @@ typedef struct immap {
        u8                      res3[0x900];
        lbus83xx_t              lbus;           /* Local Bus Controller Registers */
        u8                      res4[0x1000];
-       spi83xx_t               spi;            /* Serial Peripheral Interface */
+       spi8xxx_t               spi;            /* Serial Peripheral Interface */
        dma83xx_t               dma;            /* DMA */
        pciconf83xx_t           pci_conf[2];    /* PCI Software Configuration Registers */
        ios83xx_t               ios;            /* Sequencer */
@@ -661,7 +648,7 @@ typedef struct immap {
        u8                      res2[0x900];
        lbus83xx_t              lbus;           /* Local Bus Controller Registers */
        u8                      res3[0x1000];
-       spi83xx_t               spi;            /* Serial Peripheral Interface */
+       spi8xxx_t               spi;            /* Serial Peripheral Interface */
        dma83xx_t               dma;            /* DMA */
        pciconf83xx_t           pci_conf[1];    /* PCI Software Configuration Registers */
        u8                      res4[0x80];
@@ -696,7 +683,7 @@ typedef struct immap {
        u8                      res2[0x900];
        lbus83xx_t              lbus;           /* Local Bus Controller Registers */
        u8                      res3[0x1000];
-       spi83xx_t               spi;            /* Serial Peripheral Interface */
+       spi8xxx_t               spi;            /* Serial Peripheral Interface */
        dma83xx_t               dma;            /* DMA */
        pciconf83xx_t           pci_conf[1];    /* PCI Software Configuration Registers */
        u8                      res4[0x80];
@@ -741,7 +728,7 @@ typedef struct immap {
        u8                      res2[0x900];
        lbus83xx_t              lbus;           /* Local Bus Controller Registers */
        u8                      res3[0x1000];
-       spi83xx_t               spi;            /* Serial Peripheral Interface */
+       spi8xxx_t               spi;            /* Serial Peripheral Interface */
        dma83xx_t               dma;            /* DMA */
        pciconf83xx_t           pci_conf[1];    /* PCI Software Configuration Registers */
        u8                      res4[0x80];
index 45a47645edfc388c9fd3d3bca5bac4a442e12b41..ec1ca53cc165dd4379b8587554d9ba1e4e7a63e1 100644 (file)
@@ -418,6 +418,37 @@ extern int write_bat(ppc_bat_t bat, unsigned long upper, unsigned long lower);
 #define BOOKE_PAGESZ_256GB     14
 #define BOOKE_PAGESZ_1TB       15
 
+#ifdef CONFIG_E500
+#ifndef __ASSEMBLY__
+extern void set_tlb(u8 tlb, u32 epn, u64 rpn,
+                   u8 perms, u8 wimge,
+                   u8 ts, u8 esel, u8 tsize, u8 iprot);
+extern void disable_tlb(u8 esel);
+extern void invalidate_tlb(u8 tlb);
+extern void init_tlbs(void);
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+#define SET_TLB_ENTRY(_tlb, _epn, _rpn, _perms, _wimge, _ts, _esel, _sz, _iprot) \
+       { .tlb = _tlb, .epn = _epn, .rpn = _rpn, .perms = _perms, \
+         .wimge = _wimge, .ts = _ts, .esel = _esel, .tsize = _sz, .iprot = _iprot }
+
+struct fsl_e_tlb_entry {
+       u8      tlb;
+       u32     epn;
+       u64     rpn;
+       u8      perms;
+       u8      wimge;
+       u8      ts;
+       u8      esel;
+       u8      tsize;
+       u8      iprot;
+};
+
+extern struct fsl_e_tlb_entry tlb_table[];
+extern int num_tlb_entries;
+#endif
+#endif
+
 #if defined(CONFIG_MPC86xx)
 #define LAWBAR_BASE_ADDR       0x00FFFFFF
 #define LAWAR_TRGT_IF          0x01F00000
diff --git a/include/asm-ppc/mpc8xxx_spi.h b/include/asm-ppc/mpc8xxx_spi.h
new file mode 100644 (file)
index 0000000..48b15e4
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Freescale non-CPM SPI Controller
+ *
+ * Copyright 2008 Qstreams Networks, Inc.
+ *
+ * This software may be used and distributed according to the
+ * terms of the GNU Public License, Version 2, incorporated
+ * herein by reference.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * Version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _ASM_MPC8XXX_SPI_H_
+#define _ASM_MPC8XXX_SPI_H_
+
+#include <asm/types.h>
+
+#if defined(CONFIG_MPC834X) || \
+       defined(CONFIG_MPC8313) || \
+       defined(CONFIG_MPC8315) || \
+       defined(CONFIG_MPC837X)
+
+typedef struct spi8xxx {
+       u8 res0[0x20];  /* 0x0-0x01f reserved */
+       u32 mode;       /* mode register  */
+       u32 event;      /* event register */
+       u32 mask;       /* mask register  */
+       u32 com;        /* command register */
+       u32 tx;         /* transmit register */
+       u32 rx;         /* receive register */
+       u8 res1[0xFC8]; /* fill up to 0x1000 */
+} spi8xxx_t;
+
+#endif
+
+#endif /* _ASM_MPC8XXX_SPI_H_ */
index f7020b495691c86eaa5a7d5bae29f6972744f206..c14376e7f4923b8429f56fed7a951bb5c22e9eb7 100644 (file)
@@ -63,6 +63,8 @@
 #define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 #define CONFIG_INTERRUPTS              /* enable pci, srio, ddr interrupts */
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
+
 #define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
 
 #define CONFIG_SYS_CLK_FREQ    33000000
diff --git a/include/configs/DU440.h b/include/configs/DU440.h
new file mode 100644 (file)
index 0000000..4fb6921
--- /dev/null
@@ -0,0 +1,438 @@
+/*
+ * (C) Copyright 2008
+ * Matthias Fuchs, esd gmbh, matthias.fuchs@esd-electronics.com
+ *
+ * based on the Sequoia board configuration by
+ * Stefan Roese, Jacqueline Pira-Ferriol and Alain Saurel
+ *
+ * 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
+ */
+
+/*
+ **********************************************************************
+ * DU440.h - configuration for esd's DU440 board (Power PC440EPx)
+ **********************************************************************
+ */
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ */
+#define CONFIG_DU440           1               /* Board is esd DU440   */
+#define CONFIG_440EPX          1               /* Specific PPC440EPx   */
+#define CONFIG_4xx             1               /* ... PPC4xx family    */
+#define CONFIG_SYS_CLK_FREQ    33333400        /* external freq to pll */
+
+#define CONFIG_BOARD_EARLY_INIT_F 1            /* Call board_early_init_f */
+#define CONFIG_MISC_INIT_R     1               /* Call misc_init_r     */
+#define CONFIG_LAST_STAGE_INIT  1               /* last_stage_init      */
+
+/*
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ */
+#define CFG_MONITOR_LEN                (384 * 1024)    /* Reserve 384 kB for Monitor */
+#define CFG_MALLOC_LEN         (8 << 20)       /* Reserve 8 MB for malloc()  */
+
+#define CFG_BOOT_BASE_ADDR     0xf0000000
+#define CFG_SDRAM_BASE         0x00000000      /* _must_ be 0          */
+#define CFG_FLASH_BASE         0xfc000000      /* start of FLASH       */
+#define CFG_MONITOR_BASE       TEXT_BASE
+#define CFG_NAND0_ADDR         0xd0000000      /* NAND Flash           */
+#define CFG_NAND1_ADDR         0xd0100000      /* NAND Flash           */
+#define CFG_OCM_BASE           0xe0010000      /* ocm                  */
+#define CFG_PCI_BASE           0xe0000000      /* Internal PCI regs    */
+#define CFG_PCI_MEMBASE                0x80000000      /* mapped pci memory    */
+#define CFG_PCI_MEMBASE1       CFG_PCI_MEMBASE  + 0x10000000
+#define CFG_PCI_MEMBASE2       CFG_PCI_MEMBASE1 + 0x10000000
+#define CFG_PCI_MEMBASE3       CFG_PCI_MEMBASE2 + 0x10000000
+#define CFG_PCI_IOBASE          0xe8000000
+
+
+/* Don't change either of these */
+#define CFG_PERIPHERAL_BASE    0xef600000      /* internal peripherals */
+
+#define CFG_USB2D0_BASE                0xe0000100
+#define CFG_USB_DEVICE         0xe0000000
+#define CFG_USB_HOST           0xe0000400
+
+/*
+ * Initial RAM & stack pointer
+ */
+/* 440EPx/440GRx have 16KB of internal SRAM, so no need for D-Cache    */
+#define CFG_INIT_RAM_OCM       1               /* OCM as init ram      */
+#define CFG_INIT_RAM_ADDR      CFG_OCM_BASE    /* OCM                  */
+
+#define CFG_INIT_RAM_END       (4 << 10)
+#define CFG_GBL_DATA_SIZE      256             /* num bytes initial data */
+#define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+/*
+ * Serial Port
+ */
+/* TODO: external clock oscillator will be removed */
+#define CFG_EXT_SERIAL_CLOCK   11059200        /* ext. 11.059MHz clk   */
+#define CONFIG_BAUDRATE                115200
+#define CONFIG_SERIAL_MULTI     1
+#undef CONFIG_UART1_CONSOLE
+
+#define CFG_BAUDRATE_TABLE                                             \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
+
+/*
+ * Video Port
+ */
+#define CONFIG_VIDEO
+#define CONFIG_VIDEO_SMI_LYNXEM
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+#define CONFIG_SPLASH_SCREEN
+#define CONFIG_SPLASH_SCREEN_ALIGN
+#define CONFIG_VIDEO_BMP_GZIP              /* gzip compressed bmp images */
+#define CFG_VIDEO_LOGO_MAX_SIZE (4 << 20)  /* for decompressed img */
+#define CFG_DEFAULT_VIDEO_MODE 0x31a       /* 1280x1024,16bpp */
+#define CFG_CONSOLE_IS_IN_ENV
+#define CFG_ISA_IO CFG_PCI_IOBASE
+
+/*
+ * Environment
+ */
+#define CFG_ENV_IS_IN_EEPROM    1      /* use FLASH for environment vars */
+
+/*
+ * FLASH related
+ */
+#define CFG_FLASH_CFI                  /* The flash is CFI compatible */
+#define CFG_FLASH_CFI_DRIVER           /* Use common CFI driver       */
+
+#define CFG_FLASH_BANKS_LIST   { CFG_FLASH_BASE }
+
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks         */
+#define CFG_MAX_FLASH_SECT     512     /* max number of sectors on one chip  */
+
+#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)    */
+#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)    */
+
+#define CFG_FLASH_USE_BUFFER_WRITE 1   /* use buffered writes (20x faster)   */
+/* CFI_FLASH_PROTECTION make flash_protect hang sometimes -> disabled */
+#define CFG_FLASH_PROTECTION   1       /* use hardware flash protection      */
+
+#define CFG_FLASH_EMPTY_INFO
+#define CFG_FLASH_QUIET_TEST   1       /* don't warn upon unknown flash      */
+
+#ifdef CFG_ENV_IS_IN_FLASH
+#define CFG_ENV_SECT_SIZE      0x20000 /* size of one complete sector        */
+#define CFG_ENV_ADDR           ((-CFG_MONITOR_LEN)-CFG_ENV_SECT_SIZE)
+#define        CFG_ENV_SIZE            0x2000  /* Total Size of Environment Sector   */
+
+/* Address and size of Redundant Environment Sector    */
+#define CFG_ENV_ADDR_REDUND    (CFG_ENV_ADDR-CFG_ENV_SECT_SIZE)
+#define CFG_ENV_SIZE_REDUND    (CFG_ENV_SIZE)
+#endif
+
+#ifdef CFG_ENV_IS_IN_EEPROM
+#define CFG_ENV_OFFSET         0       /* environment starts at */
+                                       /* the beginning of the EEPROM */
+#define CFG_ENV_SIZE           0x1000 /* 4096 bytes may be used for env vars */
+#endif
+
+/*
+ * DDR SDRAM
+ */
+#define CFG_MBYTES_SDRAM        (1024) /* 512 MiB      TODO: remove    */
+#define CONFIG_DDR_DATA_EYE            /* use DDR2 optimization        */
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for setup     */
+#if 0
+#define CONFIG_ZERO_SDRAM              /* Zero SDRAM after setup       */
+#endif
+#define CONFIG_DDR_ECC                 /* Use ECC when available       */
+#define SPD_EEPROM_ADDRESS     {0x50}
+#define CONFIG_PROG_SDRAM_TLB
+
+/*
+ * I2C
+ */
+#define CONFIG_HARD_I2C                1       /* I2C with hardware support    */
+#undef CONFIG_SOFT_I2C                 /* I2C bit-banged               */
+#define CFG_I2C_SPEED          100000  /* I2C speed and slave address  */
+#define CFG_I2C_SLAVE          0x7F
+#define CONFIG_I2C_CMD_TREE     1
+#define CONFIG_I2C_MULTI_BUS    1
+
+#define CFG_SPD_BUS_NUM         0
+#define IIC1_MCP3021_ADDR      0x4d
+#define IIC1_USB2507_ADDR      0x2c
+#ifdef CONFIG_I2C_MULTI_BUS
+#define CFG_I2C_NOPROBES        {{1, IIC1_USB2507_ADDR}}
+#endif
+#define CFG_I2C_MULTI_EEPROMS
+#define CFG_I2C_EEPROM_ADDR    0x54
+#define CFG_I2C_EEPROM_ADDR_LEN 2
+#define CFG_EEPROM_PAGE_WRITE_ENABLE
+#define CFG_EEPROM_PAGE_WRITE_BITS 5
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 10
+#define CFG_I2C_EEPROM_ADDR_OVERFLOW 0x01
+
+#define CFG_EEPROM_WREN         1
+#define CFG_I2C_BOOT_EEPROM_ADDR 0x52
+
+/*
+ * standard dtt sensor configuration - bottom bit will determine local or
+ * remote sensor of the TMP401
+ */
+#define CONFIG_DTT_SENSORS             { 0, 1 }
+
+/*
+ * The PMC440 uses a TI TMP401 temperature sensor. This part
+ * is basically compatible to the ADM1021 that is supported
+ * by U-Boot.
+ *
+ * - i2c addr 0x4c
+ * - conversion rate 0x02 = 0.25 conversions/second
+ * - ALERT ouput disabled
+ * - local temp sensor enabled, min set to 0 deg, max set to 70 deg
+ * - remote temp sensor enabled, min set to 0 deg, max set to 70 deg
+ */
+#define CONFIG_DTT_ADM1021
+#define CFG_DTT_ADM1021                { { 0x4c, 0x02, 0, 1, 70, 0, 1, 70, 0} }
+
+/*
+ * RTC stuff
+ */
+#define CONFIG_RTC_DS1338
+#define CFG_I2C_RTC_ADDR       0x68
+
+#undef CONFIG_BOOTARGS
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "netdev=eth0\0"                                                 \
+       "ethrotate=no\0"                                                \
+       "hostname=du440\0"                                              \
+       "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
+               "nfsroot=${serverip}:${rootpath}\0"                     \
+       "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"      \
+               ":${hostname}:${netdev}:off panic=1\0"                  \
+       "addtty=setenv bootargs ${bootargs} console=ttyS0,${baudrate}\0"\
+       "flash_self=run ramargs addip addtty optargs;"                  \
+               "bootm ${kernel_addr} ${ramdisk_addr}\0"                \
+       "net_nfs=tftp 200000 ${img};run nfsargs addip addtty optargs;"  \
+               "bootm\0"                                               \
+       "rootpath=/tftpboot/du440/target_root_du440\0"                  \
+       "img=/tftpboot/du440/uImage\0"                                  \
+       "kernel_addr=FFC00000\0"                                        \
+       "ramdisk_addr=FFE00000\0"                                       \
+       "initrd_high=30000000\0"                                        \
+       "load=tftp 100000 /tftpboot/du440/u-boot.bin\0"                 \
+       "update=protect off FFFA0000 FFFFFFFF;era FFFA0000 FFFFFFFF;"   \
+               "cp.b 100000 FFFA0000 60000\0"                          \
+       ""
+#if 0
+#define CONFIG_BOOTCOMMAND     "run flash_self"
+#endif
+
+#define CONFIG_PREBOOT                  /* enable preboot variable      */
+
+#define CONFIG_BOOTDELAY       3       /* autoboot after 5 seconds     */
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
+
+#ifndef __ASSEMBLY__
+int du440_phy_addr(int devnum);
+#endif
+
+#define        CONFIG_IBM_EMAC4_V4     1
+#define CONFIG_MII             1       /* MII PHY management           */
+#define CONFIG_PHY_ADDR                du440_phy_addr(0) /* PHY address        */
+
+#define CONFIG_PHY_RESET        1      /* reset phy upon startup       */
+#define CONFIG_PHY_GIGE                1       /* Include GbE detection        */
+
+#define CONFIG_HAS_ETH0
+#define CFG_RX_ETH_BUFFER      128
+
+#define CONFIG_NET_MULTI       1
+#define CONFIG_HAS_ETH1                1       /* add support for "eth1addr"   */
+#define CONFIG_PHY1_ADDR       du440_phy_addr(1)
+
+/*
+ * USB
+ */
+#define CONFIG_USB_OHCI_NEW
+#define CONFIG_USB_STORAGE
+#define CFG_OHCI_BE_CONTROLLER
+
+#define CFG_USB_OHCI_CPU_INIT  1
+#define CFG_USB_OHCI_REGS_BASE CFG_USB_HOST
+#define CFG_USB_OHCI_SLOT_NAME "du440"
+#define CFG_USB_OHCI_MAX_ROOT_PORTS    15
+
+/* Comment this out to enable USB 1.1 device */
+#define USB_2_0_DEVICE
+
+/* Partitions */
+#define CONFIG_MAC_PARTITION
+#define CONFIG_DOS_PARTITION
+#define CONFIG_ISO_PARTITION
+
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_BSP
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_DTT
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_EEPROM
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_IRQ
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_NFS
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_USB
+#define CONFIG_CMD_REGINFO
+#define CONFIG_CMD_SDRAM
+
+#define CONFIG_SUPPORT_VFAT
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory         */
+#define CFG_PROMPT             "=> "   /* Monitor Command Prompt       */
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE             1024    /* Console I/O Buffer Size      */
+#else
+#define CFG_CBSIZE             256     /* Console I/O Buffer Size      */
+#endif
+/* Print Buffer Size */
+#define CFG_PBSIZE              (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)
+#define CFG_MAXARGS            16      /* max number of command args   */
+#define CFG_BARGSIZE           CFG_CBSIZE /* Boot Argument Buffer Size */
+
+#define CFG_MEMTEST_START      0x00400000 /* memtest works on          */
+#define CFG_MEMTEST_END                0x3f000000 /* 4 ... < 1GB DRAM  */
+
+#define CFG_LOAD_ADDR          0x100000  /* default load address       */
+#define CFG_EXTBDINFO          1       /* To use extended board_into (bd_t) */
+
+#define CFG_HZ                 1000    /* decrementer freq: 1 ms ticks */
+
+#define CONFIG_CMDLINE_EDITING 1       /* add command line history     */
+#define CONFIG_LOOPW            1       /* enable loopw command         */
+#define CONFIG_MX_CYCLIC        1       /* enable mdc/mwc commands      */
+#define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
+#define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
+
+#define CONFIG_AUTOBOOT_KEYED 1
+#define CONFIG_AUTOBOOT_PROMPT "Press SPACE to abort autoboot in %d seconds\n"
+#define CONFIG_AUTOBOOT_DELAY_STR "d"
+#define CONFIG_AUTOBOOT_STOP_STR " "
+
+/*
+ * PCI stuff
+ */
+#define CONFIG_PCI                     /* include pci support          */
+#define CONFIG_PCI_PNP                 /* do (not) pci plug-and-play   */
+#define CONFIG_PCI_SCAN_SHOW           /* show pci devices on startup  */
+#define CFG_PCI_TARGBASE       0x80000000 /* PCIaddr mapped to CFG_PCI_MEMBASE*/
+
+/* Board-specific PCI */
+#define CFG_PCI_TARGET_INIT
+#define CFG_PCI_MASTER_INIT
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization.
+ */
+#define CFG_BOOTMAPSZ          (8 << 20)     /* Initial Memory map for Linux */
+
+/*
+ * External Bus Controller (EBC) Setup
+ */
+#define CFG_FLASH              CFG_FLASH_BASE
+
+#define CFG_CPLD_BASE          0xC0000000
+#define CFG_CPLD_RANGE                 0x00000010
+#define CFG_DUMEM_BASE         0xC0100000
+#define CFG_DUMEM_RANGE        0x00100000
+#define CFG_DUIO_BASE          0xC0200000
+#define CFG_DUIO_RANGE                 0x00010000
+
+#define CFG_NAND0_CS           2               /* NAND chip connected to CSx */
+#define CFG_NAND1_CS           3               /* NAND chip connected to CSx */
+/* Memory Bank 0 (NOR-FLASH) initialization */
+#define CFG_EBC_PB0AP          0x04017200
+#define CFG_EBC_PB0CR          (CFG_FLASH_BASE | 0xda000)
+
+/* Memory Bank 1 (CPLD, 16 bytes needed, but 1MB is minimum) */
+#define CFG_EBC_PB1AP          0x018003c0
+#define CFG_EBC_PB1CR          (CFG_CPLD_BASE | 0x18000)
+
+/* Memory Bank 2 (NAND-FLASH) initialization */
+#define CFG_EBC_PB2AP          0x018003c0
+#define CFG_EBC_PB2CR          (CFG_NAND0_ADDR | 0x1c000)
+
+/* Memory Bank 3 (NAND-FLASH) initialization */
+#define CFG_EBC_PB3AP          0x018003c0
+#define CFG_EBC_PB3CR          (CFG_NAND1_ADDR | 0x1c000)
+
+/* Memory Bank 4 (DUMEM, 1MB) initialization */
+#define CFG_EBC_PB4AP          0x018053c0
+#define CFG_EBC_PB4CR          (CFG_DUMEM_BASE | 0x18000)
+
+/* Memory Bank 5 (DUIO, 64KB needed, but 1MB is minimum) */
+#define CFG_EBC_PB5AP          0x018053c0
+#define CFG_EBC_PB5CR          (CFG_DUIO_BASE | 0x18000)
+
+/*
+ * NAND FLASH
+ */
+#define CFG_MAX_NAND_DEVICE    2
+#define NAND_MAX_CHIPS         CFG_MAX_NAND_DEVICE
+#define CFG_NAND_SELECT_DEVICE  1      /* nand driver supports mutipl. chips */
+#define CFG_NAND_BASE_LIST     {CFG_NAND0_ADDR + CFG_NAND0_CS, \
+                                CFG_NAND1_ADDR + CFG_NAND1_CS}
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02            /* Software reboot */
+
+#if defined(CONFIG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
+#define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
+#endif
+
+#if 0
+#define CONFIG_SHOW_ACTIVITY      1
+#endif
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/M52277EVB.h b/include/configs/M52277EVB.h
new file mode 100644 (file)
index 0000000..ab574d5
--- /dev/null
@@ -0,0 +1,251 @@
+/*
+ * Configuation settings for the Freescale MCF52277 EVB board.
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * board/config.h - configuration options, board specific
+ */
+
+#ifndef _M52277EVB_H
+#define _M52277EVB_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+#define CONFIG_MCF5227x                /* define processor family */
+#define CONFIG_M52277          /* define processor type */
+#define CONFIG_M52277EVB       /* M52277EVB board */
+
+#undef DEBUG
+
+#define CONFIG_MCFUART
+#define CFG_UART_PORT          (0)
+#define CONFIG_BAUDRATE                115200
+#define CFG_BAUDRATE_TABLE     { 9600 , 19200 , 38400 , 57600, 115200 }
+
+#undef CONFIG_WATCHDOG
+
+#define CONFIG_TIMESTAMP       /* Print image info with timestamp */
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+
+/* Command line configuration */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_CACHE
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_FLASH
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_JFFS2
+#define CONFIG_CMD_LOADB
+#define CONFIG_CMD_LOADS
+#define CONFIG_CMD_MEMORY
+#define CONFIG_CMD_MISC
+#undef CONFIG_CMD_NET
+#define CONFIG_CMD_REGINFO
+#undef CONFIG_CMD_USB
+#undef CONFIG_CMD_BMP
+
+#define CONFIG_HOSTNAME                M52277EVB
+#define CONFIG_EXTRA_ENV_SETTINGS              \
+       "inpclk=" MK_STR(CFG_INPUT_CLKSRC) "\0" \
+       "loadaddr=" MK_STR(CFG_LOAD_ADDR) "\0"  \
+       "u-boot=u-boot.bin\0"                   \
+       "load=tftp ${loadaddr) ${u-boot}\0"     \
+       "upd=run load; run prog\0"              \
+       "prog=prot off 0 0x3ffff;"              \
+       "era 0 3ffff;"                          \
+       "cp.b ${loadaddr} 0 ${filesize};"       \
+       "save\0"                                \
+       ""
+
+/* LCD */
+#ifdef CONFIG_CMD_BMP
+#define CONFIG_LCD
+#define CONFIG_SPLASH_SCREEN
+#define CONFIG_LCD_LOGO
+#define CONFIG_SHARP_LQ035Q7DH06
+#endif
+
+/* USB */
+#ifdef CONFIG_CMD_USB
+#define CONFIG_USB_EHCI
+#define CONFIG_USB_STORAGE
+#define CONFIG_DOS_PARTITION
+#define CONFIG_MAC_PARTITION
+#define CONFIG_ISO_PARTITION
+#define CFG_USB_EHCI_REGS_BASE         0xFC0B0000
+#define CFG_USB_EHCI_CPU_INIT
+#endif
+
+/* Realtime clock */
+#define CONFIG_MCFRTC
+#undef RTC_DEBUG
+#define CFG_RTC_OSCILLATOR     (32 * CFG_HZ)
+
+/* Timer */
+#define CONFIG_MCFTMR
+#undef CONFIG_MCFPIT
+
+/* I2c */
+#define CONFIG_FSL_I2C
+#define CONFIG_HARD_I2C                /* I2C with hardware support */
+#undef CONFIG_SOFT_I2C         /* I2C bit-banged               */
+#define CFG_I2C_SPEED          80000   /* I2C speed and slave address  */
+#define CFG_I2C_SLAVE          0x7F
+#define CFG_I2C_OFFSET         0x58000
+#define CFG_IMMR               CFG_MBAR
+
+/* Input, PCI, Flexbus, and VCO */
+#define CONFIG_EXTRA_CLOCK
+
+#define CFG_INPUT_CLKSRC       16000000
+
+#define CONFIG_PRAM            512     /* 512 KB */
+
+#define CFG_PROMPT             "-> "
+#define CFG_LONGHELP           /* undef to save memory */
+
+#if defined(CONFIG_CMD_KGDB)
+#define CFG_CBSIZE             1024    /* Console I/O Buffer Size */
+#else
+#define CFG_CBSIZE             256     /* Console I/O Buffer Size */
+#endif
+#define CFG_PBSIZE             (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)      /* Print Buffer Size */
+#define CFG_MAXARGS            16      /* max number of command args */
+#define CFG_BARGSIZE           CFG_CBSIZE      /* Boot Argument Buffer Size    */
+
+#define CFG_LOAD_ADDR          (CFG_SDRAM_BASE + 0x10000)
+
+#define CFG_HZ                 1000
+
+#define CFG_MBAR               0xFC000000
+
+/*
+ * Low Level Configuration Settings
+ * (address mappings, register initial values, etc.)
+ * You should know what you are doing if you make changes here.
+ */
+
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in DPRAM)
+ */
+#define CFG_INIT_RAM_ADDR      0x80000000
+#define CFG_INIT_RAM_END       0x8000  /* End of used area in internal SRAM */
+#define CFG_INIT_RAM_CTRL      0x21
+#define CFG_GBL_DATA_SIZE      128     /* size in bytes reserved for initial data */
+#define CFG_GBL_DATA_OFFSET    ((CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) - 16)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+/*-----------------------------------------------------------------------
+ * Start addresses for the final memory configuration
+ * (Set up by the startup code)
+ * Please note that CFG_SDRAM_BASE _must_ start at 0
+ */
+#define CFG_SDRAM_BASE         0x40000000
+#define CFG_SDRAM_SIZE         64      /* SDRAM size in MB */
+#define CFG_SDRAM_CFG1         0x43711630
+#define CFG_SDRAM_CFG2         0x56670000
+#define CFG_SDRAM_CTRL         0xE1092000
+#define CFG_SDRAM_EMOD         0x81810000
+#define CFG_SDRAM_MODE         0x00CD0000
+
+#define CFG_MEMTEST_START      CFG_SDRAM_BASE + 0x400
+#define CFG_MEMTEST_END                ((CFG_SDRAM_SIZE - 3) << 20)
+
+#define CFG_MONITOR_BASE       (CFG_FLASH_BASE + 0x400)
+#define CFG_BOOTPARAMS_LEN     64*1024
+#define CFG_MONITOR_LEN                (256 << 10)     /* Reserve 256 kB for Monitor */
+#define CFG_MALLOC_LEN         (128 << 10)     /* Reserve 128 kB for malloc() */
+
+/* Initial Memory map for Linux */
+#define CFG_BOOTMAPSZ          (CFG_SDRAM_BASE + (CFG_SDRAM_SIZE << 20))
+
+/* Configuration for environment
+ * Environment is embedded in u-boot in the second sector of the flash
+ */
+#define CFG_ENV_IS_IN_FLASH    1
+#define CONFIG_ENV_OVERWRITE   1
+#undef CFG_ENV_IS_EMBEDDED
+
+/*-----------------------------------------------------------------------
+ * FLASH organization
+ */
+#define CFG_FLASH_BASE         CFG_CS0_BASE
+#define CFG_FLASH0_BASE                CFG_CS0_BASE
+#define CFG_ENV_ADDR           (CFG_FLASH_BASE + 0x8000)
+#define CFG_ENV_SECT_SIZE      0x8000
+
+#define CFG_FLASH_CFI
+#ifdef CFG_FLASH_CFI
+
+#      define CFG_FLASH_CFI_DRIVER     1
+#      define CFG_FLASH_SIZE           0x1000000       /* Max size that the board might have */
+#      define CFG_FLASH_CFI_WIDTH      FLASH_CFI_16BIT
+#      define CFG_MAX_FLASH_BANKS      1       /* max number of memory banks */
+#      define CFG_MAX_FLASH_SECT       137     /* max number of sectors on one chip */
+#      define CFG_FLASH_PROTECTION     /* "Real" (hardware) sectors protection */
+#      define CFG_FLASH_CHECKSUM
+#endif
+
+/*
+ * This is setting for JFFS2 support in u-boot.
+ * NOTE: Enable CONFIG_CMD_JFFS2 for JFFS2 support.
+ */
+#ifdef CONFIG_CMD_JFFS2
+#      define CONFIG_JFFS2_DEV         "nor0"
+#      define CONFIG_JFFS2_PART_SIZE   (0x01000000 - 0x40000)
+#      define CONFIG_JFFS2_PART_OFFSET (CFG_FLASH0_BASE + 0x40000)
+#endif
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_CACHELINE_SIZE             16
+
+/*-----------------------------------------------------------------------
+ * Memory bank definitions
+ */
+/*
+ * CS0 - NOR Flash
+ * CS1 - Available
+ * CS2 - Available
+ * CS3 - Available
+ * CS4 - Available
+ * CS5 - Available
+ */
+
+#define CFG_CS0_BASE           0x00000000
+#define CFG_CS0_MASK           0x00FF0001
+#define CFG_CS0_CTRL           0x00001FA0
+
+#endif                         /* _M52277EVB_H */
index 47d74a3c37a3179ce75a8505121207f76a39d6e9..e95673902a429e64c1eddb3547a66d1bb9b59639 100644 (file)
 
 #ifdef NANDFLASH_SIZE
 #      define CFG_MAX_NAND_DEVICE      1
-#      define CFG_NAND_BASE            (CFG_CS2_BASE << 16)
+#      define CFG_NAND_BASE            CFG_CS2_BASE
 #      define CFG_NAND_SIZE            1
 #      define CFG_NAND_BASE_LIST       { CFG_NAND_BASE }
 #      define NAND_MAX_CHIPS           1
 #      define CONFIG_JFFS2_PART_OFFSET 0x00000000
 #endif
 
-#define CFG_FLASH_BASE         (CFG_CS0_BASE << 16)
+#define CFG_FLASH_BASE         CFG_CS0_BASE
 
 /* Configuration for environment
  * Environment is embedded in u-boot in the second sector of the flash
 #define CFG_CS0_MASK           0x007f0001
 #define CFG_CS0_CTRL           0x00001fa0
 
-#define CFG_CS1_BASE           0x1000
+#define CFG_CS1_BASE           0x10000000
 #define CFG_CS1_MASK           0x001f0001
 #define CFG_CS1_CTRL           0x002A3780
 
 #ifdef NANDFLASH_SIZE
-#define CFG_CS2_BASE           0x2000
+#define CFG_CS2_BASE           0x20000000
 #define CFG_CS2_MASK           ((NANDFLASH_SIZE << 20) | 1)
 #define CFG_CS2_CTRL           0x00001f60
 #endif
diff --git a/include/configs/M5373EVB.h b/include/configs/M5373EVB.h
new file mode 100644 (file)
index 0000000..6bfffa1
--- /dev/null
@@ -0,0 +1,267 @@
+/*
+ * Configuation settings for the Freescale MCF5373 FireEngine board.
+ *
+ * Copyright (C) 2004-2007 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * board/config.h - configuration options, board specific
+ */
+
+#ifndef _M5373EVB_H
+#define _M5373EVB_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+#define CONFIG_MCF532x         /* define processor family */
+#define CONFIG_M5373           /* define processor type */
+
+#undef DEBUG
+
+#define CONFIG_MCFUART
+#define CFG_UART_PORT          (0)
+#define CONFIG_BAUDRATE                115200
+#define CFG_BAUDRATE_TABLE     { 9600 , 19200 , 38400 , 57600, 115200 }
+
+#undef CONFIG_WATCHDOG
+#define CONFIG_WATCHDOG_TIMEOUT        3360    /* timeout in ms, max is 3.36 sec */
+
+/* Command line configuration */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_CACHE
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_FLASH
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MEMORY
+#define CONFIG_CMD_MISC
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_REGINFO
+
+#ifdef NANDFLASH_SIZE
+#      define CONFIG_CMD_NAND
+#endif
+
+#define CFG_UNIFY_CACHE
+
+#define CONFIG_MCFFEC
+#ifdef CONFIG_MCFFEC
+#      define CONFIG_NET_MULTI         1
+#      define CONFIG_MII               1
+#      define CFG_DISCOVER_PHY
+#      define CFG_RX_ETH_BUFFER        8
+#      define CFG_FAULT_ECHO_LINK_DOWN
+
+#      define CFG_FEC0_PINMUX          0
+#      define CFG_FEC0_MIIBASE         CFG_FEC0_IOBASE
+#      define MCFFEC_TOUT_LOOP         50000
+/* If CFG_DISCOVER_PHY is not defined - hardcoded */
+#      ifndef CFG_DISCOVER_PHY
+#              define FECDUPLEX        FULL
+#              define FECSPEED         _100BASET
+#      else
+#              ifndef CFG_FAULT_ECHO_LINK_DOWN
+#                      define CFG_FAULT_ECHO_LINK_DOWN
+#              endif
+#      endif                   /* CFG_DISCOVER_PHY */
+#endif
+
+#define CONFIG_MCFRTC
+#undef RTC_DEBUG
+
+/* Timer */
+#define CONFIG_MCFTMR
+#undef CONFIG_MCFPIT
+
+/* I2C */
+#define CONFIG_FSL_I2C
+#define CONFIG_HARD_I2C                /* I2C with hw support */
+#undef CONFIG_SOFT_I2C         /* I2C bit-banged */
+#define CFG_I2C_SPEED          80000
+#define CFG_I2C_SLAVE          0x7F
+#define CFG_I2C_OFFSET         0x58000
+#define CFG_IMMR               CFG_MBAR
+
+#define CONFIG_BOOTDELAY       1       /* autoboot after 5 seconds */
+#define CONFIG_UDP_CHECKSUM
+
+#ifdef CONFIG_MCFFEC
+#      define CONFIG_ETHADDR   00:e0:0c:bc:e5:60
+#      define CONFIG_IPADDR    192.162.1.2
+#      define CONFIG_NETMASK   255.255.255.0
+#      define CONFIG_SERVERIP  192.162.1.1
+#      define CONFIG_GATEWAYIP 192.162.1.1
+#      define CONFIG_OVERWRITE_ETHADDR_ONCE
+#endif                         /* FEC_ENET */
+
+#define CONFIG_HOSTNAME                M5373EVB
+#define CONFIG_EXTRA_ENV_SETTINGS                                      \
+       "netdev=eth0\0"                 \
+       "loadaddr=" MK_STR(CFG_LOAD_ADDR) "\0"  \
+       "u-boot=u-boot.bin\0"   \
+       "load=tftp ${loadaddr) ${u-boot}\0"     \
+       "upd=run load; run prog\0"      \
+       "prog=prot off 0 2ffff;"        \
+       "era 0 2ffff;"  \
+       "cp.b ${loadaddr} 0 ${filesize};"       \
+       "save\0"        \
+       ""
+
+#define CONFIG_PRAM            512     /* 512 KB */
+#define CFG_PROMPT             "-> "
+#define CFG_LONGHELP           /* undef to save memory */
+
+#ifdef CONFIG_CMD_KGDB
+#      define CFG_CBSIZE       1024    /* Console I/O Buffer Size */
+#else
+#      define CFG_CBSIZE       256     /* Console I/O Buffer Size */
+#endif
+
+#define CFG_PBSIZE                     (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)      /* Print Buffer Size */
+#define CFG_MAXARGS            16      /* max number of command args */
+#define CFG_BARGSIZE           CFG_CBSIZE      /* Boot Argument Buffer Size    */
+#define CFG_LOAD_ADDR          0x40010000
+
+#define CFG_HZ                 1000
+#define CFG_CLK                        80000000
+#define CFG_CPU_CLK            CFG_CLK * 3
+
+#define CFG_MBAR               0xFC000000
+
+#define CFG_LATCH_ADDR         (CFG_CS1_BASE + 0x80000)
+
+/*
+ * Low Level Configuration Settings
+ * (address mappings, register initial values, etc.)
+ * You should know what you are doing if you make changes here.
+ */
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in DPRAM)
+ */
+#define CFG_INIT_RAM_ADDR      0x80000000
+#define CFG_INIT_RAM_END       0x8000  /* End of used area in internal SRAM */
+#define CFG_INIT_RAM_CTRL      0x221
+#define CFG_GBL_DATA_SIZE      128     /* size in bytes reserved for initial data */
+#define CFG_GBL_DATA_OFFSET    ((CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) - 0x10)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+/*-----------------------------------------------------------------------
+ * Start addresses for the final memory configuration
+ * (Set up by the startup code)
+ * Please note that CFG_SDRAM_BASE _must_ start at 0
+ */
+#define CFG_SDRAM_BASE         0x40000000
+#define CFG_SDRAM_SIZE         32      /* SDRAM size in MB */
+#define CFG_SDRAM_CFG1         0x53722730
+#define CFG_SDRAM_CFG2         0x56670000
+#define CFG_SDRAM_CTRL         0xE1092000
+#define CFG_SDRAM_EMOD         0x40010000
+#define CFG_SDRAM_MODE         0x018D0000
+
+#define CFG_MEMTEST_START      CFG_SDRAM_BASE + 0x400
+#define CFG_MEMTEST_END                ((CFG_SDRAM_SIZE - 3) << 20)
+
+#define CFG_MONITOR_BASE       (CFG_FLASH_BASE + 0x400)
+#define CFG_MONITOR_LEN                (256 << 10)     /* Reserve 256 kB for Monitor */
+
+#define CFG_BOOTPARAMS_LEN     64*1024
+#define CFG_MALLOC_LEN         (128 << 10)     /* Reserve 128 kB for malloc() */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization ??
+ */
+#define CFG_BOOTMAPSZ          (CFG_SDRAM_BASE + (CFG_SDRAM_SIZE << 20))
+
+/*-----------------------------------------------------------------------
+ * FLASH organization
+ */
+#define CFG_FLASH_CFI
+#ifdef CFG_FLASH_CFI
+#      define CFG_FLASH_CFI_DRIVER     1
+#      define CFG_FLASH_SIZE           0x800000        /* Max size that the board might have */
+#      define CFG_FLASH_CFI_WIDTH      FLASH_CFI_16BIT
+#      define CFG_MAX_FLASH_BANKS      1       /* max number of memory banks */
+#      define CFG_MAX_FLASH_SECT       137     /* max number of sectors on one chip */
+#      define CFG_FLASH_PROTECTION     /* "Real" (hardware) sectors protection */
+#endif
+
+#ifdef NANDFLASH_SIZE
+#      define CFG_MAX_NAND_DEVICE      1
+#      define CFG_NAND_BASE            CFG_CS2_BASE
+#      define CFG_NAND_SIZE            1
+#      define CFG_NAND_BASE_LIST       { CFG_NAND_BASE }
+#      define NAND_MAX_CHIPS           1
+#      define NAND_ALLOW_ERASE_ALL     1
+#      define CONFIG_JFFS2_NAND        1
+#      define CONFIG_JFFS2_DEV         "nand0"
+#      define CONFIG_JFFS2_PART_SIZE   (CFG_CS2_MASK & ~1)
+#      define CONFIG_JFFS2_PART_OFFSET 0x00000000
+#endif
+
+#define CFG_FLASH_BASE         CFG_CS0_BASE
+
+/* Configuration for environment
+ * Environment is embedded in u-boot in the second sector of the flash
+ */
+#define CFG_ENV_OFFSET         0x4000
+#define CFG_ENV_SECT_SIZE      0x2000
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_IS_EMBEDDED    1
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_CACHELINE_SIZE     16
+
+/*-----------------------------------------------------------------------
+ * Chipselect bank definitions
+ */
+/*
+ * CS0 - NOR Flash 1, 2, 4, or 8MB
+ * CS1 - CompactFlash and registers
+ * CS2 - NAND Flash 16, 32, or 64MB
+ * CS3 - Available
+ * CS4 - Available
+ * CS5 - Available
+ */
+#define CFG_CS0_BASE           0
+#define CFG_CS0_MASK           0x007f0001
+#define CFG_CS0_CTRL           0x00001fa0
+
+#define CFG_CS1_BASE           0x10000000
+#define CFG_CS1_MASK           0x001f0001
+#define CFG_CS1_CTRL           0x002A3780
+
+#ifdef NANDFLASH_SIZE
+#define CFG_CS2_BASE           0x20000000
+#define CFG_CS2_MASK           ((NANDFLASH_SIZE << 20) | 1)
+#define CFG_CS2_CTRL           0x00001f60
+#endif
+
+#endif                         /* _M5373EVB_H */
index 211f11d604633737e99d2dc5184b4b08df12d075..581c794cd40b42c943d67a0c9ed2e085fb888044 100644 (file)
 /* PCI */
 #ifdef CONFIG_CMD_PCI
 #define CONFIG_PCI             1
+#define CONFIG_PCI_PNP         1
+#define CONFIG_SKIPPCI_HOSTBRIDGE
+
+#define CFG_PCI_CACHE_LINE_SIZE        4
 
 #define CFG_PCI_MEM_BUS                0xA0000000
 #define CFG_PCI_MEM_PHYS       CFG_PCI_MEM_BUS
 
 /* FPGA - Spartan 2 */
 /* experiment
-#define CONFIG_FPGA
-#define CONFIG_FPGA_XILINX
-#define CONFIG_FPGA_SPARTAN3
+#define CONFIG_FPGA            CFG_SPARTAN3
 #define CONFIG_FPGA_COUNT      1
 #define CFG_FPGA_PROG_FEEDBACK
 #define CFG_FPGA_CHECK_CTRLC
 #      define CFG_ENV_ADDR             (CFG_FLASH_BASE + 0x4000)
 #      define CFG_ENV_SECT_SIZE        0x2000
 #else
-#      define CFG_FLASH_BASE           CFG_FLASH0_BASE
-#      define CFG_FLASH0_BASE          CFG_CS1_BASE
-#      define CFG_FLASH1_BASE          CFG_CS0_BASE
+#      define CFG_FLASH_BASE           CFG_CS0_BASE
+#      define CFG_FLASH0_BASE          CFG_CS0_BASE
+#      define CFG_FLASH1_BASE          CFG_CS1_BASE
 #      define CFG_ENV_ADDR             (CFG_FLASH_BASE + 0x60000)
 #      define CFG_ENV_SECT_SIZE        0x20000
 #endif
diff --git a/include/configs/M5475EVB.h b/include/configs/M5475EVB.h
new file mode 100644 (file)
index 0000000..84c2105
--- /dev/null
@@ -0,0 +1,311 @@
+/*
+ * Configuation settings for the Freescale MCF5475 board.
+ *
+ * Copyright (C) 2004-2008 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * board/config.h - configuration options, board specific
+ */
+
+#ifndef _M5475EVB_H
+#define _M5475EVB_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+#define CONFIG_MCF547x_8x      /* define processor family */
+#define CONFIG_M547x           /* define processor type */
+#define CONFIG_M5475           /* define processor type */
+
+#undef DEBUG
+
+#define CONFIG_MCFUART
+#define CFG_UART_PORT          (0)
+#define CONFIG_BAUDRATE                115200
+#define CFG_BAUDRATE_TABLE     { 9600 , 19200 , 38400 , 57600, 115200 }
+
+#define CONFIG_HW_WATCHDOG
+#define CONFIG_WATCHDOG_TIMEOUT        5000    /* timeout in milliseconds, max timeout is 6.71sec */
+
+/* Command line configuration */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_CACHE
+#undef CONFIG_CMD_DATE
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_FLASH
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MEMORY
+#define CONFIG_CMD_MISC
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_REGINFO
+#define CONFIG_CMD_USB
+
+#define CONFIG_SLTTMR
+
+#define CONFIG_FSLDMAFEC
+#ifdef CONFIG_FSLDMAFEC
+#      define CONFIG_NET_MULTI         1
+#      define CONFIG_MII               1
+#      define CONFIG_HAS_ETH1
+
+#      define CFG_DISCOVER_PHY
+#      define CFG_RX_ETH_BUFFER        32
+#      define CFG_TX_ETH_BUFFER        48
+#      define CFG_FAULT_ECHO_LINK_DOWN
+
+#      define CFG_FEC0_PINMUX          0
+#      define CFG_FEC0_MIIBASE         CFG_FEC0_IOBASE
+#      define CFG_FEC1_PINMUX          0
+#      define CFG_FEC1_MIIBASE         CFG_FEC0_IOBASE
+
+#      define MCFFEC_TOUT_LOOP         50000
+/* If CFG_DISCOVER_PHY is not defined - hardcoded */
+#      ifndef CFG_DISCOVER_PHY
+#              define FECDUPLEX        FULL
+#              define FECSPEED         _100BASET
+#      else
+#              ifndef CFG_FAULT_ECHO_LINK_DOWN
+#                      define CFG_FAULT_ECHO_LINK_DOWN
+#              endif
+#      endif                   /* CFG_DISCOVER_PHY */
+
+#      define CONFIG_ETHADDR   00:e0:0c:bc:e5:60
+#      define CONFIG_ETH1ADDR  00:e0:0c:bc:e5:61
+#      define CONFIG_IPADDR    192.162.1.2
+#      define CONFIG_NETMASK   255.255.255.0
+#      define CONFIG_SERVERIP  192.162.1.1
+#      define CONFIG_GATEWAYIP 192.162.1.1
+#      define CONFIG_OVERWRITE_ETHADDR_ONCE
+
+#endif
+
+#ifdef CONFIG_CMD_USB
+#      define CONFIG_USB_OHCI_NEW
+#      define CONFIG_USB_STORAGE
+
+#      ifndef CONFIG_CMD_PCI
+#              define CONFIG_CMD_PCI
+#      endif
+#      define CONFIG_PCI_OHCI
+#      define CONFIG_DOS_PARTITION
+
+#      undef CFG_USB_OHCI_BOARD_INIT
+#      undef CFG_USB_OHCI_CPU_INIT
+#      define CFG_USB_OHCI_MAX_ROOT_PORTS      15
+#      define CFG_USB_OHCI_SLOT_NAME           "isp1561"
+#      define CFG_OHCI_SWAP_REG_ACCESS
+#endif
+
+/* I2C */
+#define CONFIG_FSL_I2C
+#define CONFIG_HARD_I2C                /* I2C with hw support */
+#undef CONFIG_SOFT_I2C         /* I2C bit-banged */
+#define CFG_I2C_SPEED          80000
+#define CFG_I2C_SLAVE          0x7F
+#define CFG_I2C_OFFSET         0x00008F00
+#define CFG_IMMR               CFG_MBAR
+
+/* PCI */
+#ifdef CONFIG_CMD_PCI
+#define CONFIG_PCI             1
+#define CONFIG_PCI_PNP         1
+#define CONFIG_SKIPPCI_HOSTBRIDGE
+
+#define CFG_PCI_CACHE_LINE_SIZE        8
+
+#define CFG_PCI_MEM_BUS                0x80000000
+#define CFG_PCI_MEM_PHYS       CFG_PCI_MEM_BUS
+#define CFG_PCI_MEM_SIZE       0x10000000
+
+#define CFG_PCI_IO_BUS         0x71000000
+#define CFG_PCI_IO_PHYS                CFG_PCI_IO_BUS
+#define CFG_PCI_IO_SIZE                0x01000000
+
+#define CFG_PCI_CFG_BUS                0x70000000
+#define CFG_PCI_CFG_PHYS       CFG_PCI_CFG_BUS
+#define CFG_PCI_CFG_SIZE       0x01000000
+#endif
+
+#define CONFIG_BOOTDELAY       1       /* autoboot after 5 seconds */
+#define CONFIG_UDP_CHECKSUM
+
+#ifdef CONFIG_MCFFEC
+#      define CONFIG_ETHADDR   00:e0:0c:bc:e5:60
+#      define CONFIG_IPADDR    192.162.1.2
+#      define CONFIG_NETMASK   255.255.255.0
+#      define CONFIG_SERVERIP  192.162.1.1
+#      define CONFIG_GATEWAYIP 192.162.1.1
+#      define CONFIG_OVERWRITE_ETHADDR_ONCE
+#endif                         /* FEC_ENET */
+
+#define CONFIG_HOSTNAME                M547xEVB
+#define CONFIG_EXTRA_ENV_SETTINGS              \
+       "netdev=eth0\0"                         \
+       "loadaddr=10000\0"                      \
+       "u-boot=u-boot.bin\0"                   \
+       "load=tftp ${loadaddr) ${u-boot}\0"     \
+       "upd=run load; run prog\0"              \
+       "prog=prot off bank 1;"                 \
+       "era ff800000 ff82ffff;"                \
+       "cp.b ${loadaddr} ff800000 ${filesize};"\
+       "save\0"                                \
+       ""
+
+#define CONFIG_PRAM            512     /* 512 KB */
+#define CFG_PROMPT             "-> "
+#define CFG_LONGHELP           /* undef to save memory */
+
+#ifdef CONFIG_CMD_KGDB
+#      define CFG_CBSIZE       1024    /* Console I/O Buffer Size */
+#else
+#      define CFG_CBSIZE       256     /* Console I/O Buffer Size */
+#endif
+
+#define CFG_PBSIZE             (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)      /* Print Buffer Size */
+#define CFG_MAXARGS            16      /* max number of command args */
+#define CFG_BARGSIZE           CFG_CBSIZE      /* Boot Argument Buffer Size    */
+#define CFG_LOAD_ADDR          0x00010000
+
+#define CFG_HZ                 1000
+#define CFG_CLK                        CFG_BUSCLK
+#define CFG_CPU_CLK            CFG_CLK * 2
+
+#define CFG_MBAR               0xF0000000
+#define CFG_INTSRAM            (CFG_MBAR + 0x10000)
+#define CFG_INTSRAMSZ          0x8000
+
+/*#define CFG_LATCH_ADDR               (CFG_CS1_BASE + 0x80000)*/
+
+/*
+ * Low Level Configuration Settings
+ * (address mappings, register initial values, etc.)
+ * You should know what you are doing if you make changes here.
+ */
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in DPRAM)
+ */
+#define CFG_INIT_RAM_ADDR      0xF2000000
+#define CFG_INIT_RAM_END       0x1000  /* End of used area in internal SRAM */
+#define CFG_INIT_RAM_CTRL      0x21
+#define CFG_INIT_RAM1_ADDR     (CFG_INIT_RAM_ADDR + CFG_INIT_RAM_END)
+#define CFG_INIT_RAM1_END      0x1000  /* End of used area in internal SRAM */
+#define CFG_INIT_RAM1_CTRL     0x21
+#define CFG_GBL_DATA_SIZE      128     /* size in bytes reserved for initial data */
+#define CFG_GBL_DATA_OFFSET    ((CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) - 0x10)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+/*-----------------------------------------------------------------------
+ * Start addresses for the final memory configuration
+ * (Set up by the startup code)
+ * Please note that CFG_SDRAM_BASE _must_ start at 0
+ */
+#define CFG_SDRAM_BASE         0x00000000
+#define CFG_SDRAM_CFG1         0x73711630
+#define CFG_SDRAM_CFG2         0x46370000
+#define CFG_SDRAM_CTRL         0xE10B0000
+#define CFG_SDRAM_EMOD         0x40010000
+#define CFG_SDRAM_MODE         0x018D0000
+#define CFG_SDRAM_DRVSTRENGTH  0x000002AA
+#ifdef CFG_DRAMSZ1
+#      define CFG_SDRAM_SIZE   (CFG_DRAMSZ + CFG_DRAMSZ1)
+#else
+#      define CFG_SDRAM_SIZE   CFG_DRAMSZ
+#endif
+
+#define CFG_MEMTEST_START      CFG_SDRAM_BASE + 0x400
+#define CFG_MEMTEST_END                ((CFG_SDRAM_SIZE - 3) << 20)
+
+#define CFG_MONITOR_BASE       (CFG_FLASH_BASE + 0x400)
+#define CFG_MONITOR_LEN                (256 << 10)     /* Reserve 256 kB for Monitor */
+
+#define CFG_BOOTPARAMS_LEN     64*1024
+#define CFG_MALLOC_LEN         (128 << 10)     /* Reserve 128 kB for malloc() */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization ??
+ */
+#define CFG_BOOTMAPSZ          (CFG_SDRAM_BASE + (CFG_SDRAM_SIZE << 20))
+
+/*-----------------------------------------------------------------------
+ * FLASH organization
+ */
+#define CFG_FLASH_CFI
+#ifdef CFG_FLASH_CFI
+#      define CFG_FLASH_BASE           (CFG_CS0_BASE)
+#      define CFG_FLASH_CFI_DRIVER     1
+#      define CFG_FLASH_CFI_WIDTH      FLASH_CFI_16BIT
+#      define CFG_MAX_FLASH_SECT       137     /* max number of sectors on one chip */
+#      define CFG_FLASH_PROTECTION     /* "Real" (hardware) sectors protection */
+#      define CFG_FLASH_USE_BUFFER_WRITE
+#ifdef CFG_NOR1SZ
+#      define CFG_MAX_FLASH_BANKS      2       /* max number of memory banks */
+#      define CFG_FLASH_SIZE           ((CFG_NOR1SZ + CFG_BOOTSZ) << 20)
+#      define CFG_FLASH_BANKS_LIST     { CFG_CS0_BASE, CFG_CS1_BASE }
+#else
+#      define CFG_MAX_FLASH_BANKS      1       /* max number of memory banks */
+#      define CFG_FLASH_SIZE           (CFG_BOOTSZ << 20)
+#endif
+#endif
+
+/* Configuration for environment
+ * Environment is embedded in u-boot in the second sector of the flash
+ */
+#define CFG_ENV_OFFSET         0x2000
+#define CFG_ENV_SECT_SIZE      0x2000
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_IS_EMBEDDED    1
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_CACHELINE_SIZE     16
+
+/*-----------------------------------------------------------------------
+ * Chipselect bank definitions
+ */
+/*
+ * CS0 - NOR Flash 1, 2, 4, or 8MB
+ * CS1 - NOR Flash
+ * CS2 - Available
+ * CS3 - Available
+ * CS4 - Available
+ * CS5 - Available
+ */
+#define CFG_CS0_BASE           0xFF800000
+#define CFG_CS0_MASK           (((CFG_BOOTSZ << 20) - 1) & 0xFFFF0001)
+#define CFG_CS0_CTRL           0x00101980
+
+#ifdef CFG_NOR1SZ
+#define CFG_CS1_BASE           0xF8000000
+#define CFG_CS1_MASK           (((CFG_NOR1SZ << 20) - 1) & 0xFFFF0001)
+#define CFG_CS1_CTRL           0x00000D80
+#endif
+
+#endif                         /* _M5475EVB_H */
diff --git a/include/configs/M5485EVB.h b/include/configs/M5485EVB.h
new file mode 100644 (file)
index 0000000..e9e5ee9
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+ * Configuation settings for the Freescale MCF5485 FireEngine board.
+ *
+ * Copyright (C) 2004-2008 Freescale Semiconductor, Inc.
+ * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * board/config.h - configuration options, board specific
+ */
+
+#ifndef _M5485EVB_H
+#define _M5485EVB_H
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+#define CONFIG_MCF547x_8x      /* define processor family */
+#define CONFIG_M548x           /* define processor type */
+#define CONFIG_M5485           /* define processor type */
+
+#undef DEBUG
+
+#define CONFIG_MCFUART
+#define CFG_UART_PORT          (0)
+#define CONFIG_BAUDRATE                115200
+#define CFG_BAUDRATE_TABLE     { 9600 , 19200 , 38400 , 57600, 115200 }
+
+#define CONFIG_HW_WATCHDOG
+#define CONFIG_WATCHDOG_TIMEOUT        5000    /* timeout in milliseconds, max timeout is 6.71sec */
+
+/* Command line configuration */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_CACHE
+#undef CONFIG_CMD_DATE
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_FLASH
+#define CONFIG_CMD_I2C
+#define CONFIG_CMD_MEMORY
+#define CONFIG_CMD_MISC
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NET
+#define CONFIG_CMD_PCI
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_REGINFO
+#define CONFIG_CMD_USB
+
+#define CONFIG_SLTTMR
+
+#define CONFIG_FSLDMAFEC
+#ifdef CONFIG_FSLDMAFEC
+#      define CONFIG_NET_MULTI         1
+#      define CONFIG_MII               1
+#      define CONFIG_HAS_ETH1
+
+#      define CFG_DISCOVER_PHY
+#      define CFG_RX_ETH_BUFFER        32
+#      define CFG_TX_ETH_BUFFER        48
+#      define CFG_FAULT_ECHO_LINK_DOWN
+
+#      define CFG_FEC0_PINMUX          0
+#      define CFG_FEC0_MIIBASE         CFG_FEC0_IOBASE
+#      define CFG_FEC1_PINMUX          0
+#      define CFG_FEC1_MIIBASE         CFG_FEC0_IOBASE
+
+#      define MCFFEC_TOUT_LOOP         50000
+/* If CFG_DISCOVER_PHY is not defined - hardcoded */
+#      ifndef CFG_DISCOVER_PHY
+#              define FECDUPLEX        FULL
+#              define FECSPEED         _100BASET
+#      else
+#              ifndef CFG_FAULT_ECHO_LINK_DOWN
+#                      define CFG_FAULT_ECHO_LINK_DOWN
+#              endif
+#      endif                   /* CFG_DISCOVER_PHY */
+
+#      define CONFIG_ETHADDR   00:e0:0c:bc:e5:60
+#      define CONFIG_ETH1ADDR  00:e0:0c:bc:e5:61
+#      define CONFIG_IPADDR    192.162.1.2
+#      define CONFIG_NETMASK   255.255.255.0
+#      define CONFIG_SERVERIP  192.162.1.1
+#      define CONFIG_GATEWAYIP 192.162.1.1
+#      define CONFIG_OVERWRITE_ETHADDR_ONCE
+
+#endif
+
+#ifdef CONFIG_CMD_USB
+#      define CONFIG_USB_STORAGE
+#      define CONFIG_DOS_PARTITION
+#      define CONFIG_USB_OHCI_NEW
+#      ifndef CONFIG_CMD_PCI
+#              define CONFIG_CMD_PCI
+#      endif
+/*#    define CONFIG_PCI_OHCI*/
+#      define CFG_USB_OHCI_REGS_BASE           0x80041000
+#      define CFG_USB_OHCI_MAX_ROOT_PORTS      15
+#      define CFG_USB_OHCI_SLOT_NAME           "isp1561"
+#      define CFG_OHCI_SWAP_REG_ACCESS
+#endif
+
+/* I2C */
+#define CONFIG_FSL_I2C
+#define CONFIG_HARD_I2C                /* I2C with hw support */
+#undef CONFIG_SOFT_I2C         /* I2C bit-banged */
+#define CFG_I2C_SPEED          80000
+#define CFG_I2C_SLAVE          0x7F
+#define CFG_I2C_OFFSET         0x00008F00
+#define CFG_IMMR               CFG_MBAR
+
+/* PCI */
+#ifdef CONFIG_CMD_PCI
+#define CONFIG_PCI             1
+#define CONFIG_PCI_PNP         1
+
+#define CFG_PCI_MEM_BUS                0x80000000
+#define CFG_PCI_MEM_PHYS       CFG_PCI_MEM_BUS
+#define CFG_PCI_MEM_SIZE       0x10000000
+
+#define CFG_PCI_IO_BUS         0x71000000
+#define CFG_PCI_IO_PHYS                CFG_PCI_IO_BUS
+#define CFG_PCI_IO_SIZE                0x01000000
+
+#define CFG_PCI_CFG_BUS                0x70000000
+#define CFG_PCI_CFG_PHYS       CFG_PCI_CFG_BUS
+#define CFG_PCI_CFG_SIZE       0x01000000
+#endif
+
+#define CONFIG_BOOTDELAY       1       /* autoboot after 5 seconds */
+#define CONFIG_UDP_CHECKSUM
+
+#define CONFIG_HOSTNAME                M548xEVB
+#define CONFIG_EXTRA_ENV_SETTINGS              \
+       "netdev=eth0\0"                         \
+       "loadaddr=10000\0"                      \
+       "u-boot=u-boot.bin\0"                   \
+       "load=tftp ${loadaddr) ${u-boot}\0"     \
+       "upd=run load; run prog\0"              \
+       "prog=prot off bank 1;"                 \
+       "era ff800000 ff82ffff;"                \
+       "cp.b ${loadaddr} ff800000 ${filesize};"\
+       "save\0"                                \
+       ""
+
+#define CONFIG_PRAM            512     /* 512 KB */
+#define CFG_PROMPT             "-> "
+#define CFG_LONGHELP           /* undef to save memory */
+
+#ifdef CONFIG_CMD_KGDB
+#      define CFG_CBSIZE       1024    /* Console I/O Buffer Size */
+#else
+#      define CFG_CBSIZE       256     /* Console I/O Buffer Size */
+#endif
+
+#define CFG_PBSIZE             (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)      /* Print Buffer Size */
+#define CFG_MAXARGS            16      /* max number of command args */
+#define CFG_BARGSIZE           CFG_CBSIZE      /* Boot Argument Buffer Size    */
+#define CFG_LOAD_ADDR          0x00010000
+
+#define CFG_HZ                 1000
+#define CFG_CLK                        CFG_BUSCLK
+#define CFG_CPU_CLK            CFG_CLK * 2
+
+#define CFG_MBAR               0xF0000000
+#define CFG_INTSRAM            (CFG_MBAR + 0x10000)
+#define CFG_INTSRAMSZ          0x8000
+
+/*#define CFG_LATCH_ADDR               (CFG_CS1_BASE + 0x80000)*/
+
+/*
+ * Low Level Configuration Settings
+ * (address mappings, register initial values, etc.)
+ * You should know what you are doing if you make changes here.
+ */
+/*-----------------------------------------------------------------------
+ * Definitions for initial stack pointer and data area (in DPRAM)
+ */
+#define CFG_INIT_RAM_ADDR      0xF2000000
+#define CFG_INIT_RAM_END       0x1000  /* End of used area in internal SRAM */
+#define CFG_INIT_RAM_CTRL      0x21
+#define CFG_INIT_RAM1_ADDR     (CFG_INIT_RAM_ADDR + CFG_INIT_RAM_END)
+#define CFG_INIT_RAM1_END      0x1000  /* End of used area in internal SRAM */
+#define CFG_INIT_RAM1_CTRL     0x21
+#define CFG_GBL_DATA_SIZE      128     /* size in bytes reserved for initial data */
+#define CFG_GBL_DATA_OFFSET    ((CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) - 0x10)
+#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+
+/*-----------------------------------------------------------------------
+ * Start addresses for the final memory configuration
+ * (Set up by the startup code)
+ * Please note that CFG_SDRAM_BASE _must_ start at 0
+ */
+#define CFG_SDRAM_BASE         0x00000000
+#define CFG_SDRAM_CFG1         0x73711630
+#define CFG_SDRAM_CFG2         0x46370000
+#define CFG_SDRAM_CTRL         0xE10B0000
+#define CFG_SDRAM_EMOD         0x40010000
+#define CFG_SDRAM_MODE         0x018D0000
+#define CFG_SDRAM_DRVSTRENGTH  0x000002AA
+#ifdef CFG_DRAMSZ1
+#      define CFG_SDRAM_SIZE   (CFG_DRAMSZ + CFG_DRAMSZ1)
+#else
+#      define CFG_SDRAM_SIZE   CFG_DRAMSZ
+#endif
+
+#define CFG_MEMTEST_START      CFG_SDRAM_BASE + 0x400
+#define CFG_MEMTEST_END                ((CFG_SDRAM_SIZE - 3) << 20)
+
+#define CFG_MONITOR_BASE       (CFG_FLASH_BASE + 0x400)
+#define CFG_MONITOR_LEN                (256 << 10)     /* Reserve 256 kB for Monitor */
+
+#define CFG_BOOTPARAMS_LEN     64*1024
+#define CFG_MALLOC_LEN         (128 << 10)     /* Reserve 128 kB for malloc() */
+
+/*
+ * For booting Linux, the board info and command line data
+ * have to be in the first 8 MB of memory, since this is
+ * the maximum mapped by the Linux kernel during initialization ??
+ */
+#define CFG_BOOTMAPSZ          (CFG_SDRAM_BASE + (CFG_SDRAM_SIZE << 20))
+
+/*-----------------------------------------------------------------------
+ * FLASH organization
+ */
+#define CFG_FLASH_CFI
+#ifdef CFG_FLASH_CFI
+#      define CFG_FLASH_BASE           (CFG_CS0_BASE)
+#      define CFG_FLASH_CFI_DRIVER     1
+#      define CFG_FLASH_CFI_WIDTH      FLASH_CFI_16BIT
+#      define CFG_MAX_FLASH_SECT       137     /* max number of sectors on one chip */
+#      define CFG_FLASH_PROTECTION     /* "Real" (hardware) sectors protection */
+#      define CFG_FLASH_USE_BUFFER_WRITE
+#ifdef CFG_NOR1SZ
+#      define CFG_MAX_FLASH_BANKS      2       /* max number of memory banks */
+#      define CFG_FLASH_SIZE           ((CFG_NOR1SZ + CFG_BOOTSZ) << 20)
+#      define CFG_FLASH_BANKS_LIST     { CFG_CS0_BASE, CFG_CS1_BASE }
+#else
+#      define CFG_MAX_FLASH_BANKS      1       /* max number of memory banks */
+#      define CFG_FLASH_SIZE           (CFG_BOOTSZ << 20)
+#endif
+#endif
+
+/* Configuration for environment
+ * Environment is embedded in u-boot in the second sector of the flash
+ */
+#define CFG_ENV_OFFSET         0x2000
+#define CFG_ENV_SECT_SIZE      0x2000
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_IS_EMBEDDED    1
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_CACHELINE_SIZE     16
+
+/*-----------------------------------------------------------------------
+ * Chipselect bank definitions
+ */
+/*
+ * CS0 - NOR Flash 1, 2, 4, or 8MB
+ * CS1 - NOR Flash
+ * CS2 - Available
+ * CS3 - Available
+ * CS4 - Available
+ * CS5 - Available
+ */
+#define CFG_CS0_BASE           0xFF800000
+#define CFG_CS0_MASK           (((CFG_BOOTSZ << 20) - 1) & 0xFFFF0001)
+#define CFG_CS0_CTRL           0x00101980
+
+#ifdef CFG_NOR1SZ
+#define CFG_CS1_BASE           0xF8000000
+#define CFG_CS1_MASK           (((CFG_NOR1SZ << 20) - 1) & 0xFFFF0001)
+#define CFG_CS1_CTRL           0x00000D80
+#endif
+
+#endif                         /* _M5485EVB_H */
index 437a9a5f7bfb1b7afcdf48be5d05010ca177109d..07f2f30ef87726a30e0162b672ca70aade7d7da2 100644 (file)
 #define CFG_I2C_OFFSET         0x3000
 #define CFG_I2C2_OFFSET                0x3100
 
+/* SPI */
+#define CONFIG_HARD_SPI                        /* SPI with hardware support */
+#undef CONFIG_SOFT_SPI                 /* SPI bit-banged */
+
+/* GPIOs.  Used as SPI chip selects */
+#define CFG_GPIO1_PRELIM
+#define CFG_GPIO1_DIR          0xC0000000  /* SPI CS on 0, LED on 1 */
+#define CFG_GPIO1_DAT          0xC0000000  /* Both are active LOW */
+
 /* TSEC */
 #define CFG_TSEC1_OFFSET 0x24000
 #define CFG_TSEC1 (CFG_IMMR+CFG_TSEC1_OFFSET)
index afce7fb78fe605b3ca5b5de88dc218b575e0dcdb..5ea7b250471be1364febc4e45941181bc0443904 100644 (file)
@@ -55,6 +55,7 @@
 #define CONFIG_DDR_ECC                 /* only for ECC DDR module */
 #define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /*
  * sysclk for MPC85xx
index 2868dcb8ad6484482d1065ef129a4de102c7cb3a..bf64f27049c9bd785d1a7ef161608dc2a6abbe96 100644 (file)
@@ -43,6 +43,8 @@
 #undef  CONFIG_DDR_ECC                     /* only for ECC DDR module */
 #define CONFIG_DDR_DLL                      /* possible DLL fix needed */
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
+
 /* Using Localbus SDRAM to emulate flash before we can program the flash,
  * normally you only need a flash-boot image(u-boot.bin),if unsure undef this.
  * Not availabe for EVAL board
index c83382f0df63468eedef2184c6b8fed5ed76dace..7334088b18fedf696512e57ec62fcee00a691b01 100644 (file)
@@ -47,6 +47,7 @@
 #define CONFIG_DDR_ECC                 /* only for ECC DDR module */
 #define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /*
  * When initializing flash, if we cannot find the manufacturer ID,
index 5a96db5ab2517193b6adbcf696e0a50d6f32cfb2..a8942095c952fd73d6d8b336a8203c3fff58a54c 100644 (file)
@@ -42,6 +42,8 @@
 #define CONFIG_FSL_PCI_INIT    1       /* Use common FSL init code */
 #define CONFIG_FSL_PCIE_RESET  1       /* need PCIe reset errata */
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
+
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
 #define CONFIG_ENV_OVERWRITE
 #define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup */
index 90beb252138583542f37716bcc7b89981a395c05..a3db9f445712f66b7bf73c07bdf96b8f9dc698b6 100644 (file)
@@ -55,6 +55,7 @@
 #define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 #define CONFIG_INTERRUPTS              /* enable pci, srio, ddr interrupts */
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /*
  * When initializing flash, if we cannot find the manufacturer ID,
index 76d673cd0d65cc1ba2c6867841fcf1ae894f1e60..93877aedb048dc478f5cc871eb0983e977c4eb86 100644 (file)
@@ -47,6 +47,7 @@
 #define CONFIG_DDR_ECC                 /* only for ECC DDR module */
 #define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /*
  * When initializing flash, if we cannot find the manufacturer ID,
index 5f105552f40b87d05137f64fa5f887fbc510dc3f..08884b36f07ba14cebc9f7411eaef79f5c96a8f9 100644 (file)
@@ -52,6 +52,7 @@
 #define CONFIG_DDR_ECC                 /* only for ECC DDR module */
 #define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /*
  * sysclk for MPC85xx
index 2b089d90d6869d03457e8c01116cedc7689ff73e..a12d193c712e441da160459d5b4a939fb3988f62 100644 (file)
@@ -49,6 +49,7 @@
 /*#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER*/  /* DDR controller or DMA? */
 #define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /*
  * When initializing flash, if we cannot find the manufacturer ID,
index ac4b3e133f4fdfe00cda633652f369219ca5ec0b..a53953c29c7316e07df9347dbec9f867ed192a4e 100644 (file)
  * Miscellaneous configurable options
  */
 #define CFG_LONGHELP                   /* undef to save memory */
+#define CONFIG_CMDLINE_EDITING          /* Command-line editing */
 #define CFG_LOAD_ADDR  0x2000000       /* default load address */
 #define CFG_PROMPT     "=> "           /* Monitor Command Prompt */
 
index ab875f036c9c1122ae6e4d0145eaf9fc8260e72d..985182fdec6dab06097c48da3ee294ef678a6e86 100644 (file)
@@ -555,6 +555,7 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
  * Miscellaneous configurable options
  */
 #define CFG_LONGHELP                   /* undef to save memory */
+#define CONFIG_CMDLINE_EDITING          /* Command-line editing */
 #define CFG_LOAD_ADDR  0x2000000       /* default load address */
 #define CFG_PROMPT     "=> "           /* Monitor Command Prompt */
 
index f0d0399a9d08a6d6b41c64c0233edaf2c24575b2..819bee70a1a5a1dac236b7f782e5c9a44de17b19 100644 (file)
@@ -51,6 +51,7 @@
 #define CONFIG_DDR_ECC                 /* only for ECC DDR module */
 #define CONFIG_MEM_INIT_VALUE          0xDEADBEEF
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /*
  * sysclk for MPC85xx
index ae2645c079c897e55eb4430bbd7a2c781bc860d2..8902f42ff15e482de80516c3bba723797c5beae9 100644 (file)
@@ -51,6 +51,7 @@
 #define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
 #define CONFIG_MEM_INIT_VALUE          0xDEADBEEF
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /*
  * sysclk for MPC85xx
index 67bf4b179d96efa04ffd74ddc650a89dc6a2c1d9..e8b405a8849260350ce1243aed6d74d6a58b52d2 100644 (file)
  *----------------------------------------------------------------------*/
 #define CFG_LONGHELP                   /* undef to save memory         */
 #define CFG_PROMPT             "=> "   /* Monitor Command Prompt       */
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#if defined(CONFIG_CMD_KGDB)
 #define CFG_CBSIZE             1024    /* Console I/O Buffer Size      */
 #else
 #define CFG_CBSIZE             256     /* Console I/O Buffer Size      */
 #define BOOTFLAG_COLD  0x01    /* Normal Power-On: Boot from FLASH     */
 #define BOOTFLAG_WARM  0x02    /* Software reboot                      */
 
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#if defined(CONFIG_CMD_KGDB)
 #define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
 #define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
 #endif
index 3ca85b8a9fe90264efe728f9d62b35be2462a07a..2bbfe9aa62b1f871438f7dbeeb26553ff3a88db9 100644 (file)
@@ -56,6 +56,7 @@
 #undef CONFIG_PCI                      /* pci ethernet support         */
 #undef  CONFIG_ETHER_ON_FCC            /* cpm FCC ethernet support     */
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 #define CONFIG_ENV_OVERWRITE
 
index f3b1a53fe9c4342754f2733c39e6065fe39cecc6..dd0654b700cbcc28c22e576988abd6faf06ed899 100644 (file)
@@ -50,6 +50,8 @@
 #define CONFIG_CPM2            1       /* has CPM2                     */
 #endif
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
+
 /*
  * sysclk for MPC85xx
  *
diff --git a/include/configs/atngw100.h b/include/configs/atngw100.h
new file mode 100644 (file)
index 0000000..b38c813
--- /dev/null
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2006 Atmel Corporation
+ *
+ * Configuration settings for the AVR32 Network Gateway
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#define CONFIG_AVR32                   1
+#define CONFIG_AT32AP                  1
+#define CONFIG_AT32AP7000              1
+#define CONFIG_ATNGW100                        1
+
+#define CFG_HZ                         1000
+
+/*
+ * Set up the PLL to run at 140 MHz, the CPU to run at the PLL
+ * frequency, the HSB and PBB busses to run at 1/2 the PLL frequency
+ * and the PBA bus to run at 1/4 the PLL frequency.
+ */
+#define CONFIG_PLL                     1
+#define CFG_POWER_MANAGER              1
+#define CFG_OSC0_HZ                    20000000
+#define CFG_PLL0_DIV                   1
+#define CFG_PLL0_MUL                   7
+#define CFG_PLL0_SUPPRESS_CYCLES       16
+#define CFG_CLKDIV_CPU                 0
+#define CFG_CLKDIV_HSB                 1
+#define CFG_CLKDIV_PBA                 2
+#define CFG_CLKDIV_PBB                 1
+
+/*
+ * The PLLOPT register controls the PLL like this:
+ *   icp = PLLOPT<2>
+ *   ivco = PLLOPT<1:0>
+ *
+ * We want icp=1 (default) and ivco=0 (80-160 MHz) or ivco=2 (150-240MHz).
+ */
+#define CFG_PLL0_OPT                   0x04
+
+#define CONFIG_USART1                  1
+
+/* User serviceable stuff */
+#define CONFIG_DOS_PARTITION           1
+
+#define CONFIG_CMDLINE_TAG             1
+#define CONFIG_SETUP_MEMORY_TAGS       1
+#define CONFIG_INITRD_TAG              1
+
+#define CONFIG_STACKSIZE               (2048)
+
+#define CONFIG_BAUDRATE                        115200
+#define CONFIG_BOOTARGS                                                        \
+       "console=ttyS0 root=/dev/mtdblock1 rootfstype=jffs2"
+#define CONFIG_BOOTCOMMAND                                             \
+       "fsload; bootm"
+
+/*
+ * Only interrupt autoboot if <space> is pressed. Otherwise, garbage
+ * data on the serial line may interrupt the boot sequence.
+ */
+#define CONFIG_BOOTDELAY               1
+#define CONFIG_AUTOBOOT                        1
+#define CONFIG_AUTOBOOT_KEYED          1
+#define CONFIG_AUTOBOOT_PROMPT                         \
+        "Press SPACE to abort autoboot in %d seconds\n"
+#define CONFIG_AUTOBOOT_DELAY_STR      "d"
+#define CONFIG_AUTOBOOT_STOP_STR       " "
+
+/*
+ * After booting the board for the first time, new ethernet addresses
+ * should be generated and assigned to the environment variables
+ * "ethaddr" and "eth1addr". This is normally done during production.
+ */
+#define CONFIG_OVERWRITE_ETHADDR_ONCE  1
+#define CONFIG_NET_MULTI               1
+
+/*
+ * BOOTP/DHCP options
+ */
+#define CONFIG_BOOTP_SUBNETMASK
+#define CONFIG_BOOTP_GATEWAY
+
+#define CONFIG_DOS_PARTITION           1
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_JFFS2
+#define CONFIG_CMD_MMC
+#undef CONFIG_CMD_FPGA
+#undef CONFIG_CMD_SETGETDCR
+
+#define CONFIG_ATMEL_USART             1
+#define CONFIG_MACB                    1
+#define CONFIG_PIO2                    1
+#define CFG_NR_PIOS                    5
+#define CFG_HSDRAMC                    1
+#define CONFIG_MMC                     1
+
+#define CFG_DCACHE_LINESZ              32
+#define CFG_ICACHE_LINESZ              32
+
+#define CONFIG_NR_DRAM_BANKS           1
+
+#define CFG_FLASH_CFI                  1
+#define CFG_FLASH_CFI_DRIVER           1
+
+#define CFG_FLASH_BASE                 0x00000000
+#define CFG_FLASH_SIZE                 0x800000
+#define CFG_MAX_FLASH_BANKS            1
+#define CFG_MAX_FLASH_SECT             135
+
+#define CFG_MONITOR_BASE               CFG_FLASH_BASE
+
+#define CFG_INTRAM_BASE                        0x24000000
+#define CFG_INTRAM_SIZE                        0x8000
+
+#define CFG_SDRAM_BASE                 0x10000000
+#define CFG_SDRAM_16BIT                        1
+
+#define CFG_ENV_IS_IN_FLASH            1
+#define CFG_ENV_SIZE                   65536
+#define CFG_ENV_ADDR                   (CFG_FLASH_BASE + CFG_FLASH_SIZE - CFG_ENV_SIZE)
+
+#define CFG_INIT_SP_ADDR               (CFG_INTRAM_BASE + CFG_INTRAM_SIZE)
+
+#define CFG_MALLOC_LEN                 (256*1024)
+#define CFG_MALLOC_END                                                 \
+       ({                                                              \
+               DECLARE_GLOBAL_DATA_PTR;                                \
+               CFG_SDRAM_BASE + gd->sdram_size;                        \
+       })
+#define CFG_MALLOC_START               (CFG_MALLOC_END - CFG_MALLOC_LEN)
+
+#define CFG_DMA_ALLOC_LEN              (16384)
+
+/* Allow 4MB for the kernel run-time image */
+#define CFG_LOAD_ADDR                  (CFG_SDRAM_BASE + 0x00400000)
+#define CFG_BOOTPARAMS_LEN             (16 * 1024)
+
+/* Other configuration settings that shouldn't have to change all that often */
+#define CFG_PROMPT                     "Uboot> "
+#define CFG_CBSIZE                     256
+#define CFG_MAXARGS                    16
+#define CFG_PBSIZE                     (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16)
+#define CFG_LONGHELP                   1
+
+#define CFG_MEMTEST_START                                              \
+       ({ DECLARE_GLOBAL_DATA_PTR; gd->bd->bi_dram[0].start; })
+#define CFG_MEMTEST_END                                                        \
+       ({                                                              \
+               DECLARE_GLOBAL_DATA_PTR;                                \
+               gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size;     \
+       })
+#define CFG_BAUDRATE_TABLE { 115200, 38400, 19200, 9600, 2400 }
+
+#endif /* __CONFIG_H */
index b43b228fba95739d21e389f5e89b4546e9c1a551..cb51406cb7199ff859fd458a2060b07d1428a287 100644 (file)
@@ -46,8 +46,8 @@
  * Base addresses -- Note these are effective addresses where the
  * actual resources get mapped (not physical addresses)
 *----------------------------------------------------------------------*/
-#define CFG_MONITOR_LEN                (384 * 1024)    /* Reserve 384 kB for Monitor   */
-#define CFG_MALLOC_LEN         (256 * 1024)    /* Reserve 256 kB for malloc()  */
+#define CFG_MONITOR_LEN        (320 * 1024)    /* Reserve 320 kB for Monitor   */
+#define CFG_MALLOC_LEN         (256 * 1024) /* Reserve 256 kB for malloc() */
 
 
 #define CFG_SDRAM_BASE         0x00000000      /* _must_ be 0          */
@@ -67,7 +67,7 @@
 #define CFG_INIT_RAM_END       CFG_OCM_DATA_SIZE
 #define CFG_GBL_DATA_SIZE      256             /* num bytes initial data */
 #define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
-#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+#define CFG_INIT_SP_OFFSET     CFG_POST_WORD_ADDR
 
 /*-----------------------------------------------------------------------
  * Serial Port
@@ -82,8 +82,8 @@
  * set Linux BASE_BAUD to 403200.
  */
 #undef CFG_EXT_SERIAL_CLOCK           /* external serial clock */
-#undef CONFIG_SERIAL_MULTI            /* needed to be able to define
-                                         CONFIG_SERIAL_SOFTWARE_FIFO */
+#define CONFIG_SERIAL_MULTI  1
+/* needed to be able to define CONFIG_SERIAL_SOFTWARE_FIFO */
 #undef CFG_405_UART_ERRATA_59         /* 405GP/CR Rev. D silicon */
 #define CFG_BASE_BAUD      691200
 
 #define CFG_BAUDRATE_TABLE                                             \
        {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
 
+/*-----------------------------------------------------------------------
+ * Flash
+ *----------------------------------------------------------------------*/
+
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks */
+#define CFG_MAX_FLASH_SECT     8       /* max number of sectors on one chip */
+
+#define CFG_FLASH_EMPTY_INFO   /* print 'E' for empty sector on flinfo */
+
+#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
+#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
+
 /*-----------------------------------------------------------------------
  * Environment
  *----------------------------------------------------------------------*/
 
 #undef CFG_ENV_IS_IN_NVRAM
-#undef  CFG_ENV_IS_IN_FLASH
-#define        CFG_ENV_IS_IN_EEPROM
+#define CFG_ENV_IS_IN_FLASH
 #undef  CFG_ENV_IS_NOWHERE
 
 #ifdef  CFG_ENV_IS_IN_EEPROM
 /* Put the environment in Flash */
 #define CFG_ENV_SECT_SIZE      0x10000         /* size of one complete sector  */
 #define CFG_ENV_ADDR           ((-CFG_MONITOR_LEN)-CFG_ENV_SECT_SIZE)
-#define        CFG_ENV_SIZE            0x10000 /* Total Size of Environment Sector     */
+#define        CFG_ENV_SIZE            8*1024  /* 8 KB Environment Sector      */
 
 /* Address and size of Redundant Environment Sector    */
 #define CFG_ENV_ADDR_REDUND    (CFG_ENV_ADDR-CFG_ENV_SECT_SIZE)
 
 /* Setup some board specific values for the default environment variables */
 #define CONFIG_HOSTNAME                hcu4
-#define CONFIG_IPADDR          172.25.1.42
+#define CONFIG_IPADDR          172.25.1.99
 #define CONFIG_ETHADDR      00:60:13:00:00:00   /* Netstal Machines AG MAC */
 #define CONFIG_OVERWRITE_ETHADDR_ONCE
 #define CONFIG_SERVERIP                172.25.1.3
        "rootpath=/home/diagnose/eldk/ppc_4xx\0"                        \
        "bootfile=/tftpboot/hcu4/uImage\0"                              \
        "load=tftp 100000 hcu4/u-boot.bin\0"                    \
-       "update=protect off FFFa0000 FFFFFFFF;era FFFa0000 FFFFFFFF;"   \
-               "cp.b 100000 FFFa0000 60000\0"                          \
+       "update=protect off FFFB0000 FFFFFFFF;era FFFC0000 FFFFFFFF;"   \
+               "cp.b 100000 FFFB0000 50000\0"                          \
        "upd=run load;run update\0"                                     \
        "vx=tftp ${loadaddr} hcu4_vx_rom;"                              \
-       "setenv bootargs emac(0,0)hcu4_vx_rom e=${ipaddr} "             \
-       " h=${serverip} u=dpu pw=netstal8752 tn=hcu4 f=0x3008;"         \
+       "vx=tftp ${loadaddr} hcu4/hcu4_vx_rom;"                         \
+       "setenv bootargs emac(0,0)c:hcu4/hcu4_vx_rom e=${ipaddr} "      \
        "bootvx ${loadaddr}\0"                                          \
        ""
 #define CONFIG_BOOTCOMMAND     "run vx"
 
-#if 0
-#define CONFIG_BOOTDELAY       -1      /* autoboot disabled            */
-#else
 #define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
-#endif
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
 #define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
 #define CONFIG_MII             1       /* MII PHY management           */
 #define CONFIG_PHY_ADDR                1       /* PHY address                  */
 
-#define CONFIG_PHY_RESET        1      /* reset phy upon startup         */
+#define CONFIG_PHY_RESET        1      /* reset phy upon startup */
 
 #define CONFIG_HAS_ETH0
-#define CFG_RX_ETH_BUFFER      16      /* Number of ethernet rx buffers & descriptors */
+#define CFG_RX_ETH_BUFFER      16 /* Number of ethernet rx buffers & desC */
 
 /*
  * BOOTP options
 #include <config_cmd_default.h>
 
 #define CONFIG_CMD_ASKENV
-#define CONFIG_CMD_BSP
 #define CONFIG_CMD_CACHE
 #define CONFIG_CMD_DHCP
 #define CONFIG_CMD_DIAG
 #define CONFIG_SPD_EEPROM          1
 #define SPD_EEPROM_ADDRESS      0x50
 
+/* POST support */
+#define CONFIG_POST            (CFG_POST_MEMORY   | \
+                                CFG_POST_CPU      | \
+                                CFG_POST_UART     | \
+                                CFG_POST_I2C      | \
+                                CFG_POST_CACHE    | \
+                                CFG_POST_ETHER    | \
+                                CFG_POST_SPR)
+
+#define CFG_POST_UART_TABLE    {UART0_BASE}
+#define CFG_POST_WORD_ADDR     (CFG_GBL_DATA_OFFSET - 0x4)
+#undef  CONFIG_LOGBUFFER
+#define CFG_POST_CACHE_ADDR    0x00800000 /* free virtual address      */
+#define CFG_CONSOLE_IS_IN_ENV /* Otherwise it catches logbuffer as output */
+
 /*-----------------------------------------------------------------------
  * Miscellaneous configurable options
  *----------------------------------------------------------------------*/
 #define CFG_LONGHELP                   /* undef to save memory         */
 #define CFG_PROMPT     "=> "           /* Monitor Command Prompt       */
 #if defined(CONFIG_CMD_KGDB)
-       #define CFG_CBSIZE      1024            /* Console I/O Buffer Size      */
+       #define CFG_CBSIZE      1024            /* Console I/O Buffer Size */
 #else
-       #define CFG_CBSIZE      256             /* Console I/O Buffer Size      */
+       #define CFG_CBSIZE      256             /* Console I/O Buffer Size */
 #endif
 #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
 #define CFG_MAXARGS    16              /* max number of command args   */
 
 #define CONFIG_CMDLINE_EDITING 1       /* add command line history     */
 #define CONFIG_LOOPW            1       /* enable loopw command         */
-#define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
 #define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
 
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  */
 
-/* Memory Bank 0 (Flash Bank 0) initialization                                 */
-#define CFG_EBC_PB0AP          0x02005400
-#define CFG_EBC_PB0CR          0xFFF18000  /* BAS=0xFFF,BS=1MB,BU=R/W,BW=8bit  */
+#define CFG_EBC_CFG    0x98400000
 
-#define CFG_EBC_PB1AP          0x03041200
-#define CFG_EBC_PB1CR          0x7009A000  /* BAS=,BS=MB,BU=R/W,BW=bit */
+/* Memory Bank 0 (Flash Bank 0) initialization */
+#define CFG_EBC_PB0AP  0x02005400
+#define CFG_EBC_PB0CR  0xFFF18000  /* BAS=0xFFF,BS=1MB,BU=R/W,BW=8bit */
 
-#define CFG_EBC_PB2AP          0x02054500
-#define CFG_EBC_PB2CR          0x78018000  /* BAS=,BS=MB,BU=R/W,BW=bit */
+#define CFG_EBC_PB1AP  0x03041200
+#define CFG_EBC_PB1CR  0x7009A000  /* BAS=,BS=MB,BU=R/W,BW=bit */
 
-#define CFG_EBC_PB3AP          0x01840300
-#define CFG_EBC_PB3CR          0x7c0ba000  /* BAS=,BS=MB,BU=R/W,BW=bit */
+#define CFG_EBC_PB2AP  0x02054500
+#define CFG_EBC_PB2CR  0x78018000  /* BAS=,BS=MB,BU=R/W,BW=bit */
 
-#define CFG_EBC_PB4AP          0x01800300
-#define CFG_EBC_PB4CR          0x7e0ba000  /* BAS=,BS=MB,BU=R/W,BW=bit */
+#define CFG_EBC_PB3AP  0x01840300
+#define CFG_EBC_PB3CR  0x7c0ba000  /* BAS=,BS=MB,BU=R/W,BW=bit */
 
-#define CFG_GPIO0_TCR          0x7ffe0000  /* GPIO value */
+#define CFG_EBC_PB4AP  0x01800300
+#define CFG_EBC_PB4CR  0x7e0ba000  /* BAS=,BS=MB,BU=R/W,BW=bit */
+
+#define CFG_GPIO0_OR   0xF27FFFFF  /* GPIO value */
+#define CFG_GPIO0_TCR  0x7FFE0000  /* GPIO value */
+#define CFG_GPIO0_ODR  0x00E897FC  /* GPIO value */
 
 /*
  * For booting Linux, the board info and command line data
  * have to be in the first 8 MB of memory, since this is
  * the maximum mapped by the Linux kernel during initialization.
  */
-#define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
-
-/*-----------------------------------------------------------------------
- * FLASH organization
- */
-#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
-#define CFG_MAX_FLASH_SECT     256     /* max number of sectors on one chip    */
-
-
-#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
-#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
+#define CFG_BOOTMAPSZ          (8 << 20)/* Initial Memory map for Linux */
 
 /* Init Memory Controller:
  *
  *
  * Boot Flags
  */
-#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH     */
-#define BOOTFLAG_WARM  0x02            /* Software reboot                      */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02            /* Software reboot */
 
 #define CFG_HUSH_PARSER                 /* use "hush" command parser    */
 #ifdef  CFG_HUSH_PARSER
 #define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
 #define CONFIG_KGDB_SER_INDEX  2           /* which serial port to use */
 #endif
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+
 #endif /* __CONFIG_H */
index 1214bc31b59e6ff6fdab72db72be2c10eaefea0a..d66c47a39dadd5681f0fe9dbdf9ac957b31bb6ac 100644 (file)
  * Base addresses -- Note these are effective addresses where the
  * actual resources get mapped (not physical addresses)
  *----------------------------------------------------------------------*/
-#define CFG_MONITOR_LEN                (384 * 1024)    /* Reserve 384 kB for Monitor   */
-#define CFG_MALLOC_LEN         (256 * 1024)    /* Reserve 256 kB for malloc()  */
+#define CFG_MONITOR_LEN        (320 * 1024)    /* Reserve 320 kB for Monitor   */
+#define CFG_MALLOC_LEN         (256 * 1024) /* Reserve 256 kB for malloc() */
 
+#define CFG_TLB_FOR_BOOT_FLASH  3
 #define CFG_BOOT_BASE_ADDR     0xfff00000
 #define CFG_SDRAM_BASE         0x00000000      /* _must_ be 0          */
 #define CFG_FLASH_BASE         0xfff80000      /* start of FLASH       */
 #define CFG_MONITOR_BASE       TEXT_BASE
 #define CFG_OCM_BASE           0xe0010000      /* ocm                  */
+#define CFG_OCM_DATA_ADDR      CFG_OCM_BASE
 #define CFG_PCI_BASE           0xe0000000      /* Internal PCI regs    */
 #define CFG_PCI_MEMBASE                0x80000000      /* mapped pci memory    */
 #define CFG_PCI_MEMBASE1       CFG_PCI_MEMBASE  + 0x10000000
 #define CFG_INIT_RAM_END       (4 << 10)
 #define CFG_GBL_DATA_SIZE      256             /* num bytes initial data */
 #define CFG_GBL_DATA_OFFSET    (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
-#define CFG_INIT_SP_OFFSET     CFG_GBL_DATA_OFFSET
+#define CFG_INIT_SP_OFFSET     CFG_POST_WORD_ADDR
 
 /*-----------------------------------------------------------------------
  * Serial Port
  *----------------------------------------------------------------------*/
 #undef CFG_EXT_SERIAL_CLOCK           /* external serial clock */
 #define CONFIG_BAUDRATE                9600
-#undef CONFIG_SERIAL_MULTI            /* needed to be able to define
+#define CONFIG_SERIAL_MULTI     1
+/* needed to be able to define
        CONFIG_SERIAL_SOFTWARE_FIFO, but
        CONFIG_SERIAL_SOFTWARE_FIFO (16) does not work */
 /* Size (bytes) of interrupt driven serial port buffer.
@@ -95,6 +98,7 @@
 #undef CONFIG_SERIAL_SOFTWARE_FIFO
 #undef CONFIG_UART1_CONSOLE
 
+#undef CONFIG_CMD_HWFLOW
 #define CFG_BAUDRATE_TABLE                                             \
        {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200}
 
  *----------------------------------------------------------------------*/
 
 #undef CFG_ENV_IS_IN_NVRAM
-#undef  CFG_ENV_IS_IN_FLASH
-#define        CFG_ENV_IS_IN_EEPROM
+#define  CFG_ENV_IS_IN_FLASH
+#undef CFG_ENV_IS_IN_EEPROM
 #undef  CFG_ENV_IS_NOWHERE
 
 #ifdef  CFG_ENV_IS_IN_EEPROM
 
 #ifdef CFG_ENV_IS_IN_FLASH
 /* Put the environment in Flash */
-#define CFG_ENV_SECT_SIZE      0x10000         /* size of one complete sector  */
+#define CFG_ENV_SECT_SIZE      0x10000 /* size of one complete sector  */
 #define CFG_ENV_ADDR           ((-CFG_MONITOR_LEN)-CFG_ENV_SECT_SIZE)
-#define        CFG_ENV_SIZE            0x10000 /* Total Size of Environment Sector     */
+#define        CFG_ENV_SIZE            8*1024  /* 8 KB Environment Sector      */
 
 /* Address and size of Redundant Environment Sector    */
 #define CFG_ENV_ADDR_REDUND    (CFG_ENV_ADDR-CFG_ENV_SECT_SIZE)
 #define CFG_ENV_SIZE_REDUND    (CFG_ENV_SIZE)
+
 #endif
 
 /*-----------------------------------------------------------------------
  * DDR SDRAM
  *----------------------------------------------------------------------*/
-#define CFG_MBYTES_SDRAM        (128)          /* 128 MB or 256 MB             */
-#define CFG_DDR_CACHED_ADDR    0x40000000      /* setup 2nd TLB cached here    */
-#undef  CONFIG_DDR_DATA_EYE                    /* Do not use DDR2 optimization */
-#define CONFIG_DDR_ECC         1               /* enable ECC                   */
+#define CFG_MBYTES_SDRAM        (128)          /* 128 MB or 256 MB     */
+#define CFG_DDR_CACHED_ADDR    0x50000000      /* setup 2nd TLB cached here */
+#undef  CONFIG_DDR_DATA_EYE            /* Do not use DDR2 optimization */
+#define CONFIG_DDR_ECC         1       /* enable ECC                   */
+
+/* Following two definitions must be kept in sync with config.h of vxWorks */
+#define USER_RESERVED_MEM     (   0)  /* in kB */
+#define PM_RESERVED_MEM       (  64)  /* in kB: pmLib reserved area size */
+#define CONFIG_PRAM           ( USER_RESERVED_MEM + PM_RESERVED_MEM )
 
 /*-----------------------------------------------------------------------
  * I2C stuff for a ATMEL AT24C16 (2kB holding ENV, we are using the
 
 /* Setup some board specific values for the default environment variables */
 #define CONFIG_HOSTNAME                hcu5
-#define CONFIG_IPADDR          172.25.1.42
-#define CONFIG_ETHADDR         00:60:13:00:00:00   /* Netstal Machines AG MAC */
+#define CONFIG_IPADDR          172.25.1.99
+#define CONFIG_ETHADDR         00:60:13:00:00:00 /* Netstal Machines AG MAC */
 #define CONFIG_OVERWRITE_ETHADDR_ONCE
 #define CONFIG_SERVERIP                172.25.1.3
 
                "bootfile=hcu5/uImage\0"                                \
                "rootpath=/home/hcu/eldk/ppc_4xxFP\0"                   \
                "load=tftp 100000 hcu5/u-boot.bin\0"                    \
-       "update=protect off FFFa0000 FFFFFFFF;era FFFa0000 FFFFFFFF;"   \
-               "cp.b 100000 FFFa0000 60000\0"                          \
+       "update=protect off FFFb0000 FFFFFFFF;era FFFb0000 FFFFFFFF;"   \
+               "cp.b 100000 FFFb0000 50000\0"                          \
        "upd=run load;run update\0"                                     \
-       "vx=tftp ${loadaddr} hcu5/hcu5_vx_rom;"                         \
-       "setenv bootargs emac(0,0)hcu5_vx_rom e=${ipaddr} "             \
-               " h=${serverip} u=dpu pw=netstal8752 tn=hcu5 f=0x3008;" \
-       "bootvx ${loadaddr}\0" \
+       "vx=tftp ${loadaddr} hcu5/hcu5_vx_rom; run vxboot\0"            \
+       "vxusb=usb start; fatload usb 0 ${loadaddr} vxWorks.st; run vxboot\0" \
+       "vxargs=emac(0,0)c:hcu5/hcu5_vx_rom e=${ipaddr} h=${serverip}"  \
+               " u=dpu pw=netstal8752 tn=hcu5 f=0x3008\0" \
+       "vxboot=setenv bootargs $(vxargs); bootvx ${loadaddr}\0"        \
+       "usbargs=setenv bootargs root=/dev/sda1 ro\0"                   \
+       "linux=usb start; ext2load usb 0 ${loadaddr} /boot/uImage;"     \
+       "run usbargs addip addtty; bootm\0"                             \
+       "net_nfs_fdt=tftp 200000 ${bootfile};"                          \
+               "tftp ${fdt_addr} ${fdt_file};"                         \
+               "run nfsargs addip addtty;"                             \
+               "bootm 200000 - ${fdt_addr}\0"                          \
+               "fdt_file=hcu5/hcu5.dtb\0"                              \
+       "fdt_addr=400000\0"                                             \
        ""
 #define CONFIG_BOOTCOMMAND     "run vx"
 
-#if 0
-#define CONFIG_BOOTDELAY       -1      /* autoboot disabled            */
-#else
 #define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */
-#endif
 
 #define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
 #define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
 #define CONFIG_PHY_RESET        1      /* reset phy upon startup         */
 
 #define CONFIG_HAS_ETH0
-#define CFG_RX_ETH_BUFFER      32      /* Number of ethernet rx buffers & descriptors */
+#define CFG_RX_ETH_BUFFER      32 /* Number of ethernet rx buffers & desc. */
 
 #define CONFIG_NET_MULTI       1
 #define CONFIG_HAS_ETH1                1       /* add support for "eth1addr"   */
 #include <config_cmd_default.h>
 
 #define CONFIG_CMD_ASKENV
-#define CONFIG_CMD_BSP
 #define CONFIG_CMD_DHCP
 #define CONFIG_CMD_DIAG
 #define CONFIG_CMD_EEPROM
 #define CONFIG_CMD_SDRAM
 #define CONFIG_CMD_USB
 
+/* POST support */
+#define CONFIG_POST            (CFG_POST_MEMORY   | \
+                                CFG_POST_CPU      | \
+                                CFG_POST_UART     | \
+                                CFG_POST_I2C      | \
+                                CFG_POST_CACHE    | \
+                                CFG_POST_FPU      | \
+                                CFG_POST_ETHER    | \
+                                CFG_POST_SPR)
+#define CFG_POST_UART_TABLE    {UART0_BASE}
+
+#define CFG_POST_WORD_ADDR     (CFG_GBL_DATA_OFFSET - 0x4)
+#define CFG_POST_CACHE_ADDR    0x7fff0000 /* free virtual address      */
+#define CFG_CONSOLE_IS_IN_ENV /* Otherwise it catches logbuffer as output */
+
 #define CONFIG_SUPPORT_VFAT
 
 /*-----------------------------------------------------------------------
 #else
 #define CFG_CBSIZE             256     /* Console I/O Buffer Size      */
 #endif
-#define CFG_PBSIZE              (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_PBSIZE              (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)
 #define CFG_MAXARGS            16      /* max number of command args   */
 #define CFG_BARGSIZE           CFG_CBSIZE /* Boot Argument Buffer Size */
 
 #define CONFIG_CMDLINE_EDITING 1       /* add command line history     */
 #define CONFIG_LOOPW            1       /* enable loopw command         */
 #define CONFIG_MX_CYCLIC        1       /* enable mdc/mwc commands      */
-#define CONFIG_ZERO_BOOTDELAY_CHECK    /* check for keypress on bootdelay==0 */
 #define CONFIG_VERSION_VARIABLE 1      /* include version env variable */
 
 /*-----------------------------------------------------------------------
  * PCI stuff
  *----------------------------------------------------------------------*/
 /* General PCI */
-#define CONFIG_PCI                     /* include pci support          */
+#define CONFIG_PCI             1       /* include pci support          */
 #undef CONFIG_PCI_PNP                  /* do (not) pci plug-and-play   */
-#define CONFIG_PCI_SCAN_SHOW           /* show pci devices on startup  */
-#define CFG_PCI_TARGBASE        0x80000000 /* PCIaddr mapped to CFG_PCI_MEMBASE*/
+#undef CONFIG_PCI_SCAN_SHOW            /* show pci devices on startup  */
+#define CFG_PCI_TARGBASE        0x80000000 /* PCIaddr map to CFG_PCI_MEMBASE*/
 
 /* Board-specific PCI */
 #define CFG_PCI_TARGET_INIT
  * have to be in the first 8 MB of memory, since this is
  * the maximum mapped by the Linux kernel during initialization.
  */
-#define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
+#define CFG_BOOTMAPSZ          (8 << 20) /* Initial Memory map for Linux */
+
+/*-----------------------------------------------------------------------
+ * Flash
+ *----------------------------------------------------------------------*/
+
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
+#define CFG_MAX_FLASH_SECT     8       /* max number of sectors on one chip    */
+
+#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
+#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
 
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
 #define CFG_CS_1               0xC8000000 /* CAN */
 #define CFG_CS_2               0xCC000000 /* CPLD and IMC-Bus Standard */
 #define CFG_CPLD               CFG_CS_2
-#define CFG_CS_3               0xCD000000 /* CPLD and IMC-Bus Fast  */
+#define CFG_CS_3               0xCE000000 /* CPLD and IMC-Bus Fast  */
 
-/*-----------------------------------------------------------------------
- * FLASH organization
- * Memory Bank 0 (BOOT-FLASH) initialization
- */
-#define CFG_BOOTFLASH_CS               0       /* Boot Flash chip connected to CSx     */
+#define CFG_BOOTFLASH_CS       0       /* Boot Flash chip connected to CSx */
 #define CFG_EBC_PB0AP          0x02005400
 #define CFG_EBC_PB0CR          0xFFF18000 /* (CFG_FLASH | 0xda000)  */
 #define FLASH_BASE0_PRELIM     CFG_FLASH_BASE  /* FLASH bank #0        */
-#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
-#define CFG_MAX_FLASH_SECT     32      /* max number of sectors on one chip    */
-
 
-#define CFG_FLASH_ERASE_TOUT   120000  /* Timeout for Flash Erase (in ms)      */
-#define CFG_FLASH_WRITE_TOUT   500     /* Timeout for Flash Write (in ms)      */
-
-/* Memory Bank 1 CAN-Chips initialization                                              */
+/* Memory Bank 1 CAN-Chips initialization                              */
 #define CFG_EBC_PB1AP          0x02054500
 #define CFG_EBC_PB1CR          0xC8018000
 
-/* Memory Bank 2 CPLD/IMC-Bus standard initialization                                          */
+/* Memory Bank 2 CPLD/IMC-Bus standard initialization                  */
 #define CFG_EBC_PB2AP          0x01840300
 #define CFG_EBC_PB2CR          0xCC0BA000
 
-/* Memory Bank 3 IMC-Bus fast mode initialization                                              */
+/* Memory Bank 3 IMC-Bus fast mode initialization                      */
 #define CFG_EBC_PB3AP          0x01800300
 #define CFG_EBC_PB3CR          0xCE0BA000
 
-/* Memory Bank 4 (not used) initialization                                             */
+/* Memory Bank 4 (not used) initialization                             */
 #undef CFG_EBC_PB4AP
 #undef CFG_EBC_PB4CR
 
-/* Memory Bank 5 (not used) initialization                                             */
+/* Memory Bank 5 (not used) initialization                             */
 #undef CFG_EBC_PB5AP
 #undef CFG_EBC_PB5CR
 
  *
  * Boot Flags
  */
-#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH     */
-#define BOOTFLAG_WARM  0x02            /* Software reboot                      */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02            /* Software reboot              */
 
 #define CFG_HUSH_PARSER                 /* use "hush" command parser    */
 #ifdef  CFG_HUSH_PARSER
 #define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
 #define CONFIG_KGDB_SER_INDEX  2           /* which serial port to use */
 #endif
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_LIBFDT       1
+#define CONFIG_OF_BOARD_SETUP  1
+
 #endif /* __CONFIG_H */
index f3e8601d850e94c1d0210e9443547fc89b29f58f..a1d1533dd37aa943c157049b291850eaf7069066 100644 (file)
 #define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH     */
 #define BOOTFLAG_WARM  0x02            /* Software reboot                      */
 
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#if defined(CONFIG_CMD_KGDB)
 #define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
 #define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
 #endif
index 8f8e867b83cf91974c13140cb834c54ffb3103a9..2f0b0a866c77f9aa00736ee9204a861eac1f7a2f 100644 (file)
 #define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH     */
 #define BOOTFLAG_WARM  0x02            /* Software reboot                      */
 
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#if defined(CONFIG_CMD_KGDB)
 #define CONFIG_KGDB_BAUDRATE   230400  /* speed to run kgdb serial port */
 #define CONFIG_KGDB_SER_INDEX  2       /* which serial port to use */
 #endif
index 8a94c28237bac800fd8794458e3b3962d4b0cd8b..7035002c4f32bc20f072d85eb516f01dc6ddb520 100644 (file)
 #define CONFIG_CMD_IDE
 #define CONFIG_CMD_EXT2
 
-#define CFG_CMD_PCMCIA 0x01
-#define CFG_CMD_IDE    0x02
-
-#define CONFIG_COMMANDS                ((CONFIG_CMD_DFL        | \
-                                CFG_CMD_IDE|CFG_CMD_PCMCIA)    & \
-                               ~(CFG_CMD_FPGA))
-
 #define CONFIG_BAUDRATE                115200
 #define CONFIG_BOOTARGS                "console=ttySC0,115200"
 #define CONFIG_BOOTFILE                /boot/zImage
diff --git a/include/configs/qemu-mips.h b/include/configs/qemu-mips.h
new file mode 100644 (file)
index 0000000..33c8283
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ * (C) Copyright 2003
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * This file contains the configuration parameters for the dbau1x00 board.
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#define CONFIG_MIPS32          1  /* MIPS32 CPU core   */
+#define CONFIG_QEMU_MIPS        1
+#define CONFIG_MISC_INIT_R
+
+#undef DEBUG
+
+/*IP address is default used by Qemu*/
+#define CONFIG_IPADDR          10.0.2.15            /* Our IP address */
+#define CONFIG_SERVERIP                10.0.2.2             /* Server IP address*/
+
+#define CONFIG_BOOTDELAY       10      /* autoboot after 10 seconds    */
+
+#define CONFIG_BAUDRATE                115200
+
+/* valid baudrates */
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200 }
+
+#define        CONFIG_TIMESTAMP                /* Print image info with timestamp */
+#undef CONFIG_BOOTARGS
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "addmisc=setenv bootargs ${bootargs} "                          \
+               "console=ttyS0,${baudrate} "                            \
+               "panic=1\0"                                             \
+       "bootfile=/tftpboot/vmlinux\0"                          \
+       "load=tftp 80500000 ${u-boot}\0"                                \
+       ""
+
+#define CONFIG_BOOTCOMMAND     "bootp;bootelf"
+
+
+/*
+ * BOOTP options
+ */
+#define CONFIG_BOOTP_BOOTFILESIZE
+#define CONFIG_BOOTP_BOOTPATH
+#define CONFIG_BOOTP_GATEWAY
+#define CONFIG_BOOTP_HOSTNAME
+
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_ELF
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_EXT2
+#undef  CONFIG_CMD_IMLS
+#undef  CONFIG_CMD_FLASH
+#undef  CONFIG_CMD_LOADB
+#undef  CONFIG_CMD_LOADS
+#define CONFIG_CMD_DHCP
+
+#define CONFIG_DRIVER_NE2000
+#define CONFIG_DRIVER_NE2000_BASE      (0xb4000300)
+
+#define CFG_NO_FLASH
+#define CFG_NS16550
+#define CFG_NS16550_SERIAL
+#define CFG_NS16550_REG_SIZE    1
+#define CFG_NS16550_CLK         115200
+#define CFG_NS16550_COM1        (0xb40003f8)
+#define CONFIG_CONS_INDEX      1
+
+#define CONFIG_CMD_IDE
+#define CONFIG_DOS_PARTITION
+
+#define CFG_IDE_MAXBUS 2
+#define CFG_ATA_IDE0_OFFSET    (0x1f0)
+#define CFG_ATA_IDE1_OFFSET    (0x170)
+#define CFG_ATA_DATA_OFFSET    (0)
+#define CFG_ATA_REG_OFFSET     (0)
+#define CFG_ATA_BASE_ADDR      (0xb4000000)
+
+#define CFG_IDE_MAXDEVICE      (4)
+
+/*
+ * Miscellaneous configurable options
+ */
+#define        CFG_LONGHELP                            /* undef to save memory      */
+
+#define        CFG_PROMPT              "qemu-mips # "  /* Monitor Command Prompt    */
+
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_CMDLINE_EDITING
+#define CFG_HUSH_PARSER
+#define CFG_PROMPT_HUSH_PS2    "> "
+
+#define        CFG_CBSIZE              256             /* Console I/O Buffer Size   */
+#define        CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)  /* Print Buffer Size */
+#define        CFG_MAXARGS             16              /* max number of command args*/
+
+#define CFG_MALLOC_LEN         128*1024
+
+#define CFG_BOOTPARAMS_LEN     128*1024
+
+#define CFG_MHZ                        132
+
+#define CFG_HZ                  (CFG_MHZ * 1000000)
+
+#define CFG_SDRAM_BASE         0x80000000     /* Cached addr */
+
+#define        CFG_LOAD_ADDR           0x81000000     /* default load address  */
+
+#define CFG_MEMTEST_START      0x80100000
+#define CFG_MEMTEST_END                0x80800000
+
+/*-----------------------------------------------------------------------
+ * FLASH and environment organization
+ */
+
+/* The following #defines are needed to get flash environment right */
+#define        CFG_MONITOR_BASE        TEXT_BASE
+#define        CFG_MONITOR_LEN         (192 << 10)
+
+#define CFG_INIT_SP_OFFSET     0x400000
+
+/* We boot from this flash, selected with dip switch */
+#define CFG_FLASH_BASE         0xbfc00000
+
+#define        CFG_ENV_IS_NOWHERE      1
+
+/* Address and size of Primary Environment Sector      */
+#define CFG_ENV_SIZE           0x10000
+#undef CONFIG_NET_MULTI
+
+#define MEM_SIZE 128
+
+#undef CONFIG_MEMSIZE_IN_BYTES
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_DCACHE_SIZE                16384
+#define CFG_ICACHE_SIZE                16384
+#define CFG_CACHELINE_SIZE     32
+
+#endif /* __CONFIG_H */
index c050a061beb3a1342144d64c84915a2b49ea7103..0a7a90497501dcf33e8c7d46cda7d7af5378b8fa 100644 (file)
@@ -56,6 +56,7 @@
 #define CONFIG_MEM_INIT_VALUE          0xDeadBeef
 #define CONFIG_INTERRUPTS              /* enable pci, srio, ddr interrupts */
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 #define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
 
index b71ba785be8daf1251542a9ea5a25190dceb5fda..f9ede5f1879cc7b28aefcb6c0f2b8adc8eaa7fd0 100644 (file)
@@ -50,6 +50,7 @@
 #undef CONFIG_PCI                      /* pci ethernet support         */
 #undef  CONFIG_ETHER_ON_FCC            /* cpm FCC ethernet support     */
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 #define CONFIG_ENV_OVERWRITE
 
index 3baa32c8d6e057c8708612899c7e74fe29870c2e..047e1cf99a304e3465cae13e1d462dee6c0deb52 100644 (file)
@@ -51,6 +51,7 @@
 #define CONFIG_DDR_DLL                  /* possible DLL fix needed */
 #define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /* sysclk for MPC85xx
  */
index 9457bce0aea1ae5fc8d50c918003cf6ac7dd9080..e09dd7163f79d34e2e89616a2ab509b8e2743514 100644 (file)
@@ -51,6 +51,7 @@
 #undef CONFIG_DDR_DLL                  /* possible DLL fix needed */
 #define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
 
+#define CONFIG_FSL_LAW         1       /* Use common FSL init code */
 
 /* sysclk for MPC85xx
  */
index 39cecf21c2b52729d2b5a665fbf5e8a6ebfa9b37..df052e3d4c73fe2dcb62f13b5e5c7762e33a9e9d 100644 (file)
 #define SCCR_USBCM_3                   0x00F00000
 
 #elif defined(CONFIG_MPC8313)
+/* TSEC1 bits are for TSEC2 as well */
 #define SCCR_TSEC1CM                   0xc0000000
 #define SCCR_TSEC1CM_SHIFT             30
 #define SCCR_TSEC1CM_0                 0x00000000
 #define SCCR_TSEC1CM_2                 0x80000000
 #define SCCR_TSEC1CM_3                 0xC0000000
 
-#define SCCR_TSEC2CM                   0x30000000
-#define SCCR_TSEC2CM_SHIFT             28
-#define SCCR_TSEC2CM_0                 0x00000000
-#define SCCR_TSEC2CM_1                 0x10000000
-#define SCCR_TSEC2CM_2                 0x20000000
-#define SCCR_TSEC2CM_3                 0x30000000
-
 #define SCCR_TSEC1ON                   0x20000000
 #define SCCR_TSEC1ON_SHIFT             29
 #define SCCR_TSEC2ON                   0x10000000
 #define SCCR_PCIEXP2CM_3               0x000c0000
 
 /* All of the four SATA controllers must have the same clock ratio */
+#define SCCR_SATA1CM                   0x000000c0
+#define SCCR_SATA1CM_SHIFT             6
 #define SCCR_SATACM                    0x000000ff
 #define SCCR_SATACM_SHIFT              0
 #define SCCR_SATACM_0                  0x00000000
index 809ee3be92c29665861cef4fd296b0c15931d3d6..d6423d4f3f91b5316507a22e4735e7cb42781cbe 100644 (file)
@@ -264,6 +264,7 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)
 #ifndef CFG_ENV_IS_NOWHERE
        extern char * env_name_spec;
 #endif
+       char *s;
        cmd_tbl_t *cmdtp;
        bd_t *bd;
 
@@ -336,11 +337,20 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)
        /* initialize environment */
        env_relocate();
 
+       bd->bi_ip_addr = getenv_IPaddr ("ipaddr");
+
        devices_init();
        jumptable_init();
        console_init_r();
 
+       s = getenv("loadaddr");
+       if (s)
+               load_addr = simple_strtoul(s, NULL, 16);
+
 #if defined(CONFIG_CMD_NET)
+       s = getenv("bootfile");
+       if (s)
+               copy_filename(BootFile, s, sizeof(BootFile));
 #if defined(CONFIG_NET_MULTI)
        puts("Net:   ");
 #endif
index 43f97c404dabdde697e45fff5fb17055e85e5245..915920641dba42de9a5dd31c421d5f162e2d6849 100644 (file)
@@ -313,6 +313,16 @@ board_init_f (ulong bootflag)
        debug ("Reserving %ldk for protected RAM at %08lx\n", reg, addr);
 #endif /* CONFIG_PRAM */
 
+       /* round down to next 4 kB limit */
+       addr &= ~(4096 - 1);
+       debug ("Top of RAM usable for U-Boot at: %08lx\n", addr);
+
+#ifdef CONFIG_LCD
+       /* reserve memory for LCD display (always full pages) */
+       addr = lcd_setmem (addr);
+       gd->fb_base = addr;
+#endif /* CONFIG_LCD */
+
        /*
         * reserve memory for U-Boot code, data & bss
         * round down to next 4 kB limit
index 7b95246e1109450449ebdef77ccf9ecbfc3f7b10..45d1328f21ef71fa782b4c2b48a34731ea731b38 100644 (file)
@@ -87,6 +87,9 @@ void doc_init (void);
     defined(CONFIG_SOFT_I2C)
 #include <i2c.h>
 #endif
+#if defined(CONFIG_HARD_SPI)
+#include <spi.h>
+#endif
 #if defined(CONFIG_CMD_NAND)
 void nand_init (void);
 #endif
@@ -247,6 +250,16 @@ static int init_func_i2c (void)
 }
 #endif
 
+#if defined(CONFIG_HARD_SPI)
+static int init_func_spi (void)
+{
+       puts ("SPI:   ");
+       spi_init ();
+       puts ("ready\n");
+       return (0);
+}
+#endif
+
 /***********************************************************************/
 
 #if defined(CONFIG_WATCHDOG)
@@ -329,6 +342,9 @@ init_fnc_t *init_sequence[] = {
 #if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
        init_func_i2c,
 #endif
+#if defined(CONFIG_HARD_SPI)
+       init_func_spi,
+#endif
 #if defined(CONFIG_DTT)                /* Digital Thermometers and Thermostats */
        dtt_init,
 #endif
@@ -835,6 +851,11 @@ void board_init_r (gd_t *id, ulong dest_addr)
 #if defined(CONFIG_SC3)
        sc3_read_eeprom();
 #endif
+
+#ifdef CFG_ID_EEPROM
+       mac_read_from_eeprom();
+#endif
+
        s = getenv ("ethaddr");
 #if defined (CONFIG_MBX) || \
     defined (CONFIG_RPXCLASSIC) || \
@@ -902,10 +923,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
        }
 #endif
 
-#ifdef CFG_ID_EEPROM
-       mac_read_from_eeprom();
-#endif
-
 #if defined(CONFIG_TQM8xxL) || defined(CONFIG_TQM8260) || \
     defined(CONFIG_TQM8272) || \
     defined(CONFIG_CCM) || defined(CONFIG_KUP4K) || \
index 5d9e9c18898a52d0a7fd7121c976b0261184b738..75175ec62b90c8fc1d79f840dfe4c5b806ed256a 100644 (file)
--- a/net/eth.c
+++ b/net/eth.c
@@ -60,7 +60,9 @@ extern int npe_initialize(bd_t *);
 extern int uec_initialize(int);
 extern int bfin_EMAC_initialize(bd_t *);
 extern int atstk1000_eth_initialize(bd_t *);
+extern int atngw100_eth_initialize(bd_t *);
 extern int mcffec_initialize(bd_t*);
+extern int mcdmafec_initialize(bd_t*);
 
 #ifdef CONFIG_API
 extern void (*push_packet)(volatile void *, int);
@@ -217,6 +219,9 @@ int eth_initialize(bd_t *bis)
 #if defined(CONFIG_UEC_ETH3)
        uec_initialize(2);
 #endif
+#if defined(CONFIG_UEC_ETH4)
+       uec_initialize(3);
+#endif
 
 #if defined(FEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
        fec_initialize(bis);
@@ -269,9 +274,15 @@ int eth_initialize(bd_t *bis)
 #if defined(CONFIG_ATSTK1000)
        atstk1000_eth_initialize(bis);
 #endif
+#if defined(CONFIG_ATNGW100)
+       atngw100_eth_initialize(bis);
+#endif
 #if defined(CONFIG_MCFFEC)
        mcffec_initialize(bis);
 #endif
+#if defined(CONFIG_FSLDMAFEC)
+       mcdmafec_initialize(bis);
+#endif
 
        if (!eth_devices) {
                puts ("No ethernet found.\n");
@@ -522,6 +533,15 @@ int eth_receive(volatile void *packet, int length)
 void eth_try_another(int first_restart)
 {
        static struct eth_device *first_failed = NULL;
+       char *ethrotate;
+
+       /*
+        * Do not rotate between network interfaces when
+        * 'ethrotate' variable is set to 'no'.
+        */
+       if (((ethrotate = getenv ("ethrotate")) != NULL) &&
+           (strcmp(ethrotate, "no") == 0))
+               return;
 
        if (!eth_current)
                return;
index 77234838d9b806b1cc44e23623e1e63197bbd099..439f80d1f6586132799945e393a9f87ccaa85ec3 100644 (file)
@@ -49,7 +49,7 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-const static unsigned char syndrome_codes[] = {
+const static uint8_t syndrome_codes[] = {
        0xF4, 0XF1, 0XEC, 0XEA, 0XE9, 0XE6, 0XE5, 0XE3,
        0XDC, 0XDA, 0XD9, 0XD6, 0XD5, 0XD3, 0XCE, 0XCB,
        0xB5, 0XB0, 0XAD, 0XAB, 0XA8, 0XA7, 0XA4, 0XA2,
@@ -65,174 +65,183 @@ const static unsigned char syndrome_codes[] = {
 #define ECC_STOP_ADDR          0x2000
 #define ECC_PATTERN            0x01010101
 #define ECC_PATTERN_CORR       0x11010101
-#define ECC_PATTERN_UNCORR     0xF1010101
+#define ECC_PATTERN_UNCORR     0x61010101
 
-static int test_ecc_error(void)
+inline static void disable_ecc(void)
 {
-       unsigned long value;
-       unsigned long hdata, ldata, haddr, laddr;
-       unsigned int bit;
+       uint32_t value;
 
-       int ret = 0;
-
-       mfsdram(DDR0_23, value);
+       sync(); /* Wait for any pending memory accesses to complete. */
+       mfsdram(DDR0_22, value);
+       mtsdram(DDR0_22, (value & ~DDR0_22_CTRL_RAW_MASK)
+               | DDR0_22_CTRL_RAW_ECC_DISABLE);
+}
 
-       for (bit = 0; bit < sizeof(syndrome_codes); bit++)
-               if (syndrome_codes[bit] == ((value >> 16) & 0xff))
-                       break;
+inline static void clear_and_enable_ecc(void)
+{
+       uint32_t value;
 
+       sync(); /* Wait for any pending memory accesses to complete. */
        mfsdram(DDR0_00, value);
+       mtsdram(DDR0_00, value | DDR0_00_INT_ACK_ALL);
+       mfsdram(DDR0_22, value);
+       mtsdram(DDR0_22, (value & ~DDR0_22_CTRL_RAW_MASK)
+               | DDR0_22_CTRL_RAW_ECC_ENABLE);
+}
+
+static uint32_t get_ecc_status(void)
+{
+       uint32_t int_status;
+#if defined(DEBUG)
+       uint8_t syndrome;
+       uint32_t hdata, ldata, haddr, laddr;
+       uint32_t value;
+#endif
+
+       mfsdram(DDR0_00, int_status);
+       int_status &= DDR0_00_INT_STATUS_MASK;
 
-       if (value & DDR0_00_INT_STATUS_BIT0) {
-               debug("Bit0. A single access outside the defined PHYSICAL"
-                     " memory space detected\n");
+#if defined(DEBUG)
+       if (int_status & (DDR0_00_INT_STATUS_BIT0 | DDR0_00_INT_STATUS_BIT1)) {
                mfsdram(DDR0_32, laddr);
                mfsdram(DDR0_33, haddr);
-               debug("        addr = 0x%08x%08x\n", haddr, laddr);
-               ret = 1;
-       }
-       if (value & DDR0_00_INT_STATUS_BIT1) {
-               debug("Bit1. Multiple accesses outside the defined PHYSICAL"
-                     " memory space detected\n");
-               ret = 2;
-       }
-       if (value & DDR0_00_INT_STATUS_BIT2) {
-               debug("Bit2. Single correctable ECC event detected\n");
-               mfsdram(DDR0_38, laddr);
-               mfsdram(DDR0_39, haddr);
-               mfsdram(DDR0_40, ldata);
-               mfsdram(DDR0_41, hdata);
-               debug("        0x%08x - 0x%08x%08x, bit - %d\n",
-                     laddr, hdata, ldata, bit);
-               ret = 3;
+               haddr &= 0x00000001;
+               if (int_status & DDR0_00_INT_STATUS_BIT1)
+                       debug("Multiple accesses");
+               else
+                       debug("A single access");
+
+               debug(" outside the defined physical memory space detected\n"
+                     "        addr = 0x%01x%08x\n", haddr, laddr);
        }
-       if (value & DDR0_00_INT_STATUS_BIT3) {
-               debug("Bit3. Multiple correctable ECC events detected\n");
+       if (int_status & (DDR0_00_INT_STATUS_BIT2 | DDR0_00_INT_STATUS_BIT3)) {
+               unsigned int bit;
+
+               mfsdram(DDR0_23, value);
+               syndrome = (value >> 16) & 0xff;
+               for (bit = 0; bit < sizeof(syndrome_codes); bit++)
+                       if (syndrome_codes[bit] == syndrome)
+                               break;
+
                mfsdram(DDR0_38, laddr);
                mfsdram(DDR0_39, haddr);
+               haddr &= 0x00000001;
                mfsdram(DDR0_40, ldata);
                mfsdram(DDR0_41, hdata);
-               debug("        0x%08x - 0x%08x%08x, bit - %d\n",
-                     laddr, hdata, ldata, bit);
-               ret = 4;
-       }
-       if (value & DDR0_00_INT_STATUS_BIT4) {
-               debug("Bit4. Single uncorrectable ECC event detected\n");
-               mfsdram(DDR0_34, laddr);
-               mfsdram(DDR0_35, haddr);
-               mfsdram(DDR0_36, ldata);
-               mfsdram(DDR0_37, hdata);
-               debug("        0x%08x - 0x%08x%08x, bit - %d\n",
-                     laddr, hdata, ldata, bit);
-               ret = 5;
+               if (int_status & DDR0_00_INT_STATUS_BIT3)
+                       debug("Multiple correctable ECC events");
+               else
+                       debug("Single correctable ECC event");
+
+               debug(" detected\n        0x%01x%08x - 0x%08x%08x, bit - %d\n",
+                     haddr, laddr, hdata, ldata, bit);
        }
-       if (value & DDR0_00_INT_STATUS_BIT5) {
-               debug("Bit5. Multiple uncorrectable ECC events detected\n");
+       if (int_status & (DDR0_00_INT_STATUS_BIT4 | DDR0_00_INT_STATUS_BIT5)) {
+               mfsdram(DDR0_23, value);
+               syndrome = (value >> 8) & 0xff;
                mfsdram(DDR0_34, laddr);
                mfsdram(DDR0_35, haddr);
+               haddr &= 0x00000001;
                mfsdram(DDR0_36, ldata);
                mfsdram(DDR0_37, hdata);
-               debug("        0x%08x - 0x%08x%08x, bit - %d\n",
-                     laddr, hdata, ldata, bit);
-               ret = 6;
-       }
-       if (value & DDR0_00_INT_STATUS_BIT6) {
-               debug("Bit6. DRAM initialization complete\n");
-               ret = 7;
+               if (int_status & DDR0_00_INT_STATUS_BIT5)
+                       debug("Multiple uncorrectable ECC events");
+               else
+                       debug("Single uncorrectable ECC event");
+
+               debug(" detected\n        0x%01x%08x - 0x%08x%08x, "
+                     "syndrome - 0x%02x\n",
+                     haddr, laddr, hdata, ldata, syndrome);
        }
+       if (int_status & DDR0_00_INT_STATUS_BIT6)
+               debug("DRAM initialization complete\n");
+#endif /* defined(DEBUG) */
 
-       /* error status cleared */
-       mfsdram(DDR0_00, value);
-       mtsdram(DDR0_00, value | DDR0_00_INT_ACK_ALL);
-
-       return ret;
+       return int_status;
 }
 
-static int test_ecc(unsigned long ecc_addr)
+static int test_ecc(uint32_t ecc_addr)
 {
-       unsigned long value;
-       volatile unsigned *const ecc_mem = (volatile unsigned *) ecc_addr;
-       int pret;
+       uint32_t value;
+       volatile uint32_t *const ecc_mem = (volatile uint32_t *)ecc_addr;
        int ret = 0;
 
-       sync();
-       eieio();
        WATCHDOG_RESET();
 
-       debug("Entering test_ecc(0x%08lX)\n", ecc_addr);
+       debug("Entering test_ecc(0x%08x)\n", ecc_addr);
+       /* Set up correct ECC in memory */
+       disable_ecc();
+       clear_and_enable_ecc();
        out_be32(ecc_mem, ECC_PATTERN);
        out_be32(ecc_mem + 1, ECC_PATTERN);
-       in_be32(ecc_mem);
-       pret = test_ecc_error();
-       if (pret != 0) {
-               debug("pret: expected 0, got %d\n", pret);
+
+       /* Verify no ECC error reading back */
+       value = in_be32(ecc_mem);
+       disable_ecc();
+       if (ECC_PATTERN != value) {
+               debug("Data read error (no-error case): "
+                     "expected 0x%08x, read 0x%08x\n", ECC_PATTERN, value);
+               ret = 1;
+       }
+       value = get_ecc_status();
+       if (0x00000000 != value) {
+               /* Expected no ECC status reported */
+               debug("get_ecc_status(): expected 0x%08x, got 0x%08x\n",
+                     0x00000000, value);
                ret = 1;
        }
-       /* test for correctable error */
-       /* disconnect from ecc storage */
-       mfsdram(DDR0_22, value);
-       mtsdram(DDR0_22, (value & ~DDR0_22_CTRL_RAW_MASK)
-               | DDR0_22_CTRL_RAW_ECC_DISABLE);
 
-       /* creating (correctable) single-bit error */
+       /* Test for correctable error by creating a one-bit error */
        out_be32(ecc_mem, ECC_PATTERN_CORR);
-
-       /* enable ecc */
-       mfsdram(DDR0_22, value);
-       mtsdram(DDR0_22, (value & ~DDR0_22_CTRL_RAW_MASK)
-               | DDR0_22_CTRL_RAW_ECC_ENABLE);
-       sync();
-       eieio();
-
-       in_be32(ecc_mem);
-       pret = test_ecc_error();
-       /* if read data ok, 1 correctable error must be fixed */
-       if (pret != 3) {
-               debug("pret: expected 3, got %d\n", pret);
+       clear_and_enable_ecc();
+       value = in_be32(ecc_mem);
+       disable_ecc();
+       /* Test that the corrected data was read */
+       if (ECC_PATTERN != value) {
+               debug("Data read error (correctable-error case): "
+                     "expected 0x%08x, read 0x%08x\n", ECC_PATTERN, value);
+               ret = 1;
+       }
+       value = get_ecc_status();
+       if ((DDR0_00_INT_STATUS_BIT2 | DDR0_00_INT_STATUS_BIT7) != value) {
+               /* Expected a single correctable error reported */
+               debug("get_ecc_status(): expected 0x%08x, got 0x%08x\n",
+                     DDR0_00_INT_STATUS_BIT2, value);
                ret = 1;
        }
-       /* test for uncorrectable error */
-       /* disconnect from ecc storage */
-       mfsdram(DDR0_22, value);
-       mtsdram(DDR0_22, (value & ~DDR0_22_CTRL_RAW_MASK)
-               | DDR0_22_CTRL_RAW_NO_ECC_RAM);
 
-       /* creating (uncorrectable) multiple-bit error */
+       /* Test for uncorrectable error by creating a two-bit error */
        out_be32(ecc_mem, ECC_PATTERN_UNCORR);
-
-       /* enable ecc */
-       mfsdram(DDR0_22, value);
-       mtsdram(DDR0_22, (value & ~DDR0_22_CTRL_RAW_MASK)
-               | DDR0_22_CTRL_RAW_ECC_ENABLE);
-       sync();
-       eieio();
-
-       in_be32(ecc_mem);
-       pret = test_ecc_error();
-       /* info about uncorrectable error must appear */
-       if (pret != 5) {
-               debug("pret: expected 5, got %d\n", pret);
+       clear_and_enable_ecc();
+       value = in_be32(ecc_mem);
+       disable_ecc();
+       /* Test that the corrected data was read */
+       if (ECC_PATTERN_UNCORR != value) {
+               debug("Data read error (uncorrectable-error case): "
+                     "expected 0x%08x, read 0x%08x\n", ECC_PATTERN_UNCORR,
+                     value);
+               ret = 1;
+       }
+       value = get_ecc_status();
+       if ((DDR0_00_INT_STATUS_BIT4 | DDR0_00_INT_STATUS_BIT7) != value) {
+               /* Expected a single uncorrectable error reported */
+               debug("get_ecc_status(): expected 0x%08x, got 0x%08x\n",
+                     DDR0_00_INT_STATUS_BIT4, value);
                ret = 1;
        }
-       /* remove error from SDRAM */
+
+       /* Remove error from SDRAM and enable ECC. */
        out_be32(ecc_mem, ECC_PATTERN);
-       /* clear error caused by read-modify-write */
-       mfsdram(DDR0_00, value);
-       mtsdram(DDR0_00, value | DDR0_00_INT_ACK_ALL);
+       clear_and_enable_ecc();
 
-       sync();
-       eieio();
        return ret;
 }
 
-int ecc_post_test (int flags)
+int ecc_post_test(int flags)
 {
        int ret = 0;
-       unsigned long value;
-       unsigned long iaddr;
-
-       sync();
-       eieio();
+       uint32_t value;
+       uint32_t iaddr;
 
        mfsdram(DDR0_22, value);
        if (0x3 != DDR0_22_CTRL_RAW_DECODE(value)) {
@@ -240,28 +249,23 @@ int ecc_post_test (int flags)
                return 0;
        }
 
-       /* mask all int */
+       /* Mask all interrupts. */
        mfsdram(DDR0_01, value);
        mtsdram(DDR0_01, (value & ~DDR0_01_INT_MASK_MASK)
                | DDR0_01_INT_MASK_ALL_OFF);
 
-       /* clear error status */
-       mfsdram(DDR0_00, value);
-       mtsdram(DDR0_00, value | DDR0_00_INT_ACK_ALL);
-
        for (iaddr = ECC_START_ADDR; iaddr <= ECC_STOP_ADDR; iaddr += iaddr) {
                ret = test_ecc(iaddr);
                if (ret)
                        break;
        }
        /*
-        * Clear possible errors resulting from ECC testing.
-        * If not done, then we could get an interrupt later on when
-        * exceptions are enabled.
+        * Clear possible errors resulting from ECC testing.  (If not done, we
+        * we could get an interrupt later on when exceptions are enabled.)
         */
        set_mcsr(get_mcsr());
+       debug("ecc_post_test() returning %d\n", ret);
        return ret;
-
 }
 #endif /* CONFIG_POST & CFG_POST_ECC */
 #endif /* defined(CONFIG_POST) && ... */
index 3e746343d151770162e214df59b6f60e300ada16..c12e378f54aee9241965b4322685484d5c9ddd79 100644 (file)
@@ -80,7 +80,9 @@ static struct {
        {0x107, "SPRG7",        0x00000000,     0x00000000},
        {0x10c, "TBL",          0x00000000,     0x00000000},
        {0x10d, "TBU",          0x00000000,     0x00000000},
+#ifdef CONFIG_440
        {0x11e, "PIR",          0x0000000f,     0x00000000},
+#endif
        {0x130, "DBSR",         0x00000000,     0x00000000},
        {0x134, "DBCR0",        0x00000000,     0x00000000},
        {0x135, "DBCR1",        0x00000000,     0x00000000},
@@ -95,6 +97,7 @@ static struct {
        {0x13f, "DVC2",         0x00000000,     0x00000000},
        {0x150, "TSR",          0x00000000,     0x00000000},
        {0x154, "TCR",          0x00000000,     0x00000000},
+#ifdef CONFIG_440
        {0x190, "IVOR0",        0x0000fff0,     0x00000100},
        {0x191, "IVOR1",        0x0000fff0,     0x00000200},
        {0x192, "IVOR2",        0x0000fff0,     0x00000300},
@@ -111,6 +114,7 @@ static struct {
        {0x19d, "IVOR13",       0x0000fff0,     0x00001300},
        {0x19e, "IVOR14",       0x0000fff0,     0x00001400},
        {0x19f, "IVOR15",       0x0000fff0,     0x00002000},
+#endif
        {0x23a, "MCSRR0",       0x00000000,     0x00000000},
        {0x23b, "MCSRR1",       0x00000000,     0x00000000},
        {0x23c, "MCSR",         0x00000000,     0x00000000},
@@ -131,8 +135,10 @@ static struct {
        {0x395, "DTV1",         0x00000000,     0x00000000},
        {0x396, "DTV2",         0x00000000,     0x00000000},
        {0x397, "DTV3",         0x00000000,     0x00000000},
+#ifdef CONFIG_440
        {0x398, "DVLIM",        0x0fc1f83f,     0x0001f800},
        {0x399, "IVLIM",        0x0fc1f83f,     0x0001f800},
+#endif
        {0x39b, "RSTCFG",       0x00000000,     0x00000000},
        {0x39c, "DCDBTRL",      0x00000000,     0x00000000},
        {0x39d, "DCDBTRH",      0x00000000,     0x00000000},