]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
Merge with /home/stefan/git/u-boot/bamboo-nand
authorStefan Roese <sr@denx.de>
Fri, 1 Jun 2007 14:15:34 +0000 (16:15 +0200)
committerStefan Roese <sr@denx.de>
Fri, 1 Jun 2007 14:15:34 +0000 (16:15 +0200)
338 files changed:
CHANGELOG
MAINTAINERS
MAKEALL
Makefile
README
avr32_config.mk
board/amcc/acadia/acadia.c
board/amcc/sequoia/sdram.c
board/amcc/sequoia/sequoia.c
board/atmel/atstk1000/Makefile
board/atmel/atstk1000/atstk1000.c
board/atmel/atstk1000/eth.c [moved from cpu/at32ap/at32ap7000/hebi.c with 66% similarity]
board/atmel/atstk1000/flash.c
board/atmel/atstk1000/u-boot.lds
board/bf533-ezkit/Makefile
board/bf533-ezkit/bf533-ezkit.c
board/bf533-ezkit/flash-defines.h
board/bf533-ezkit/flash.c
board/bf533-ezkit/psd4256.h
board/bf533-stamp/Makefile
board/bf533-stamp/bf533-stamp.c
board/bf533-stamp/bf533-stamp.h
board/bf537-stamp/bf537-stamp.c
board/bf537-stamp/flash-defines.h
board/bf537-stamp/flash.c
board/bf561-ezkit/bf561-ezkit.c
board/cds/mpc8541cds/mpc8541cds.c
board/cds/mpc8541cds/u-boot.lds
board/cds/mpc8548cds/init.S
board/cds/mpc8548cds/mpc8548cds.c
board/cds/mpc8548cds/u-boot.lds
board/cds/mpc8555cds/mpc8555cds.c
board/cds/mpc8555cds/u-boot.lds
board/freescale/common/pixis.c [moved from board/mpc8641hpcn/pixis.c with 60% similarity]
board/freescale/common/pixis.h [moved from board/mpc8641hpcn/pixis.h with 89% similarity]
board/freescale/mpc8544ds/Makefile [new file with mode: 0644]
board/freescale/mpc8544ds/config.mk [new file with mode: 0644]
board/freescale/mpc8544ds/init.S [new file with mode: 0644]
board/freescale/mpc8544ds/mpc8544ds.c [new file with mode: 0644]
board/freescale/mpc8544ds/u-boot.lds [new file with mode: 0644]
board/ixdp425/config.mk
board/mcc200/lcd.c
board/motionpro/motionpro.c
board/mpc7448hpc2/Makefile [new file with mode: 0644]
board/mpc7448hpc2/asm_init.S [new file with mode: 0644]
board/mpc7448hpc2/config.mk [new file with mode: 0644]
board/mpc7448hpc2/mpc7448hpc2.c [new file with mode: 0644]
board/mpc7448hpc2/tsi108_init.c [new file with mode: 0644]
board/mpc7448hpc2/u-boot.lds [new file with mode: 0644]
board/mpc8313erdb/Makefile [new file with mode: 0644]
board/mpc8313erdb/config.mk [new file with mode: 0644]
board/mpc8313erdb/mpc8313erdb.c [new file with mode: 0644]
board/mpc8313erdb/sdram.c [new file with mode: 0644]
board/mpc8313erdb/u-boot.lds [new file with mode: 0644]
board/mpc8349itx/mpc8349itx.c
board/mpc8360emds/config.mk
board/mpc8360emds/mpc8360emds.c
board/mpc8540ads/init.S
board/mpc8560ads/init.S
board/mpc8568mds/Makefile [new file with mode: 0644]
board/mpc8568mds/bcsr.c [new file with mode: 0644]
board/mpc8568mds/bcsr.h [new file with mode: 0644]
board/mpc8568mds/config.mk [new file with mode: 0644]
board/mpc8568mds/ft_board.c [moved from cpu/microblaze/disable_int.S with 54% similarity]
board/mpc8568mds/init.S [new file with mode: 0644]
board/mpc8568mds/mpc8568mds.c [new file with mode: 0644]
board/mpc8568mds/u-boot.lds [new file with mode: 0644]
board/mpc8641hpcn/Makefile
board/mpc8641hpcn/init.S
board/mpc8641hpcn/mpc8641hpcn.c
board/nc650/config.mk
board/nc650/nc650.c
board/prodrive/pdnb3/config.mk
board/stxssa/Makefile [new file with mode: 0644]
board/stxssa/config.mk [new file with mode: 0644]
board/stxssa/init.S [new file with mode: 0644]
board/stxssa/stxssa.c [new file with mode: 0644]
board/stxssa/u-boot.lds [new file with mode: 0644]
board/xilinx/ml401/config.mk
board/xilinx/ml401/ml401.c
board/xilinx/ml401/xparameters.h [changed mode: 0644->0755]
common/Makefile
common/cmd_bootm.c
common/cmd_fdt.c
common/cmd_mfsl.c [new file with mode: 0644]
common/cmd_nvedit.c
common/console.c
common/fdt_support.c [new file with mode: 0644]
common/main.c
cpu/74xx_7xx/cpu.c
cpu/74xx_7xx/cpu_init.c
cpu/74xx_7xx/speed.c
cpu/at32ap/Makefile
cpu/at32ap/at32ap7000/Makefile
cpu/at32ap/at32ap7000/devices.c [deleted file]
cpu/at32ap/at32ap7000/gpio.c [new file with mode: 0644]
cpu/at32ap/atmel_mci.c [new file with mode: 0644]
cpu/at32ap/atmel_mci.h [new file with mode: 0644]
cpu/at32ap/cpu.c
cpu/at32ap/device.c [deleted file]
cpu/at32ap/entry.S
cpu/at32ap/exception.c
cpu/at32ap/hsdramc.c
cpu/at32ap/hsdramc1.h
cpu/at32ap/hsmc3.h
cpu/at32ap/interrupts.c
cpu/at32ap/pio.c
cpu/at32ap/pio2.h
cpu/at32ap/pm.c
cpu/at32ap/sm.h
cpu/at32ap/start.S
cpu/bf533/Makefile
cpu/bf533/bf533_serial.h
cpu/bf533/config.mk
cpu/bf533/cpu.c
cpu/bf533/cpu.h
cpu/bf533/flush.S
cpu/bf533/interrupt.S
cpu/bf533/interrupts.c
cpu/bf533/ints.c
cpu/bf533/serial.c
cpu/bf533/start.S
cpu/bf533/start1.S
cpu/bf533/traps.c
cpu/bf537/Makefile
cpu/bf537/config.mk
cpu/bf537/cpu.c
cpu/bf537/cpu.h
cpu/bf537/flush.S
cpu/bf537/interrupt.S
cpu/bf537/interrupts.c
cpu/bf537/ints.c
cpu/bf537/serial.c
cpu/bf537/serial.h
cpu/bf537/start.S
cpu/bf537/start1.S
cpu/bf537/traps.c
cpu/bf561/Makefile
cpu/bf561/config.mk
cpu/bf561/cpu.c
cpu/bf561/cpu.h
cpu/bf561/flush.S
cpu/bf561/interrupt.S
cpu/bf561/interrupts.c
cpu/bf561/ints.c
cpu/bf561/serial.c
cpu/bf561/serial.h
cpu/bf561/start.S
cpu/bf561/start1.S
cpu/bf561/traps.c
cpu/ixp/npe/Makefile
cpu/microblaze/Makefile
cpu/microblaze/cache.c [changed mode: 0644->0755]
cpu/microblaze/dcache.S [deleted file]
cpu/microblaze/exception.c
cpu/microblaze/icache.S [deleted file]
cpu/microblaze/interrupts.c [changed mode: 0644->0755]
cpu/microblaze/irq.S [changed mode: 0644->0755]
cpu/microblaze/start.S
cpu/microblaze/timer.c
cpu/mpc5xxx/cpu.c
cpu/mpc5xxx/cpu_init.c
cpu/mpc5xxx/fec.c
cpu/mpc83xx/Makefile
cpu/mpc83xx/cpu.c
cpu/mpc83xx/pci.c [new file with mode: 0644]
cpu/mpc83xx/spd_sdram.c
cpu/mpc83xx/speed.c
cpu/mpc85xx/cpu.c
cpu/mpc85xx/cpu_init.c
cpu/mpc85xx/pci.c
cpu/mpc85xx/spd_sdram.c
cpu/mpc85xx/speed.c
cpu/mpc85xx/start.S
cpu/mpc86xx/cpu.c
cpu/mpc86xx/spd_sdram.c
cpu/mpc86xx/start.S
cpu/ppc4xx/44x_spd_ddr2.c
cpu/ppc4xx/4xx_enet.c
cpu/ppc4xx/ndfc.c
cpu/ppc4xx/start.S
disk/part.c
doc/README.NetConsole
doc/README.mpc7448hpc2 [new file with mode: 0644]
doc/README.mpc8313erdb [new file with mode: 0644]
doc/README.mpc8641hpcn
doc/README.nand
doc/README.sbc8560 [deleted file]
drivers/Makefile
drivers/atmel_usart.c
drivers/atmel_usart.h
drivers/macb.c [new file with mode: 0644]
drivers/macb.h [new file with mode: 0644]
drivers/nand/nand_base.c
drivers/pci_auto.c
drivers/smc91111.c
drivers/systemace.c
drivers/tsec.c
drivers/tsec.h
drivers/tsi108_eth.c [new file with mode: 0644]
drivers/tsi108_i2c.c [new file with mode: 0644]
drivers/tsi108_pci.c [new file with mode: 0644]
fs/jffs2/compr_zlib.c
include/74xx_7xx.h
include/asm-avr32/arch-at32ap7000/clk.h [new file with mode: 0644]
include/asm-avr32/arch-at32ap7000/gpio.h [new file with mode: 0644]
include/asm-avr32/arch-at32ap7000/hmatrix2.h
include/asm-avr32/arch-at32ap7000/memory-map.h
include/asm-avr32/arch-at32ap7000/mmc.h [new file with mode: 0644]
include/asm-avr32/arch-at32ap7000/platform.h [deleted file]
include/asm-avr32/global_data.h
include/asm-avr32/initcalls.h
include/asm-blackfin/arch-bf533/bf533_serial.h
include/asm-blackfin/arch-bf533/bf5xx_rtc.h
include/asm-blackfin/arch-bf533/cplbtab.h [deleted file]
include/asm-blackfin/arch-bf533/irq.h
include/asm-blackfin/arch-bf537/bf537_serial.h
include/asm-blackfin/arch-bf537/bf5xx_rtc.h
include/asm-blackfin/arch-bf537/cplbtab.h [deleted file]
include/asm-blackfin/arch-bf537/irq.h
include/asm-blackfin/arch-bf561/bf561_serial.h
include/asm-blackfin/arch-common/bf53x_rtc.h
include/asm-blackfin/bitops.h
include/asm-blackfin/blackfin.h
include/asm-blackfin/blackfin_defs.h
include/asm-blackfin/byteorder.h
include/asm-blackfin/cplb.h
include/asm-blackfin/current.h
include/asm-blackfin/delay.h
include/asm-blackfin/entry.h
include/asm-blackfin/errno.h
include/asm-blackfin/global_data.h
include/asm-blackfin/hw_irq.h
include/asm-blackfin/io-kernel.h
include/asm-blackfin/io.h
include/asm-blackfin/irq.h
include/asm-blackfin/linkage.h
include/asm-blackfin/machdep.h
include/asm-blackfin/mem_init.h
include/asm-blackfin/page.h [deleted file]
include/asm-blackfin/page_offset.h
include/asm-blackfin/posix_types.h
include/asm-blackfin/processor.h
include/asm-blackfin/ptrace.h
include/asm-blackfin/segment.h
include/asm-blackfin/setup.h
include/asm-blackfin/shared_resources.h
include/asm-blackfin/string.h
include/asm-blackfin/system.h
include/asm-blackfin/traps.h
include/asm-blackfin/types.h
include/asm-blackfin/u-boot.h
include/asm-blackfin/uaccess.h
include/asm-blackfin/virtconvert.h
include/asm-microblaze/asm.h [new file with mode: 0755]
include/asm-microblaze/microblaze_intc.h
include/asm-ppc/e300.h
include/asm-ppc/global_data.h
include/asm-ppc/immap_83xx.h
include/asm-ppc/mmu.h
include/asm-ppc/processor.h
include/cmd_confdefs.h
include/common.h
include/configs/BC3450.h
include/configs/IceCube.h
include/configs/MPC8313ERDB.h [new file with mode: 0644]
include/configs/MPC8349ITX.h
include/configs/MPC8540ADS.h
include/configs/MPC8541CDS.h
include/configs/MPC8544DS.h [new file with mode: 0644]
include/configs/MPC8548CDS.h
include/configs/MPC8560ADS.h
include/configs/MPC8568MDS.h [new file with mode: 0644]
include/configs/NC650.h
include/configs/PM520.h
include/configs/SBC8560.h [deleted file]
include/configs/TB5200.h
include/configs/TOP5200.h
include/configs/TQM5200.h
include/configs/Total5200.h
include/configs/acadia.h
include/configs/aev.h
include/configs/atstk1002.h
include/configs/canmb.h
include/configs/cpci5200.h
include/configs/delta.h
include/configs/hmi1001.h
include/configs/inka4x0.h
include/configs/luan.h
include/configs/mcc200.h
include/configs/ml401.h
include/configs/motionpro.h
include/configs/mpc7448hpc2.h [new file with mode: 0644]
include/configs/o2dnt.h
include/configs/pf5200.h
include/configs/sequoia.h
include/configs/smmaco4.h
include/configs/spieval.h
include/configs/stxssa.h [new file with mode: 0644]
include/configs/uc101.h
include/configs/v38b.h
include/configs/xupv2p.h
include/configs/zylonite.h
include/fdt.h
include/fdt_support.h [moved from cpu/microblaze/enable_int.S with 59% similarity]
include/libfdt.h
include/libfdt_env.h
include/linux/mii.h [new file with mode: 0644]
include/linux/stat.h
include/mpc83xx.h
include/mpc86xx.h
include/ppc405.h
include/ppc440.h
include/status_led.h
include/tsi108.h [new file with mode: 0644]
lib_avr32/avr32_linux.c
lib_avr32/board.c
lib_blackfin/Makefile
lib_blackfin/bf533_linux.c
lib_blackfin/bf533_string.c
lib_blackfin/blackfin_board.h
lib_blackfin/board.c
lib_blackfin/cache.c
lib_blackfin/cache.h [new file with mode: 0644]
lib_blackfin/memcmp.S
lib_blackfin/memcpy.S
lib_blackfin/memmove.S
lib_blackfin/memset.S
lib_blackfin/muldi3.c
lib_ppc/board.c
lib_ppc/extable.c
libfdt/fdt.c
libfdt/fdt_ro.c
libfdt/fdt_rw.c
libfdt/fdt_wip.c
nand_spl/board/amcc/sequoia/Makefile
net/eth.c
net/net.c

index b07f80a6b69e6b90ddf98c767e010b1a54033b35..24d805eb389af244a8cd54a2c16aeb6c09ed71c8 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
+commit d62f64cc23a940eafe712c776b3249e4160753d1
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed May 16 00:13:33 2007 +0200
+
+    Coding Style Cleanup, new CHANGELOG
+
+commit 7d98ba770a7eaefa29ce927f31a0956df85bf650
+Author: Piotr Kruszynski <ppk@semihalf.com>
+Date:  Thu May 10 16:55:52 2007 +0200
+
+    [Motion-PRO] Add MTD and JFFS2 support, also add default partition
+    definition.
+
+commit e69f66c6ebe82bbbd1da766bc4eda40ec7ee5af1
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Tue May 8 15:57:43 2007 +0200
+
+    add: reading special purpose registers
+
+commit 1a50f164beb065f360fbddb76029607d6b099698
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Tue May 8 14:52:52 2007 +0200
+
+    add: Microblaze V5 exception handling
+
+commit ab874d5047e5d30dbc1e517ff26083efffa98ecb
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Tue May 8 14:39:11 2007 +0200
+
+    add: FSL control read and write
+
+commit de1de02a7cbf05e6b63e0d8ffc624f12493f6ba3
+Author: Piotr Kruszynski <ppk@semihalf.com>
+Date:  Tue May 8 13:05:44 2007 +0200
+
+    [Motion-PRO] Add support for I2C, EEPROM and RTC.
+
+commit fa5c2ba123b1bf88455bfc21db5e786ca045029d
+Author: Bartlomiej Sieka <tur@semihalf.com>
+Date:  Tue May 8 10:23:56 2007 +0200
+
+    [Motion-PRO] Add ATA support. Add CF-booting commands to the default
+    environment.
+
+commit 06241d50a3ab1b20a0b08baeeaffcaa23ae4b839
+Author: Bartlomiej Sieka <tur@semihalf.com>
+Date:  Tue May 8 09:39:12 2007 +0200
+
+    [Motion-PRO] Change IPB clock frequency from 50MHz to 100MHz. This
+    eliminates networking problems in Linux (timeouts).
+
+commit 1f1369c34b629be94702684d41d3fddf0f6193e7
+Author: Bartlomiej Sieka <tur@semihalf.com>
+Date:  Tue May 8 09:21:57 2007 +0200
+
+    [Motion-PRO] Enable Flat Device Tree support and modify default environment
+    to allow booting of FDT-expecting kernels.
+
+commit fb05f6da35ea1c15c553abe6f23f656bf18dc5db
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Mon May 7 23:58:31 2007 +0200
+
+    new: USE_MSR_INTR support
+
+commit 008861a2f3ef2c062744d733787c7e530a1b8761
+Author: Bartlomiej Sieka <tur@semihalf.com>
+Date:  Mon May 7 22:36:15 2007 +0200
+
+    [MPC5xxx] There are networking problems on the Motion-PRO board with
+    current PHY initalization code (tftp timeouts all the time). This commit
+    temporarily disables PHY initalization sequence to make the networking
+    operational, until a fix is found.
+
+commit abca901869c3760b6c5fecb825db6c1d91a78a93
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Mon May 7 22:10:36 2007 +0200
+
+    Get rid of duplicated file (see include/configs/sbc8560.h instead)
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 207b7b2c9d9752e0f6478c30c29b7087f6e6cbb6
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Mon May 7 22:07:08 2007 +0200
+
+    Get rid of duplicated file (see doc/README.SBC8560 instead)
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit a7bac7e9b57ba948051beb19ec5be3a75ce75383
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Mon May 7 19:43:10 2007 +0200
+
+    fix: read and write MSR - repair number of parameters
+
+commit 19bf1fbad7f19d5a120be9b1daf136e052fcab39
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Mon May 7 19:33:51 2007 +0200
+
+    new: fsl interrupt support
+    FSL_Has_data is connected to INTC.
+
+commit 792032baa7d625e34c981ab6df521911bd8dc861
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Mon May 7 19:30:12 2007 +0200
+
+    fix: interrupt handler
+    remove asm code
+
+commit f3f001a341ef185d0f13841be5b5dc3395aacc31
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Mon May 7 19:25:08 2007 +0200
+
+    fix: remove asm code
+
+commit fb7c2dbef02c9f6f8d7b04ec4c2bfb91418b9c01
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Mon May 7 19:12:43 2007 +0200
+
+    fix: clean interrupt
+
+commit 42efed6130c8fcf7da881385b5427065d2801757
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Mon May 7 17:22:25 2007 +0200
+
+    fix: interrupt handler for multiple sources
+
+commit 48fbd3a4cdabbebc1debd7eed73c00c2caf914f6
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Mon May 7 17:11:09 2007 +0200
+
+    new: add writing to msr register
+
+commit ac4cd59d59c9bf3f89cb7a344abf8184d678f562
+Author: Timur Tabi <timur@freescale.com>
+Date:  Sat May 5 08:12:30 2007 +0200
+
+    5xxx: write MAC address to mac-address and local-mac-address
+
+    Some device trees have a mac-address property, some have local-mac-address,
+    and some have both.  To support all of these device trees, ftp_cpu_setup()
+    should write the MAC address to mac-address and local-mac-address, if they
+    exist.
+
+    Signed-off-by: Timur Tabi <timur@freescale.com>
+    Acked-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit a9d87e2707dcb249f6bb7f7ff7e00acd8cda9fd2
+Author: Grzegorz Wianecki <grzegorz.wianecki@gmail.com>
+Date:  Sun Apr 29 14:01:54 2007 +0200
+
+    [PATCH] Use PVR to distinguish MPC5200B from MPC5200 in boot message
+
+    MPC5200B systems are incorrectly reported as MPC5200 in U-Boot start-up
+    message. Use PVR to distinguish between the two variants, and print proper CPU
+    information.
+
+    Signed-off-by: Grzegorz Wianecki <grzegorz.wianecki@gmail.com>
+    Signed-off-by: Bartlomiej Sieka <tur@semihalf.com>
+    Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 4ec5bd55ed1ffa91a774af298769621f4fbb18c1
+Author: Ladislav Michl <ladis@linux-mips.org>
+Date:  Wed Apr 25 16:01:26 2007 +0200
+
+    [PATCH] simplify silent console
+
+    Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
+    Acked-by: Stefan Roese <sr@denx.de>
+
+commit b7598a43f2b421a713d8135e98a42c37d9eb9df0
+Author: Sergei Shtylyov <sshtylyov@ru.mvista.com>
+Date:  Mon Apr 23 15:30:39 2007 +0200
+
+    [PATCH] Avoid assigning PCI resources from zero address
+
+    If a PCI IDE card happens to get a zero address assigned to it, the Linux IDE
+    core complains and IDE drivers fails to work.  Also, assigning zero to a BAR
+    was illegal according to PCI 2.1 (the later revisions seem to have excluded the
+    sentence about "0" being considered an invalid address) -- so, use a reasonable
+    starting value of 0x1000 (that's what the most Linux archs are using).
+
+    Alternatively, one might have fixed the calls to pci_set_region() individually
+    (some code even seems to have taken care of this issue) but that would have
+    been a lot more work. :-)
+
+    Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
+    Acked-by: Stefan Roese <sr@denx.de>
+
+commit 9ffd451afeb08e5be7ddae680487ec962b2bca25
+Author: Jeffrey Mann <mannj@embeddedplanet.com>
+Date:  Mon Apr 23 14:00:11 2007 +0200
+
+    [patch] setenv(...) can delete environmentalvariables
+
+    update setenv() function so that entering a NULL value for the
+    variable's value will delete the environmental variable
+
+    Signed-off-by: Jeffrey Mann <mannj@embeddedplanet.com>
+    Acked-by: Stefan Roese <sr@denx.de>
+
+commit ebd0a0ae05a44769c4e27458ad4e9f3438250443
+Author: Mike Frysinger <vapier@gentoo.org>
+Date:  Mon Apr 23 13:54:24 2007 +0200
+
+    [patch] use unsigned char in smc91111 driver for mac
+
+    the v_mac variable in the smc91111 driver is declared as a signed char ...
+    this causes problems when one of the bytes in the MAC is "signed" like 0xE0
+    because when it gets printed out, you get a display like:
+    0xFFFFFFE0 and that's no good
+
+    Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+commit ffc50f9bb194343c6303517a517708457a5eb6b8
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Sat May 5 18:54:42 2007 +0200
+
+    new: FSL and MSR support #2
+
+commit f7e2e0eb0668136305f78bb9c21be79b48a34247
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Sat May 5 18:27:16 2007 +0200
+
+    new: FSL and MSR support
+
+commit 2f15278c2eb911c668b4fe562130b78cf554d139
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Sat May 5 18:23:11 2007 +0200
+
+    Coding stylke cleanup; update CHANGELOG.
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 885ec89b648a899a2f32393fd3ffd9f7234c4402
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Sat May 5 18:05:02 2007 +0200
+
+    Add STX GP3 SSA board to MAKEALL script; update CHANGELOG.
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 5499645b3fe17a548af9dfc479ca6e2455f179a2
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Sat May 5 17:15:50 2007 +0200
+
+    Make "file" command happy with some config.mk files; update CHANGELOG
+
+commit e3b8c78bc2489c27ae020986ef0eaca684866cef
+Author: Jeffrey Mann <mannj@embeddedplanet.com>
+Date:  Sat May 5 08:32:14 2007 +0200
+
+    ppc4xx: Detect if the sysclk on Sequoia is 33 or 33.333 MHz
+
+    The AMCC Secquoia board has been changed in a new revision from using a
+    33.000 MHz clock to a 33.333 MHz system clock. A bit in the CPLD
+    indicates the difference. This patch reads that bit and uses the correct
+    clock speed for the board. This code is backward compatable will all
+    prior boards. All prior boards will be read as 33.000.
+
+    Signed-off-by: Jeffrey Mann <mannj@embeddedplanet.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit f544ff6656fca263ed1ebe39899b6d95da67c8b8
+Author: Stefan Roese <sr@denx.de>
+Date:  Sat May 5 08:29:01 2007 +0200
+
+    ppc4xx: Sequoia: Remove cpu/ppc4xx/speed.c from NAND booting
+
+    Using cpu/ppc4xx/speed.c to calculate the bus frequency is too big
+    for the 4k NAND boot image so define bus_frequency to 133MHz here
+    which is save for the refresh counter setup.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit a79886590593ba1d667c840caa4940c61639f18f
+Author: Thomas Knobloch <knobloch@siemens.com>
+Date:  Sat May 5 07:04:42 2007 +0200
+
+    NAND: Wrong calculation of page number in nand_block_bad()
+
+    In case that there is no memory based bad block table available the
+    function nand_block_checkbad() in drivers/mtd/nand/nand_base.c will call
+    nand_block_bad() directly. When parameter 'getchip' is set to zero,
+    nand_block_bad() will not right shift the offset to calculate the
+    correct page number.
+
+    Signed-off-by: Thomas Knobloch <knobloch@siemens.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 9877d7dcd1eebe61aa5d8b8ffe9c048ea426e6f6
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Fri May 4 10:02:33 2007 +0200
+
+    Fix initrd length corruption in bootm command.
+
+    When using FDT Images, the length of an inital ramdisk was
+    overwritten (bug introduced by commit 87a449c8, 22 Aug 2006).
+
+    Patches by Timur Tabi & Johns Daniel.
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 068aab660bc3912b930be5540e6b3f3fd6ad3c96
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Thu May 3 19:43:52 2007 -0500
+
+    mpc83xx: fix trivial error in MAKEALL
+
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
+
+commit c64a89d6ce8584b9fc64f4e85da9ecac3cfc2c2a
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Thu May 3 16:34:41 2007 +0200
+
+    Update board configuration for STX GP3SSA board:
+
+    Enable hush shell, environment in flash rather in EEPROM,
+    more user-friendly default environment, etc.
+    The simple EEPROM environment can be selected easily in the board
+    config file.
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 2c6fb199dc5756fc72f49d1f4de105e089049d65
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Tue Apr 24 14:37:49 2007 +0200
+
+    Cleanup STX GP3SSA code; fix build and compile problems.
+
+commit 35171dc04e028ecacc23ad916a66295472555dbf
+Author: Dan Malek <dan@embeddedalley.com>
+Date:  Fri Jan 5 09:15:34 2007 +0100
+
+    Add support for STX GP3SSA (stxssa) Board
+
+    Signed-off-by Dan Malek, <dan@embeddedalley.com>
+
+commit ffa621a0d12a1ccd81c936c567f8917a213787a8
+Author: Andy Fleming <afleming@freescale.com>
+Date:  Sat Feb 24 01:08:13 2007 -0600
+
+    Cleaned up some 85xx PCI bugs
+
+    * Cleaned up the CDS PCI Config Tables and added NULL entries to
+      the end
+    * Fixed PCIe LAWBAR assignemt to use the cpu-relative address
+    * Fixed 85xx PCI code to assign powar region sizes based on the
+      config values (rather than hard-coding them)
+    * Fixed the 8548 CDS PCI2 IO to once again have 0 as the base address
+
+    Signed-off-by: Andy Fleming <afleming@freescale.com>
+
+commit 6743105988fc44d5b0d30388c790607835aae7a6
+Author: Andy Fleming <afleming@freescale.com>
+Date:  Mon Apr 23 02:54:25 2007 -0500
+
+    Add support for the 8568 MDS board
+
+    This included some changes to common files:
+    * Add 8568 processor SVR to various places
+    * Add support for setting the qe bus-frequency value in the dts
+    * Add the 8568MDS target to the Makefile
+
+    Signed-off-by: Andy Fleming <afleming@freescale.com>
+
+commit af1c2b84bf27c8565baddc82d1abb93700d10e2e
+Author: David Updegraff <dave@cray.com>
+Date:  Fri Apr 20 14:34:48 2007 -0500
+
+    Add support for treating unknown PHYs as generic PHYs.
+
+    When bringing up u-boot on new boards, PHY support sometimes gets
+    neglected. Most PHYs don't really need any special support,
+    though.  By adding a generic entry that always matches if nothing
+    else does, we can provide support for "unsupported" PHYs for the
+    tsec.
+
+    The generic PHY driver supports most PHYs, including gigabit.
+
+    Signed-off-by: David Updegraff <dave@cray.com>
+    Signed-off-by: Andy Fleming <afleming@freescale.com>
+
+commit a75af9bfd8fff0499efdbb90601cec5a2afef117
+Author: James Yang <James.Yang@freescale.com>
+Date:  Wed Feb 7 15:28:04 2007 -0600
+
+    Conditionalize 8641 Rev1.0 MCM workarounds
+
+    Signed-off-by: James Yang <James.Yang@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit f64702b7fc8f8df39d31add770df6e372f9e9ce3
+Author: Timur Tabi <timur@freescale.com>
+Date:  Mon Apr 30 13:59:50 2007 -0500
+
+    Fix memory initialization on MPC8349E-mITX
+
+    Define CFG_DDR_SDRAM_CLK_CNTL for the MPC8349E-mITX and MPC8349E-mITX-GP.
+    This allows ddr->sdram_clk_cntl to be properly initialized.  This is necessary
+    on some ITX boards, notably those with a revision 3.1 CPU.
+
+    Also change spd_sdram() in cpu/mpc83xx/spd_sdram.c to not write anything into
+    ddr->sdram_clk_cntl if CFG_DDR_SDRAM_CLK_CNTL is not defined.
+
+    Signed-off-by: Timur Tabi <timur@freescale.com>
+    Acked-by: Michael Benedict <MBenedict@twacs.com>
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
+
+commit 54b2d434ae9d01787936f34fe1759cf3d7624ae3
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Mon Apr 30 15:26:21 2007 -0500
+
+    mpc83xx: replace elaborate boottime verbosity with 'clocks' command
+
+    and fix CPU: to align with Board: display text.
+
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
+
+commit c1ab82669d9525998c34e802a12cad662723f22a
+Author: James Yang <James.Yang@freescale.com>
+Date:  Fri Mar 16 13:02:53 2007 -0500
+
+    Rewrote picos_to_clk() to avoid rounding errors.
+    Clarified that conversion is to DRAM clocks rather than platform clocks.
+    Made function static to spd_sdram.c.
+
+    Signed-off-by: James Yang <James.Yang@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 8b39501d28754e72726ce7fb02310e56dbdf116a
+Author: Stefan Roese <sr@denx.de>
+Date:  Sun Apr 29 14:13:01 2007 +0200
+
+    ppc4xx: Bamboo: Use current NAND driver and *not* the legacy driver
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 5c5d3242935cf3543af01142627494434834cf98
+Author: Kim Phillips <kim.phillips@freescale.com>
+Date:  Wed Apr 25 12:34:38 2007 -0500
+
+    mpc83xx: minor fixups for 8313rdb introduction
+
+commit 144876a380f5756f57412caf74c1d6dc201dd796
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Tue Apr 24 23:01:02 2007 +0200
+
+    [PATCH] MTD partition support, JFFS2 support
+
+commit 37ed6cdd4159195bfad68d8a237f6adda8f482cb
+Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+Date:  Tue Apr 24 14:03:45 2007 +0200
+
+    ppc4xx: setup 440EPx/GRx ZMII/RGMII bridge depending on PFC register content.
+
+    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com>
+
+commit 66ed6cca3f340f7a8a06d9272ae2ef8e96f0273d
+Author: Andy Fleming <afleming@freescale.com>
+Date:  Mon Apr 23 02:37:47 2007 -0500
+
+    Reworked 85xx speed detection code
+
+    Changed the code to read the registers and calculate the clock
+    rates, rather than using a "switch" statement.
+
+    Idea from Andrew Klossner <andrew@cesa.opbu.xerox.com>
+
+    Signed-off-by: Andy Fleming <afleming@freescale.com>
+
+commit 81f481ca708ed6a56bf9c410e3191dbad581c565
+Author: Andy Fleming <afleming@freescale.com>
+Date:  Mon Apr 23 02:24:28 2007 -0500
+
+    Enable 8544 support
+
+    * Add support to the Makefile
+    * Add 8544 configuration support to the tsec driver
+    * Add 8544 SVR numbers to processor.h
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 0d8c3a2096eaff8d7de89d45e9af4d4b0d4868fe
+Author: Andy Fleming <afleming@freescale.com>
+Date:  Fri Feb 23 17:12:25 2007 -0600
+
+    Support 1G size on 8548
+
+    e500v2 and newer cores support 1G page sizes.
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+    Signed-off-by: Andy Fleming <afleming@freescale.com>
+
+commit 45cef612cc601d2d1c890fbbd7cdc9609a189a46
+Author: Andy Fleming <afleming@freescale.com>
+Date:  Fri Feb 23 17:11:16 2007 -0600
+
+    Changed BOOKE_PAGESZ_nGB to BOOKE_PAGESZ_nG
+
+    The other pagesz constants use one letter to specify order of
+    magnitude. Also change the one reference to it in mpc8548cds/init.S
+
+    Signed-off-by: Andy Fleming <afleming@freescale.com>
+
+commit 1f9a318cea14272edd10d63739e2d326c90f430e
+Author: Andy Fleming <afleming@freescale.com>
+Date:  Fri Feb 23 16:28:46 2007 -0600
+
+    Only set ddrioovcr for 8548 rev1.
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+    Signed-off-by: Andy Fleming <afleming@freescale.com>
+
+commit 9343dbf85bc03033f2102d8e8543567c2c1ad2d2
+Author: Andy Fleming <afleming@freescale.com>
+Date:  Sat Feb 24 01:16:45 2007 -0600
+
+    Tweak DDR ECC error counter
+
+    Enable single-bit error counter when memory was cleared by ddr controller.
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+    Signed-off-by: Andy Fleming <afleming@freescale.com>
+
+commit 85e7c7a45e3dd9c7ce3e722352ba60f8df1a7a4b
+Author: Timur Tabi <timur@freescale.com>
+Date:  Mon Feb 12 13:34:55 2007 -0600
+
+    85xx: write MAC address to mac-address and local-mac-address
+
+    Some device trees have a mac-address property, some have local-mac-address,
+    and some have both.  To support all of these device trees, ftp_cpu_setup()
+    should write the MAC address to mac-address and local-mac-address, if they
+    exist.
+
+    Signed-off-by: Timur Tabi <timur@freescale.com>
+
+commit 03b81b48eec0ad249ec97a4ae16c36fa2e014ff4
+Author: Andy Fleming <afleming@freescale.com>
+Date:  Mon Apr 23 01:44:44 2007 -0500
+
+    Some 85xx cpu cleanups
+
+    * Cleaned up the TSR[WIS] clearing
+    * Cleaned up DMA initialization
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+    Acked-by: Andy Fleming <afleming@freescale.com>
+
+commit 151d5d992eab8c497b24c816c73dc1ad8bffb4eb
+Author: Andy Fleming <afleming@freescale.com>
+Date:  Mon Apr 23 01:32:22 2007 -0500
+
+    Add cpu support for the 8544
+
+    Recognize new SVR values, and add a few register definitions
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+    Acked-by: Andy Fleming <afleming@freescale.com>
+
+commit 25d83d7f4ac65727182d8ddaf7ba42fa74cf65ae
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Wed Apr 11 16:51:02 2007 -0500
+
+    Add MPC8544DS basic port board files.
+
+    Add board port under new board/freescale directory
+    structure and reuse existing PIXIS FPGA support there.
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 0cde4b00fc7393b89f379d83a9d436dcb1334bfa
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Wed Apr 11 16:50:57 2007 -0500
+
+    Add MPC8544DS main configuration file.
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 362dd83077ac04c0296bca3e824ec2fb3d44d9d6
+Author: Sergei Shtylyov <sshtylyov@ru.mvista.com>
+Date:  Wed Dec 27 22:07:15 2006 +0300
+
+    Fix PCI I/O space mapping on Freescale MPC85x0ADS
+
+    The PCI I/O space mapping for Freescale MPC8540ADS board was broken by commit
+    52c7a68b8d587ebcf5a6b051b58b3d3ffa377ddc which failed to update the #define's
+    describing the local address window used for the PCI I/O space accesses -- fix
+    this and carry over the necessary changes into the MPC8560ADS code since the
+    PCI I/O space mapping was also broken for this board (by the earlier commit
+    087454609e47295443af793a282cddcd91a5f49c). Add the comments clarifying how
+    the PCI I/O space must be mapped to all the MPC85xx board config. headers.
+
+    Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
+
+     board/mpc8540ads/init.S     |    4 ++--
+     board/mpc8560ads/init.S     |    4 ++--
+     include/configs/MPC8540ADS.h |    5 ++---
+     include/configs/MPC8541CDS.h |    2 +-
+     include/configs/MPC8548CDS.h |    2 +-
+     include/configs/MPC8560ADS.h |    8 ++++----
+     6 files changed, 12 insertions(+), 13 deletions(-)
+
+commit 96629cbabdb727d4a5e62542deefc01d498db6dc
+Author: Zang Roy-r61911 <tie-fei.zang@freescale.com>
+Date:  Tue Dec 5 16:42:30 2006 +0800
+
+    u-boot: Fix e500 v2 core reset bug
+
+    The following patch fixes the e500 v2 core reset bug.
+    For e500 v2 core, a new reset control register is added to reset the
+    processor.
+
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 63247a5acd58032e6cf33f525bc3923b467bac88
+Author: Zang Roy-r61911 <tie-fei.zang@freescale.com>
+Date:  Wed Dec 20 11:01:00 2006 +0800
+
+    u-boot: v2: Remove the fixed TLB and LAW entrynubmer
+
+    Remove the fixed TLB and LAW entry nubmer. Use actually TLB and LAW
+    entry number to control the loop.  This can reduce the potential risk
+    for the 85xx processor increasing its TLB adn LAW entry number.
+
+    Signed-off-by: Swarthout Edward <swarthout@freescale.com>
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 0b1934ba12fd408fcc3b8bd9f4b04864c42a42bf
+Author: Zang Roy-r61911 <tie-fei.zang@freescale.com>
+Date:  Mon Dec 18 17:01:04 2006 +0800
+
+    u-boot: Fix the 85xxcds tsec bug
+
+    Fix the 85xxcds tsec bug.
+    When enable PCI, tsec.o should be added to u-boot.lds to make tsec work.
+
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 7337b237ffc4aaf1b9467024fe472a880d852598
+Author: Zang Roy-r61911 <tie-fei.zang@freescale.com>
+Date:  Fri Dec 15 14:43:31 2006 +0800
+
+    u-boot: Fix CPU2 errata on MPC8548CDS board
+
+    This patch apply workaround of CPU2 errata on MPC8548CDS board.
+
+    Signed-off-by:Ebony Zhu <ebony.zhu@freescale.com>
+
+commit 39b18c4f3e0b6d0dc00f4e68bad2da3766c85f09
+Author: ebony.zhu@freescale.com <ebony.zhu@freescale.com>
+Date:  Mon Dec 18 16:25:15 2006 +0800
+
+    u-boot: Disables MPC8548CDS 2T_TIMING for DDR by default
+
+    This patch disables MPC8548CDS 2T_TIMING for DDR by default.
+
+    Signed-off-by:Ebony Zhu <ebony.zhu@freescale.com>
+
+commit 41fb7e0f1ec9b91bdae2565bab5f2e3ee15039c7
+Author: Zang Roy-r61911 <tie-fei.zang@freescale.com>
+Date:  Thu Dec 14 14:14:55 2006 +0800
+
+    u-boot: Enable PCI function and add PEX & rapidio memory map on MPC8548CDS board
+
+    Enable PCI function and add PEX & rapidio memory map on MPC8548CDS
+    board.
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 96b8a05432f346f36493535c85320b70ec9c7c1b
+Author: Scott Wood <scottwood@freescale.com>
+Date:  Mon Apr 16 14:54:15 2007 -0500
+
+    mpc83xx: Add MPC8313ERDB support.
+
+    Signed-off-by: Scott Wood <scottwood@freescale.com>
+
+commit 49ea3b6eafe606285ae4d5c378026153dde53200
+Author: Scott Wood <scottwood@freescale.com>
+Date:  Mon Apr 16 14:34:21 2007 -0500
+
+    mpc83xx: Add generic PCI setup code.
+
+    Board code can now request the generic setup code rather than having to
+    copy-and-paste it for themselves.  Boards should be converted to use this
+    once they're tested with it.
+
+    Signed-off-by: Scott Wood <scottwood@freescale.com>
+
+commit 7c98e5193e93df6b9b651851d54b638a61ebb0ea
+Author: Scott Wood <scottwood@freescale.com>
+Date:  Mon Apr 16 14:34:19 2007 -0500
+
+    mpc83xx: Add 831x support to speed.c.
+
+    Signed-off-by: Scott Wood <scottwood@freescale.com>
+
+commit 0f253283a32d91e06844d7f87f9b33f4f4fbce8f
+Author: Scott Wood <scottwood@freescale.com>
+Date:  Mon Apr 16 14:34:18 2007 -0500
+
+    mpc83xx: Add 831x support to global_data.h
+
+    Signed-off-by: Scott Wood <scottwood@freescale.com>
+
+commit 95e7ef897e54591e615fc1b458b74c286fe1fb06
+Author: Scott Wood <scottwood@freescale.com>
+Date:  Mon Apr 16 14:34:16 2007 -0500
+
+    mpc83xx: Change PVR_83xx to PVR_E300C1-3, and update checkcpu().
+
+    Rather than misleadingly define PVR_83xx as the specific type of 83xx
+    being built for, the PVR of each core revision is defined. checkcpu() now
+    prints the core that it detects, rather than aborting if it doesn't find
+    what it thinks it wants.
+
+    Signed-off-by: Scott Wood <scottwood@freescale.com>
+
+commit a35b0c4950d84cf9e3a9e32b916135956d1ac636
+Author: Scott Wood <scottwood@freescale.com>
+Date:  Mon Apr 16 14:34:15 2007 -0500
+
+    mpc83xx: Recognize SPR values for MPC8311 and MPC8313.
+
+    Signed-off-by: Scott Wood <scottwood@freescale.com>
+
+commit d87c57b201b4572d16f1b642998faa00c9912b16
+Author: Scott Wood <scottwood@freescale.com>
+Date:  Mon Apr 16 14:31:55 2007 -0500
+
+    mpc83xx: Add register definitions for MPC831x.
+
+    Signed-off-by: Scott Wood <scottwood@freescale.com>
+
+commit 323bfa8f436dc3bc57187c9b1488bc3146ff1522
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Apr 23 12:00:22 2007 +0200
+
+    Remove BOARDLIBS usage completely
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 32556443840f127170e4baa8bdd5b567039f6c36
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Sat Apr 21 21:07:22 2007 +0200
+
+    [PATCH] SystemACE support for Microblaze
+
+commit 0643631aa1036cd746bf5d15f5a34bc7bc01ea4f
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Sat Apr 21 21:02:40 2007 +0200
+
+    16bit read/write little endian
+
+commit 9d1d6a34d26c5933bc097ce73c9348f95573cdd4
+Author: Michal Simek <monstr@monstr.eu>
+Date:  Sat Apr 21 20:53:31 2007 +0200
+
+    Change ML401 parameters - Xilinx BSP
+
+commit 2e343b9a57f32e1bd08c35c9976910333fb4e13d
+Author: Ed Swarthout <Ed.Swarthout@freescale.com>
+Date:  Wed Feb 28 05:37:29 2007 -0600
+
+    mpc8641hpcn: Fix LAW and TLB setup to use the IO_PHYS #defines.
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+
+commit 79cb47391eebef85acadb3f6961ef6c55cace6ac
+Author: Zhang Wei <wei.zhang@freescale.com>
+Date:  Fri Jan 19 10:42:37 2007 +0800
+
+    Enable LAWs for MPC8641 PCI-Ex2.
+
+    Signed-off-by: Zhang Wei <wei.zhang@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit bd7851ce1e1f140665b520026abf1042968b1102
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Fri Apr 20 14:12:26 2007 -0500
+
+    mpc86xx; Write MAC address to mac-address and local-mac-address
+
+    Some device trees have a mac-address property, some have local-mac-address,
+    and some have both.  To support all of these device trees, ftp_cpu_setup()
+    should write the MAC address to mac-address and local-mac-address, if they
+    exist.
+
+    Signed-off-by: Timur Tabi <timur@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 7dbdf28b8bd855a8530dc3292e4982575a197060
+Author: Jon Loeliger <jdl@freescale.com>
+Date:  Fri Apr 20 14:11:38 2007 -0500
+
+    mpc86xx: protect memcpy to bad address if a mac-address is missing from dt
+
+    Signed-off-by: Kim Phillips <kim.phillips@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 14da5f7675bbb427c469e3f45006e027b6e21db9
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Fri Apr 20 17:43:28 2007 +0200
+
+    Cleanup compiler warnings, update CHANGELOG
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 6923565db12af34fd5e02d354ee65a8c78ac460f
+Author: Detlev Zundel <dzu@denx.de>
+Date:  Fri Apr 20 12:01:47 2007 +0200
+
+    Fix breakage of NC650 board with respect to nand support.
+
+    Signed-off-by: Detlev Zundel <dzu@denx.de>
+
+commit 39f23cd90947639ac278a18ff277ec786b5ac167
+Author: Domen Puncer <domen.puncer@telargo.com>
+Date:  Fri Apr 20 11:13:16 2007 +0200
+
+    [RFC PATCH] icecube/lite5200b: fix OF_TBCLK (timebase-frequency) calculation
+
+    G2 core reference manual says decrementer and time base
+    are decreasing/increasing once every 4 bus clock cycles.
+    Lets fix it, so time in Linux won't run twice as fast
+
+    Signed-off-by: Domen Puncer <domen.puncer@telargo.com>
+    Acked-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 7651f8bdbba03bb0b4f241e2d2c4cb65b230bd56
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Thu Apr 19 23:14:39 2007 -0400
+
+    Fix serious pointer bug with bootm and reserve map.
+
+    What was suppose to be a stack variable was declared as a pointer,
+      overwriting random memory.
+    Also moved the libfdt.a requirement into the main Makefile.  That is
+      The U-Boot Way.
+
+commit d21686263574e95cb3e9e9b0496f968b1b897fdb
+Author: Stefan Roese <sr@denx.de>
+Date:  Thu Apr 19 09:53:52 2007 +0200
+
+    ppc4xx: Fix chip select timing for SysACE access on AMCC Katmai
+
+    Previous versions used full wait states for the chip select #1 which
+    is connected to the Xilinix SystemACE controller on the AMCC Katmai
+    evaluation board. This leads to really slow access and therefore low
+    performance. This patch now sets up the chip select a lot faster
+    resulting in much better read/write performance of the Linux driver.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 37837828d89084879bee2f2b8c7c68d4695940df
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed Apr 18 17:49:29 2007 +0200
+
+    Clenaup, update CHANGELOG
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit fd094c6379e2ef8a4d0ceb5640b24cb0c8d04449
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed Apr 18 17:20:58 2007 +0200
+
+    Update CHANGELOG
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 2a26ec4732efd7a308d0bbc97714c1d75ef1173b
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed Apr 18 17:07:26 2007 +0200
+
+    Cleanup, update CHANGELOG
+
+    Sigend-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 5f6c732affea9647762d27a4617a2ae64c52dceb
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed Apr 18 16:17:46 2007 +0200
+
+    Update CHANGELOG
+
+commit ad4eb555671d97f96dc56eab55103b1f86874b01
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Wed Apr 18 14:30:39 2007 +0200
+
+    MCC200 board: remove warning which is obsolete after PSoC firmware changes
+
+    Signed-off-by: Wolfgang Denk <wd@denx.de>
+
+commit 3747a3f010b2b1442dec3e871c69788b6017aaae
+Author: Domen Puncer <domen.puncer@telargo.com>
+Date:  Wed Apr 18 12:11:05 2007 +0200
+
+    [PATCH] icecube/lite5200b: document wakeup from low-power support
+
+    Signed-off-by: Domen Puncer <domen.puncer@telargo.com>
+
+commit e673226ff9d6aa91b47ceac74b8c13770b06bb37
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Apr 18 12:07:47 2007 +0200
+
+    ppc4xx: Update Acadia to not setup PLL when booting via bootstrap EEPROM
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 90e6f41cf09fc98f6ccb510e183d53ab8546cf2f
+Author: Stefan Roese <sr@denx.de>
+Date:  Wed Apr 18 12:05:59 2007 +0200
+
+    ppc4xx: Add output for bootrom location to 405EZ ports
+
+    Now 405EZ ports also show upon bootup from which boot device
+    they are configured to boot:
+
+    U-Boot 1.2.0-gd3832e8f-dirty (Apr 18 2007 - 07:47:05)
+
+    CPU:   AMCC PowerPC 405EZ Rev. A at 199.999 MHz (PLB=133, OPB=66, EBC=66 MHz)
+          Bootstrap Option E - Boot ROM Location EBC (32 bits)
+          16 kB I-Cache 16 kB D-Cache
+    Board: Acadia - AMCC PPC405EZ Evaluation Board
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
+commit 9c00dfb0bf89c8c23e8af5b5bdf49cf66d769f85
+Author: Peter Pearse <peter.pearse@arm.com>
+Date:  Tue Apr 17 13:30:33 2007 +0100
+
+    Move ppearse to ARM board list
+    Add Konstantin Kletschke for scb9328.
+    Signed-off-by: Peter Pearse <peter.pearse@arm.com>
+
+commit d3832e8fe1b214ec62424eac36cfda9fc56d21b3
+Author: Domen Puncer <domen.puncer@telargo.com>
+Date:  Mon Apr 16 14:00:13 2007 +0200
+
+    [PATCH] icecube/lite5200b: wakeup from low-power support
+
+    U-Boot part of Lite5200b low power mode support.
+    Puts SDRAM out of self-refresh and transfers control to
+    address saved at physical 0x0.
+
+    Signed-off-by: Domen Puncer <domen.puncer@telargo.com>
+    Acked-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit f35a53fc7b0c79fcfe7bdc01163c4b34aaba1460
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Sun Apr 15 13:54:26 2007 -0400
+
+    Fix the ft_cpu_setup() property settings.
+
+    Use "setter" functions instead of flags, cleaner and more flexible.
+    It also fixes the problem noted by Timur Tabi that the ethernet MAC
+    addresses were all being set incorrectly to the same MAC address.
+
+commit c28abb9c614f65ce2096cc4a66fc886c77d0e5a4
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Sat Apr 14 22:51:24 2007 -0400
+
+    Improve the bootm command for CONFIG_OF_LIBFDT
+
+    In bootm, create the "/chosen" node only if it doesn't already exist
+      (better matches the previous behavior).
+    Update for proper reserved memory map handling for initrd.
+
+commit 3f9f08cf91c8a6949a5d78a18bd3d8df7b86d888
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Sat Apr 14 22:46:41 2007 -0400
+
+    Add some utilities to manipulate the reserved memory map.
+
+commit 8048cdd56f04a756eeea4951f402bf5cc33785db
+Author: Wolfgang Denk <wd@denx.de>
+Date:  Sat Apr 14 21:16:54 2007 +0200
+
+    Update CHANGELOG
+
+commit 8e6875183cdca91c134408d119d4abcd48ef6856
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sun Dec 17 18:56:46 2006 +0100
+
+    AVR32: Enable MMC support
+
+    Set up the portmux for the MMC interface and enable the MMC driver
+    along with support for DOS partitions, ext2 and FAT filesystems.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit fc26c97bb6df41b4a95662c34054fe912387bf38
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Fri Jan 20 10:03:53 2006 +0100
+
+    Atmel MCI driver
+
+    Driver for the Atmel MCI controller (MMC interface) for AT32AP CPUs.
+
+    The AT91 ARM-based CPUs use basically the same hardware, so it should
+    be possible to share this driver, but no effort has been made so far.
+
+    Hardware documentation can be found in the AT32AP7000 data sheet,
+    which can be downloaded from
+
+    http://www.atmel.com/dyn/products/datasheets.asp?family_id=682
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 05fdab1ef6a10d049a50021a86f1226f444d9b9f
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sun Dec 17 18:55:37 2006 +0100
+
+    AVR32: Add clk and gpio infrastructure for mmci
+
+    Implement functions for configuring the mmci pins, as well as
+    functions for getting the clock rate of the mmci controller.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 7fac3f69e9f05c5e5326681976c35d129324c4de
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sun Dec 17 18:53:56 2006 +0100
+
+    Enable partition support with MMC
+
+    Include implementations of init_part() and get_partition_info() when
+    CONFIG_MMC is set.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 9a24f477a1ed5bb0f74377c985d754ebbfa44872
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sun Dec 17 17:14:30 2006 +0100
+
+    AVR32: Enable networking
+
+    Implement MACB initialization for AVR32 and ATSTK1000, and turn
+    everything on, including the MACB driver.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 5c1fe1ffffd1750a7e47e5a2e2cd600c00e4f009
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Fri Jan 20 10:03:34 2006 +0100
+
+    Atmel MACB ethernet driver
+
+    Driver for the Atmel MACB on-chip ethernet controller.
+
+    This driver has been tested on the ATSTK1000 board with a AT32AP7000
+    CPU. It should probably work on AT91SAM926x as well with some minor
+    modifications.
+
+    Hardware documentation can be found in the AT32AP7000 data sheet,
+    which can be downloaded from
+
+    http://www.atmel.com/dyn/products/datasheets.asp?family_id=682
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit b4ec9c2d43d894729bb633bfdbdfa95a962c1556
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sun Dec 17 16:56:14 2006 +0100
+
+    AVR32: Add clk and gpio infrastructure for macb0 and macb1
+
+    Implement functions for configuring the macb0 and macb1 pins, as
+    well as functions for getting the clock rate of the various
+    busses the macb ethernet controllers are connected to.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit d5acb95b16a0a74c643524342c3437e765426d05
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sun Dec 17 15:39:15 2006 +0100
+
+    AVR32: Implement simple DMA memory allocator
+
+    Implement dma_alloc_coherent() which returns cache-aligned
+    uncacheable memory.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 91975b0fea773c9e681fea8cf3349669f27685ee
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sun Dec 17 15:46:02 2006 +0100
+
+    Import <linux/mii.h> from the Linux kernel
+
+    Instead of creating yet another set of MII register definitions
+    in the macb driver, here's a complete set of definitions for everyone
+    to use.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 1b804b229556a4d862da93c0ec94e79419364b2c
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Wed Mar 21 19:47:36 2007 +0100
+
+    AVR32: Include more commands for ATSTK1000
+
+    Include the imi, imls and jffs commands sets by default on ATSTK1000.
+    Also define CONFIG_BOOTARGS to something more useful, define
+    CONFIG_BOOTCOMMAND and enable autoboot by default.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 9c0deb5ae3ea0189f2e08ac29ef1316f1fb8548d
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Wed Mar 21 19:44:48 2007 +0100
+
+    AVR32: Provide a definition of struct stat
+
+    Copy the definition of struct stat from the Linux kernel.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 12f099c08167a7a51aeee623bc16dafd0841271c
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sun Dec 17 14:46:06 2006 +0100
+
+    AVR32: Use initdram() instead of board_init_memories()
+
+    Conform to the "standard" interface and use initdram() instead of
+    board_init_memories() on AVR32. This enables us to get rid of the
+    sdram_size member of the global_data struct as well.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 1f4f2121c2685182eb87fa9a9b799d1917387a1c
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Mon Nov 20 15:53:10 2006 +0100
+
+    AVR32: Relocate u-boot to SDRAM
+
+    Relocate the u-boot image into SDRAM like everyone else does. This
+    means that we can handle much larger .data and .bss than we used to.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit df548d3c3e2bbc40258713167859ffc2ce99a900
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sun Nov 19 18:06:53 2006 +0100
+
+    AVR32: Resource management rewrite
+
+    Rewrite the resource management code (i.e. I/O memory, clock gating,
+    gpio) so it doesn't depend on any global state. This is necessary
+    because this code is heavily used before relocation to RAM, so we
+    can't write to any global variables.
+
+    As an added bonus, this makes u-boot's memory footprint a bit smaller,
+    although some functionality has been left out; all clocks are enabled
+    all the time, and there's no checking for gpio line conflicts.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 03d1e1365796cd15d1726e8a51fd8b5be50b2fe9
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sat Nov 18 18:01:13 2006 +0100
+
+    AVR32: Clean up memory-map.h for at32ap7000
+
+    Convert spaces to tabs (must have missed this one last time around),
+    sort the entries by address and group them together by bus
+    connectivity.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 28c699ef69f4b6cdf252e4747b7b590028a88981
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sat Nov 18 17:32:31 2006 +0100
+
+    AVR32: Build position-independent u-boot
+
+    Add -fPIC -mno-init-got to the avr32-specific CFLAGS to make u-boot
+    position independent. This will make relocation a lot easier.
+
+    -mno-init-got means that gcc shouldn't emit code to load the GOT
+    address into r6 in every function prologue. We do it once and for
+    all in the early startup assembly code, so enabling this option
+    makes u-boot a bit faster and smaller.
+
+    The assembly parts have always been position-independent, so no code
+    changes should be necessary.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit 5374b36de91d006d1df9536259fa9f66b01aa3aa
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sat Nov 18 17:24:31 2006 +0100
+
+    AVR32: Use avr32-linux- cross-compilation prefix by default
+
+    It doesn't really matter which toolchain you use to compile u-boot,
+    but the avr32-linux one is probably what most people have installed.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
+commit c841beeddebece0039e724fb27f4d1a39ee1c6b6
+Author: Haavard Skinnemoen <hskinnemoen@atmel.com>
+Date:  Sat Nov 18 17:15:30 2006 +0100
+
+    AVR32: Split start_u_boot into board_init_f and board_init_r
+
+    Split the avr32 initialization code into a function to run before
+    relocation, board_init_f and a function to run after relocation,
+    board_init_r. For now, board_init_f simply calls board_init_r
+    at the end.
+
+    Signed-off-by: Haavard Skinnemoen <hskinnemoen@atmel.com>
+
 commit 37403005cfe6bb13964d450f6a48a0b0f2f7017e
 Author: Heiko Schocher <hs@pollux.denx.de>
 Date:  Sat Apr 14 05:26:48 2007 +0200
@@ -7,6 +1225,54 @@ Date:       Sat Apr 14 05:26:48 2007 +0200
 
     Signed-off-by: Heiko Schocher <hs@denx.de>
 
+commit 7882751c78b7ecabfd49b0eff8de27661c71f16c
+Author: Denis Peter <d.peter@mpl.ch>
+Date:  Fri Apr 13 09:13:33 2007 +0200
+
+    [PATCH] Fix bugs in cmd_ide.c and cmd_scsi.c
+
+    Fix bug introduced by "Fix get_partition_info() parameter error in all
+    other calls" from 2005-03-04 in cmd_ide.c and cmd_scsi.c, which prevented
+    to use diskboot or scsiboot form another device than 0.
+
+    Signed-off-by: Denis Peter <d.peter@mpl.ch>
+
+commit 0b94504d22e70f537c17a0d38c87edb6e370977d
+Author: Greg Lopp <lopp@pobox.com>
+Date:  Fri Apr 13 08:02:24 2007 +0200
+
+    [PATCH] Fix use of "void *" for block dev read/write buffer pointers
+
+    Signed-of-by: Greg Lopp <lopp@pobox.com>
+    Acked-by: Grant Likely <grant.likely@secretlab.ca>
+
+commit 6fbf261f8df294e589cfadebebe5468e3c0f29e9
+Author: Xie Xiaobo <r63061@freescale.com>
+Date:  Fri Mar 9 19:08:25 2007 +0800
+
+    Fix two bugs for MPC83xx DDR2 controller SPD Init
+
+    There are a few bugs in the cpu/mpc83xx/spd_sdram.c
+    the first bug is that the picos_to_clk routine introduces a huge
+    rounding error in 83xx.
+    the second bug is that the mode register write recovery field is
+    tWR-1, not tWR >> 1.
+
+commit 2ad3aba01d37b72e7c957b07e102fccd64fe6d13
+Author: Jeffrey Mann <mannj@embeddedplanet.com>
+Date:  Thu Apr 12 14:15:59 2007 +0200
+
+    ppc4xx: Fix i2c divisor calcularion for PPC4xx
+
+    This patch fixes changes the i2c_init(...) function to use the function
+    get_OPB_freq() rather than calculating the OPB speed by
+    sysInfo.freqPLB/sysInfo.pllOpbDiv. The get_OPB_freq() function is
+    specific per processor. The prior method was not and so was calculating
+    the wrong speed for some PPC4xx processors.
+
+    Signed-off-by: Jeffrey Mann <mannj@embeddedplanet.com>
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
 commit 6c9ba919375db977aaad9146bf320c7afd07ae7a
 Author: Wolfgang Denk <wd@denx.de>
 Date:  Wed Apr 11 17:25:01 2007 +0200
@@ -25,6 +1291,106 @@ Date:     Wed Apr 11 17:22:55 2007 +0200
     * Use Newline as "password" string
     * Use just a single partition in NAND flash
 
+commit 3d98b85800c80dc68227c8f10bf5c93456d6d054
+Author: Haiying Wang <haiying.wang@freescale.com>
+Date:  Mon Jan 22 12:37:30 2007 -0600
+
+    Add PIXIS FPGA support for MPC8641HPCN board.
+
+    Move the 8641HPCN's PIXIS code to the new directory
+    board/freescale/common/ as it will be shared by
+    future boards not in the same processor family.
+
+    Write a "pixis_reset" command that utilizes the FPGA
+    reset sequencer to support alternate soft-reset options
+    such as using the "alternate" flash bank, enabling
+    the watch dog, or choosing different CPU frequencies.
+
+    Add documentation for the pixis_reset to README.mpc8641hpcn.
+
+    Signed-off-by: Haiying Wang <haiying.wang@freescale.com>
+    Signed-off-by: Jon Loeliger <jdl@freescale.com>
+
+commit 64dbbd40c58349b64f43fd33dbb5ca0adb67d642
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Fri Apr 6 14:19:43 2007 -0400
+
+    Moved fdt command support code to fdt_support.c
+
+    ...in preparation for improving the bootm command's handling of fdt blobs.
+    Also cleaned up some coding sloppiness.
+
+commit 6679f9299534e488a171a9bb8f9bb891de247aab
+Author: Gerald Van Baren <vanbaren@cideas.com>
+Date:  Fri Apr 6 14:17:14 2007 -0400
+
+    libfdt: Make fdt_check_header() public
+
+    Changed _fdt_check_header() to fdt_check_header() and made it part of
+    the interface - it is a useful routine.
+
+    Also did some asthetics cleanup to the include files (headers).
+
+commit c0707ce65677650b5ceab0500ee50ae5168afef2
+Author: Aubrey Li <aubrey.adi@gmail.com>
+Date:  Thu Apr 5 18:34:06 2007 +0800
+
+    [Blackfin][PATCH] Kill off a bunch of common local prototypes
+
+commit 7b7e30aa64bb6657a1bfd32fdbdbfeb561e6a48d
+Author: Aubrey Li <aubrey.adi@gmail.com>
+Date:  Thu Apr 5 18:33:04 2007 +0800
+
+    [Blackfin][PATCH] Fix dynamic CPLB generation issue
+
+commit 0445e3a264251d75b1be45ef713c70726a2952f0
+Author: Aubrey Li <aubrey.adi@gmail.com>
+Date:  Thu Apr 5 18:31:47 2007 +0800
+
+    [Blackfin][PATCH] minior cleanup
+
+commit 155fd766573981090e638b493d5857562151862e
+Author: Aubrey Li <aubrey.adi@gmail.com>
+Date:  Thu Apr 5 18:31:18 2007 +0800
+
+    [Blackfin][PATCH] Fix copyright and update license
+
+commit 9fd437bbd75d282f899e1da50be20a2bf38450bc
+Author: Aubrey Li <aubrey.adi@gmail.com>
+Date:  Thu Apr 5 18:30:25 2007 +0800
+
+    [Blackfin][PATCH] Add BF537 EMAC driver initialization
+
+commit 889256e8604e0c68db1d866d720894dffede9df6
+Author: Aubrey Li <aubrey.adi@gmail.com>
+Date:  Thu Apr 5 18:29:55 2007 +0800
+
+    [Blackfin][PATCH] call real the system synchronize instruction
+
+commit e0df1c921b788289564e4c1ee7120a6a9cd3ab05
+Author: Aubrey Li <aubrey.adi@gmail.com>
+Date:  Thu Apr 5 18:29:17 2007 +0800
+
+    [Blackfin][PATCH] remove asm/page.h as we do not actually use/want any of these definitions nor does any other arch include it
+
+commit dfeeab2cd680df047e68e723b246adf6f33bb556
+Author: Aubrey Li <aubrey.adi@gmail.com>
+Date:  Thu Apr 5 18:28:34 2007 +0800
+
+    [Blackfin][PATCH]: fix flash unaligned copy issue
+
+commit 443feb740584e406efa203af909fe2926608e8d5
+Author: Igor Marnat <marny@rambler.ru>
+Date:  Wed Mar 21 09:55:01 2007 +0300
+
+    Update usage of 'nc' in README.NetConsole
+
+    Added information about usage of NetConsole on systems where the -l and -p
+    switches are mutually exclusive.
+
+    Signed-off-by: Igor Marnat <marny@rambler.ru>
+    Signed-off-by: Ben Warren <bwarren@qstreams.com>
+
 commit 31c98a88228021b314c89ebb8104fb6473da4471
 Author: Wolfgang Denk <wd@denx.de>
 Date:  Wed Apr 4 02:09:30 2007 +0200
@@ -37,6 +1403,18 @@ Date:      Wed Apr 4 01:49:15 2007 +0200
 
     Minor cleanup.
 
+commit a65c5768e5537530bd1780af3d3fddc3113a163c
+Author: Stefan Roese <sr@denx.de>
+Date:  Mon Apr 2 10:09:30 2007 +0200
+
+    ppc4xx: Change SysACE address on Katmai
+
+    With this new base address of the Xilinx SystemACE controller
+    the Linux driver will be easier to adapt, since it can now be
+    mapped via the "normal" ioremap() call.
+
+    Signed-off-by: Stefan Roese <sr@denx.de>
+
 commit aea03c4e8c3a21ce43d3faf48a6e6d474c8bdf73
 Author: Gerald Van Baren <vanbaren@cideas.com>
 Date:  Sat Mar 31 14:30:53 2007 -0400
@@ -604,6 +1982,24 @@ Date:     Thu Mar 8 10:06:09 2007 +0100
 
     Signed-off-by: Stefan Roese <sr@denx.de>
 
+commit 83853178bd36bca6f0f8f1331476620c84a587fc
+Author: Ed Swarthout <Ed.Swarthout@freescale.com>
+Date:  Wed Mar 7 12:14:50 2007 -0600
+
+    net - Support ping reply when processing net-loop
+
+    Add ICMP_ECHO_REQUEST packet support by responding with a ICMP_ECHO_REPLY.
+
+    This permits the ping command to test the phy interface when the phy
+    is put in loopback mode (typically by setting register 0 bit 14).
+
+    It also allows the port to respond to an external ping when u-boot is
+    processing some other net command (such as tftp).  This is useful when
+    tftp appears to hang.
+
+    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com>
+    Signed-off-by: Ben Warren <bwarren@qstreams.com>
+
 commit fa1aef15bcd47736687be1af544506e90fba545d
 Author: Stefan Roese <sr@denx.de>
 Date:  Wed Mar 7 16:43:00 2007 +0100
@@ -680,6 +2076,12 @@ Date:     Tue Mar 6 07:47:04 2007 +0100
 
     Signed-off-by: Stefan Roese <sr@denx.de>
 
+commit 647d3c3eed0da1d1505eecabe0b0fab96f956e68
+Author: Wolfgang Denk <wd@pollux.denx.de>
+Date:  Sun Mar 4 01:36:05 2007 +0100
+
+    Some code cleanup.
+
 commit 781e026c8aa6f7e9eb5f0e72cc4d20971219b148
 Author: Kim Phillips <kim.phillips@freescale.com>
 Date:  Wed Feb 28 00:02:04 2007 -0600
@@ -1551,6 +2953,15 @@ Date:    Tue Jan 23 13:25:22 2007 +0100
     [ColdFire MCF5271 family] Add CPU detection based on the value of Chip
     Identification Register (CIR).
 
+commit fdef388758506765d4d6a7155c8f1584c63ff581
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Mon Jan 22 13:19:21 2007 +0800
+
+    use  CFG_WRITE_SWAPPED_DATA define instead of define CFG_FLASH_CFI_SWAP
+    The patch by Heiko Schocher <hs@pollux.denx.de> on Jan, 19, 2007
+    fixes cfi_driver bug for mpc7448hpc2 board. The default cfi_driver can support
+    mpc7448hpc2 board.
+
 commit a4012396645533aef218354eeba754dff0deace8
 Author: Wolfgang Denk <wd@pollux.denx.de>
 Date:  Fri Jan 19 23:08:39 2007 +0100
@@ -1966,6 +3377,72 @@ Date:    Fri Dec 8 16:23:08 2006 +0100
 
     automatic update mechanism
 
+commit 9d27b3a0685ff99fc477983f315c04d49f657a8a
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Mon Dec 4 17:56:59 2006 +0800
+
+    Slight code clean up.
+    Add comments, delete duplicate define and remove spaces.
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 4dbcd69e3e2776ea334590d5768e3692c5fae5c1
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Mon Dec 4 17:54:21 2006 +0800
+
+    Introduce PLL_CFG[0:4] table for processor 7448/7447A/7455/7457. The original
+    multiplier table can not refect the real PLL clock behavior of these
+    processors. Please refer to the hardware specification for detailed
+    information of the corresponding processors.
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 4efe20c9579011d9987f62ed7d35ee8cdc1cf0e0
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Mon Dec 4 14:46:23 2006 +0800
+
+    Remove the static MAC address, ip address, server ip, netmask and
+    gateway ip for network setting.
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 6f12c61cf31ed73d72ddfcfc712a854a3a177aaf
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Mon Dec 4 14:33:08 2006 +0800
+
+    Remove the duplicate memory test code for mpc744ihpc2 board.
+    If a memory test is needed, please use the functions in
+    post/memory.c or memtest command.
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit c9c1eeed7dd193fa65fb194654132040d49d4d3a
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Fri Dec 1 19:01:25 2006 +0800
+
+    Fix the exception occuring in RAM table search issue.
+    The original search_one_table() function code can only processes the search
+    for the exception occurring in FLASH/ROM, because the exception and fixup
+    table usually locate in FLASH. If the exception address is also in
+    FLASH, it will be OK.
+    If the exception occurs in RAM, after the u-boot relocation, a
+    relocation offset should be added.
+
+    clean up the code in cpu/74xx_7xx/cpu.c
+
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit ee311214e0d216f904feea269599d0934bf71f23
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Fri Dec 1 11:47:36 2006 +0800
+
+    Clean up the code according to codestyle:
+    (1) remove some C++ comments.
+    (2) remove trailing white space.
+    (3) remove trailing empty line.
+    (4) Indentation by table.
+    (5) remove {} in one line condition.
+    (6) add space before '(' in function call.
+    Remove some weird printf () output.
+    Add necessary comments.
+    Modified Makefile to support building in a separate directory.
+
 commit dd520bf314c7add4183c5191692180f576f96b60
 Author: Wolfgang Denk <wd@pollux.denx.de>
 Date:  Thu Nov 30 18:02:20 2006 +0100
@@ -2672,12 +4149,191 @@ Date:  Thu Sep 7 07:39:46 2006 -0700
 
     Signed-off-by: Nick Spence <nick.spence@freescale.com>
 
+commit 4831c8b8a97799da77923d6bbb4c260c0d45521c
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Fri Nov 3 13:10:00 2006 +0800
+
+    Remove some unused CFG define.
+    undef CFG_DRAM_TEST
+
+commit 99c09c4dec34f77c243bf51bea532e3f339410ad
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Fri Nov 3 13:07:36 2006 +0800
+
+    Change the TEXT_BASE from 0xFFF00000 to 0xFF000000.
+    Both work. 0xFF000000 seems more reasonable.
+
 commit c59200443072353044aa4bf737a5a60f9a9af231
 Author: Wolfgang Denk <wd@pollux.denx.de>
 Date:  Thu Nov 2 15:15:01 2006 +0100
 
     Release U-Boot 1.1.6
 
+commit c1fbe4103a0d6c8957f912af902d705ba67836f2
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Thu Nov 2 19:14:48 2006 +0800
+
+    This patch comes from Yuli's posted patch on 8/8/2006
+    titled "CFI Driver Little-Endian write Issue".
+
+    http://sourceforge.net/mailarchive/message.php?msg_id=36311999
+
+    If that patch applied, please discard this one.
+    Until now , I do not see his patch is applied. So please apply this one.
+
+    Signed-off-by: Yuli Barcohen <yuli@arabellasw.com>
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit b825f158e449e1e9cf74c08e572955e122394c96
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Thu Nov 2 19:12:31 2006 +0800
+
+    Tsi108 on chip i2c support.
+
+    The i2c  Interface provides a master-only, serial interface that can be
+    used for initializing Tsi108/Tsi109 registers from an EEPROM after a
+    device reset.
+
+    Signed-off-by: Alexandre Bounine <alexandreb@tundra.com>
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 9226e7d6f09b9a1ac074cd918c81225a4689bba8
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Thu Nov 2 19:11:06 2006 +0800
+
+    Tsi108 on chip pci controller support.
+
+    If there is no pci card, the tsi108/109 pci configure read will
+    cause a machine check exception to the processor. PCI error should
+    also be cleared after the read.
+
+    Signed-off-by: Alexandre Bounine <alexandreb@tundra.com>
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit d1927cee977126e547ceeba23e4f978f377cfb8f
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Thu Nov 2 19:08:55 2006 +0800
+
+    Tundra tsi108 on chip Ethernet controller support.
+
+    The following is a brief description of the Ethernet controller:
+    The Tsi108/9 Ethernet Controller connects Switch Fabric to two independent
+    Gigabit Ethernet ports,E0 and E1.  It uses a single Management interface
+    to manage the two physical connection devices (PHYs).  Each Ethernet port
+    has its own statistics monitor that tracks and reports key interface
+    statistics.  Each port supports a 256-entry hash table for address
+    filtering. In addition, each port is bridged to the Switch Fabric
+    through a 2-Kbyte transmit FIFO and a 4-Kbyte Receive FIFO.
+
+    Each Ethernet port also has a pair of internal Ethernet DMA channels to
+    support the transmit and receive data flows.  The Ethernet DMA channels
+    use descriptors set up in memory, the memory map of the device, and
+    access via the Switch Fabric.  The Ethernet Controller?s DMA arbiter
+    handles arbitration for the Switch Fabric. The Controller also
+    has a register businterface for register accesses and status monitor
+    control.
+
+    The PMD (Physical Media Device) interface operates in MII, GMII, or TBI
+    modes.  The MII mode is used for connecting with 10 or 100 Mbit/s PMDs.
+    The GMII and TBI modes are used to connect with Gigabit PMDs.  Internal
+    data flows to and from the Ethernet Controller through the Switch Fabric.
+
+    Each Ethernet port uses its transmit and receive DMA channels to manage
+    data flows through buffer descriptors that are predefined by the
+    system (the descriptors can exist anywhere in the system memory map).
+    These descriptors are data structures that point to buffers filled
+    with data ready to transmit over Ethernet, or they point to empty
+    buffers ready to receive data from Ethernet.
+
+    Signed-off-by: Alexandre Bounine <alexandreb@tundra.com>
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 78aa0c3427f3ecdeb34aabfbbe2dd23b6ad8f40e
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Thu Nov 2 19:01:33 2006 +0800
+
+    Tundra tsi108 header file.
+
+    The Tundra Semiconductor Corporation (Tundra) Tsi108 is a host bridge for
+    PowerPC processors that offers numerous system interconnect options for
+    embedded application designers. The Tsi108 can interconnect 60x or
+    MPX processors to PCI/X peripherals, DDR2-400 memory, Gigabit Ethernet,
+    and Flash. Provided the macro define for tsi108 chip.
+
+    Signed-off-by: Alexandre Bounine <alexandreb@tundra.com>
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 87c4db09699c6b89176b31004afcb83eb1585d47
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Thu Nov 2 18:59:15 2006 +0800
+
+    Add  mpc7448hpc2  (mpc7448 + tsi108)  board associated code support.
+    mpc7448hpc2 board support high level code:tsi108 init + mpc7448hpc2.
+
+    Signed-off-by: Alexandre Bounine <alexandreb@tundra.com>
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 27801b8ab11c61b577e45742a515bb3b23b80241
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Thu Nov 2 18:57:21 2006 +0800
+
+    Add  mpc7448hpc2  (mpc7448 + tsi108)  board associated code support.
+    Make ,config.mk and link file for the mpc7448hpc2 board.
+
+    Signed-off-by: Alexandre Bounine <alexandreb@tundra.com>
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit c6411c0c3bbc79f9ba8aef58296a42d8f9d8a0a6
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Thu Nov 2 18:55:04 2006 +0800
+
+    Add  mpc7448hpc2  (mpc7448 + tsi108)  board associated code support.
+    The mpc7448hpc2 board support header file.
+
+    Signed-off-by: Alexandre Bounine <alexandreb@tundra.com>
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 625bb5ddb50b243f931262ca8c46956409471917
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Thu Nov 2 18:52:21 2006 +0800
+
+    Add  mpc7448hpc2  (mpc7448 + tsi108)  board associated code support.
+    The mpc7448hpc2 board support low level assemble language init code.
+
+    Signed-off-by: Alexandre Bounine <alexandreb@tundra.com>
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 4c52783b3d024e153c4972b97332e314bc3bdc46
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Thu Nov 2 18:49:51 2006 +0800
+
+    General code modification for mpc7448hpc2 board support.
+    1. Add 7447A and 7448 processor support.
+    2. Add the following flags.
+
+    CFG_CONFIG_BUS_CLK : If the 74xx bus frequency can be configured dynamically
+    (such as by switch on board), this flag should be set.
+
+    CFG_EXCEPTION_AFTER_RELOCATE: If an exception occurs after the u-boot
+    relocates to RAM, this flag should be set.
+
+    CFG_SERIAL_HANG_IN_EXCEPTION: If the print out function will cause the
+    system hang in exception, this flag should be set.
+
+    There is a design issue for tsi108/109 pci configure  read. When pci scan
+    the slots, if there is no pci card, the tsi108/9 will cause a machine
+    check exception for mpc7448 processor.
+
+    Signed-off-by: Alexandre Bounine <alexandreb@tundra.com>
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
+commit 69366bf42f22d67efce8da3f8c40a43d4a3c2695
+Author: roy zang <tie-fei.zang@freescale.com>
+Date:  Thu Nov 2 18:34:47 2006 +0800
+
+    Add README file for mpc7448hpc2 board.
+    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com>
+
 commit 25721b5cec2be4bce79cfade17ec8f6aa1e67526
 Author: Bartlomiej Sieka <tur@semihalf.com>
 Date:  Wed Nov 1 02:04:38 2006 +0100
index 2a43848fc992b70a6a9f06c222be12b77c071a09..2eaef1784eaccbf31f6870135a6d1399ebb6d977 100644 (file)
@@ -221,10 +221,11 @@ Jon Loeliger <jdl@freescale.com>
 
        MPC8641HPCN             MPC8641D
 
-Dan Malek <dan@embeddededge.com>
+Dan Malek <dan@embeddedalley.com>
 
-       STxGP3                  MPC85xx
-       STxXTc                  MPC8xx
+       stxgp3                  MPC85xx
+       stxssa                  MPC85xx
+       stxxtc                  MPC8xx
 
 Eran Man <eran@nbase.co.il>
 
@@ -257,15 +258,6 @@ Frank Panno <fpanno@delphintech.com>
 
        ep8260                  MPC8260
 
-Peter Pearse <peter.pearse@arm.com>
-       integratorcp            All current ARM supplied &
-                               supported core modules
-                               - see http://www.arm.com
-                               /products/DevTools
-                               /Hardware_Platforms.html
-       versatile               ARM926EJ-S
-       versatile               ARM926EJ-S
-
 Denis Peter <d.peter@mpl.ch>
 
        MIP405                  PPC4xx
@@ -444,6 +436,9 @@ Gary Jennejohn <gj@denx.de>
        smdk2400                ARM920T
        trab                    ARM920T
 
+Konstantin Kletschke <kletschke@synertronixx.de>
+       scb9328                 ARM920T
+
 Nishant Kamat <nskamat@ti.com>
 
        omap1610h2              ARM926EJS
@@ -461,6 +456,15 @@ Rolf Offermanns <rof@sysgo.de>
 
        shannon                 SA1100
 
+Peter Pearse <peter.pearse@arm.com>
+       integratorcp            All current ARM supplied &
+                               supported core modules
+                               -see http://www.arm.com
+                               /products/DevTools
+                               /Hardware_Platforms.html
+       versatile               ARM926EJ-S
+       versatile               ARM926EJ-S
+
 Dave Peverley <dpeverley@mpc-data.co.uk>
 
        omap730p2               ARM926EJS
diff --git a/MAKEALL b/MAKEALL
index 23402a298debb3d736c738c6253d35d9cfe20f5f..81f5dfcb0583d496838314b512f1a1dbfc9ccd6b 100755 (executable)
--- a/MAKEALL
+++ b/MAKEALL
@@ -132,8 +132,8 @@ LIST_8260=" \
 #########################################################################
 
 LIST_83xx="    \
-       MPC832XEMDS     MPC8349EMDS     MPC8349ITX      MPC8349ITXGP    \
-       MPC8360EMDS     sbc8349         TQM834x                         \
+       MPC8313ERDB     MPC832XEMDS     MPC8349EMDS     MPC8349ITX      \
+       MPC8349ITXGP    MPC8360EMDS     sbc8349         TQM834x         \
 "
 
 
@@ -142,10 +142,11 @@ LIST_83xx="       \
 #########################################################################
 
 LIST_85xx="    \
-       MPC8540ADS      MPC8540EVAL     MPC8541CDS      MPC8548CDS      \
-       MPC8555CDS      MPC8560ADS      PM854           PM856           \
-       sbc8540         sbc8560         stxgp3          TQM8540         \
-       TQM8541         TQM8555         TQM8560                         \
+       MPC8540ADS      MPC8540EVAL     MPC8541CDS      MPC8544DS       \
+       MPC8548CDS      MPC8555CDS      MPC8560ADS      PM854           \
+       PM856           sbc8540         sbc8560         stxgp3          \
+       stxssa          TQM8540         TQM8541         TQM8555         \
+       TQM8560                                                         \
 "
 
 #########################################################################
@@ -155,6 +156,7 @@ LIST_85xx=" \
 LIST_74xx="    \
        DB64360         DB64460         EVB64260        P3G4            \
        p3m7448         PCIPPC2         PCIPPC6         ZUMA            \
+       mpc7448hpc2
 "
 
 LIST_7xx="     \
index 99f38afb6f7ffcce3a8f342181b5f473cd985012..463757c43b2cb29f5b7b7a05e0ace8d70a41926c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -149,7 +149,7 @@ ifeq ($(ARCH),blackfin)
 CROSS_COMPILE = bfin-uclinux-
 endif
 ifeq ($(ARCH),avr32)
-CROSS_COMPILE = avr32-
+CROSS_COMPILE = avr32-linux-
 endif
 endif
 endif
@@ -197,6 +197,9 @@ LIBS += cpu/$(CPU)/lib$(CPU).a
 ifdef SOC
 LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a
 endif
+ifeq ($(CPU),ixp)
+LIBS += cpu/ixp/npe/libnpe.a
+endif
 LIBS += lib_$(ARCH)/lib$(ARCH).a
 LIBS += fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a \
        fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a
@@ -219,7 +222,7 @@ LIBS += $(shell if [ -d post/cpu/$(CPU) ]; then echo \
 LIBS += $(shell if [ -d post/board/$(BOARDDIR) ]; then echo \
        "post/board/$(BOARDDIR)/libpost$(BOARD).a"; fi)
 LIBS += common/libcommon.a
-LIBS += $(BOARDLIBS)
+LIBS += libfdt/libfdt.a
 
 LIBS := $(addprefix $(obj),$(LIBS))
 .PHONY : $(LIBS)
@@ -1040,8 +1043,7 @@ bamboo_nand_config:       unconfig
        @mkdir -p $(obj)nand_spl
        @mkdir -p $(obj)board/amcc/bamboo
        @echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h
-       @echo "Compile NAND boot image for bamboo"
-       @$(MKCONFIG) -a bamboo ppc ppc4xx bamboo amcc
+       @$(MKCONFIG) -n $@ -a bamboo ppc ppc4xx bamboo amcc
        @echo "TEXT_BASE = 0x01000000" > $(obj)board/amcc/bamboo/config.tmp
        @echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk
 
@@ -1633,6 +1635,19 @@ r5200_config :           unconfig
 ## MPC83xx Systems
 #########################################################################
 
+MPC8313ERDB_33_config \
+MPC8313ERDB_66_config: unconfig
+       @echo "" >include/config.h ; \
+       if [ "$(findstring _33_,$@)" ] ; then \
+               echo -n "...33M ..." ; \
+               echo "#define CFG_33MHZ" >>include/config.h ; \
+       fi ; \
+       if [ "$(findstring _66_,$@)" ] ; then \
+               echo -n "...66M..." ; \
+               echo "#define CFG_66MHZ" >>include/config.h ; \
+       fi ;
+       @$(MKCONFIG) -a MPC8313ERDB ppc mpc83xx mpc8313erdb
+
 MPC832XEMDS_config \
 MPC832XEMDS_HOST_33_config \
 MPC832XEMDS_HOST_66_config \
@@ -1739,12 +1754,18 @@ MPC8560ADS_config:      unconfig
 MPC8541CDS_config:     unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8541cds cds
 
+MPC8544DS_config:      unconfig
+       @$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8544ds freescale
+
 MPC8548CDS_config:     unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8548cds cds
 
 MPC8555CDS_config:     unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8555cds cds
 
+MPC8568MDS_config:     unconfig
+       @$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8568mds
+
 PM854_config:  unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc85xx pm854
 
@@ -1780,6 +1801,9 @@ sbc8560_66_config:      unconfig
 stxgp3_config:         unconfig
        @$(MKCONFIG) $(@:_config=) ppc mpc85xx stxgp3
 
+stxssa_config:         unconfig
+       @$(MKCONFIG) $(@:_config=) ppc mpc85xx stxssa
+
 TQM8540_config         \
 TQM8541_config         \
 TQM8555_config         \
@@ -1829,6 +1853,9 @@ EVB64260_config   \
 EVB64260_750CX_config: unconfig
        @$(MKCONFIG) EVB64260 ppc 74xx_7xx evb64260
 
+mpc7448hpc2_config:  unconfig
+       @$(MKCONFIG) $(@:_config=) ppc 74xx_7xx mpc7448hpc2
+
 P3G4_config: unconfig
        @$(MKCONFIG) $(@:_config=) ppc 74xx_7xx evb64260
 
diff --git a/README b/README
index 87d6d10717adc96522d1f040b616b827e4bdef55..bb5b46e33791c787cf492deac85c45a0a7142214 100644 (file)
--- a/README
+++ b/README
@@ -718,6 +718,7 @@ The following options need to be configured:
                CFG_CMD_VFD     * VFD support (TRAB)
                CFG_CMD_BSP     * Board SPecific functions
                CFG_CMD_CDP     * Cisco Discover Protocol support
+               CFG_CMD_FSL     * Microblaze FSL support
                -----------------------------------------------
                CFG_CMD_ALL     all
 
@@ -2398,17 +2399,17 @@ configurations; the following names are supported:
        csb272_config           lwmon_config            sbc8260_config
        CU824_config            MBX860T_config          sbc8560_33_config
        DUET_ADS_config         MBX_config              sbc8560_66_config
-       EBONY_config            MPC8260ADS_config       SM850_config
-       ELPT860_config          MPC8540ADS_config       SPD823TS_config
-       ESTEEM192E_config       MPC8540EVAL_config      stxgp3_config
-       ETX094_config           MPC8560ADS_config       SXNI855T_config
-       FADS823_config          NETVIA_config           TQM823L_config
-       FADS850SAR_config       omap1510inn_config      TQM850L_config
-       FADS860T_config         omap1610h2_config       TQM855L_config
-       FPS850L_config          omap1610inn_config      TQM860L_config
-                               omap5912osk_config      walnut_config
-                               omap2420h4_config       Yukon8220_config
-                                                       ZPC1900_config
+       EBONY_config            mpc7448hpc2_config      SM850_config
+       ELPT860_config          MPC8260ADS_config       SPD823TS_config
+       ESTEEM192E_config       MPC8540ADS_config       stxgp3_config
+       ETX094_config           MPC8540EVAL_config      SXNI855T_config
+       FADS823_config          NMPC8560ADS_config      TQM823L_config
+       FADS850SAR_config       NETVIA_config           TQM850L_config
+       FADS860T_config         omap1510inn_config      TQM855L_config
+       FPS850L_config          omap1610h2_config       TQM860L_config
+                               omap1610inn_config      walnut_config
+                               omap5912osk_config      Yukon8220_config
+                               omap2420h4_config       ZPC1900_config
 
 Note: for some board special configuration names may exist; check if
       additional information is available from the board vendor; for
index 0b92053e1af9d0fe65051fe25d9b08af4157e3ed..441caa405ae3c5e2a8a1c66c0ee5c3970c4480a2 100644 (file)
@@ -21,5 +21,5 @@
 # MA 02111-1307 USA
 #
 
-PLATFORM_RELFLAGS      += -ffixed-r5 -mno-pic -mrelax
+PLATFORM_RELFLAGS      += -ffixed-r5 -fPIC -mno-init-got -mrelax
 PLATFORM_LDFLAGS       += --relax
index baf598c677300d8ad3f771412a38b91777914175..3b63c8a741d95e7d20052eee01541a9f5b2e09a5 100644 (file)
@@ -62,6 +62,10 @@ int board_early_init_f(void)
 
        acadia_gpio_init();
 
+       /* Configure 405EZ for NAND usage */
+       mtsdr(sdrnand0, 0x80c00000);
+       mtsdr(sdrultra0, 0x8d110000);
+
        /* USB Host core needs this bit set */
        mfsdr(sdrultra1, reg);
        mtsdr(sdrultra1, reg | SDR_ULTRA1_LEDNENABLE);
@@ -91,8 +95,11 @@ int misc_init_f(void)
 int checkboard(void)
 {
        char *s = getenv("serial#");
+       u8 rev;
+
+       rev = in8(CFG_CPLD_BASE + 0);
+       printf("Board: Acadia - AMCC PPC405EZ Evaluation Board, Rev. %X", rev);
 
-       printf("Board: Acadia - AMCC PPC405EZ Evaluation Board");
        if (s != NULL) {
                puts(", serial# ");
                puts(s);
index 826d192501b7522ddba1c8a88b33c92c5cba5b90..78e2cb42a9a8743dfd238c661409d2d8913688bc 100644 (file)
@@ -371,6 +371,14 @@ void denali_core_search_data_eye(unsigned long memory_size)
 }
 #endif /* CONFIG_DDR_DATA_EYE */
 
+#if defined(CONFIG_NAND_SPL)
+/* Using cpu/ppc4xx/speed.c to calculate the bus frequency is too big
+ * for the 4k NAND boot image so define bus_frequency to 133MHz here
+ * which is save for the refresh counter setup.
+ */
+#define get_bus_freq(val)      133000000
+#endif
+
 /*************************************************************************
  *
  * initdram -- 440EPx's DDR controller is a DENALI Core
@@ -408,7 +416,7 @@ long int initdram (int board_type)
        mtsdram(DDR0_22, 0x00267F0B);
        mtsdram(DDR0_23, 0x00000000);
        mtsdram(DDR0_24, 0x01010002);
-       if (speed > 133333333)
+       if (speed > 133333334)
                mtsdram(DDR0_26, 0x5B26050C);
        else
                mtsdram(DDR0_26, 0x5B260408);
index 930fa71cb980ac5c5909d5d580eac875dbcd8d5f..ba365aea3188e33a5b0f26dc2025206e94746454 100644 (file)
@@ -363,8 +363,8 @@ int checkboard(void)
        printf("Board: Rainier - AMCC PPC440GRx Evaluation Board");
 #endif
 
-       rev = *(u8 *)(CFG_BCSR_BASE + 0);
-       val = *(u8 *)(CFG_BCSR_BASE + 5) & 0x01;
+       rev = in8(CFG_BCSR_BASE + 0);
+       val = in8(CFG_BCSR_BASE + 5) & 0x01;
        printf(", Rev. %X, PCI=%d MHz", rev, val ? 66 : 33);
 
        if (s != NULL) {
index 155d46ac979d6989d75524f67544adb35bc95f4d..8a15713cc42c8f3dee0559e2fbda0350b2083060 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 
 LIB    := $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o flash.o
+COBJS  := $(BOARD).o flash.o eth.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
index 4d737d293adc540fec06931bf9e03f027d49c141..6618963cc0e4ed6a17c07877b7ccaf0c27b20b6b 100644 (file)
@@ -23,6 +23,8 @@
 
 #include <asm/io.h>
 #include <asm/sdram.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/hmatrix2.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -40,9 +42,27 @@ static const struct sdram_info sdram = {
        .txsr           = 5,
 };
 
-void board_init_memories(void)
+int board_early_init_f(void)
 {
-       gd->sdram_size = sdram_init(&sdram);
+       /* 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)
similarity index 66%
rename from cpu/at32ap/at32ap7000/hebi.c
rename to board/atmel/atstk1000/eth.c
index 3b32adf1ea9d8daa02c115708f69d76d44545cd8..3a7916efed294be45c6bd1ea7222f044181f84f1 100644 (file)
@@ -1,5 +1,7 @@
 /*
- * Copyright (C) 2006 Atmel Corporation
+ * Copyright (C) 2005-2006 Atmel Corporation
+ *
+ * Ethernet initialization for the ATSTK1000 starterkit
  *
  * See file CREDITS for list of people who contributed to this
  * project.
  */
 #include <common.h>
 
-#include <asm/io.h>
-
-#include <asm/arch/hmatrix2.h>
 #include <asm/arch/memory-map.h>
-#include <asm/arch/platform.h>
 
-void cpu_enable_sdram(void)
-{
-       const struct device *hmatrix;
+extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr);
 
-       hmatrix = get_device(DEVICE_HMATRIX);
+#if defined(CONFIG_MACB) && (CONFIG_COMMANDS & CFG_CMD_NET)
+void atstk1000_eth_initialize(bd_t *bi)
+{
+       int id = 0;
 
-       /* Set the SDRAM_ENABLE bit in the HEBI SFR */
-       hmatrix2_writel(hmatrix, SFR4, 1 << 1);
+       macb_eth_initialize(id++, (void *)MACB0_BASE, bi->bi_phy_id[0]);
+       macb_eth_initialize(id++, (void *)MACB1_BASE, bi->bi_phy_id[1]);
 }
+#endif
index 3aebf66ee24015a01d5f5f4c0ff68e2dc4bb86c0..958f4dc330c82fb0c245c3fafcf2deae7306632e 100644 (file)
@@ -57,7 +57,7 @@ unsigned long flash_init(void)
 
        gd->bd->bi_flashstart = CFG_FLASH_BASE;
        gd->bd->bi_flashsize = CFG_FLASH_SIZE;
-       gd->bd->bi_flashoffset = __edata_lma - _text;
+       gd->bd->bi_flashoffset = _edata - _text;
 
        flash_info[0].size = CFG_FLASH_SIZE;
        flash_info[0].sector_count = 135;
index ef89ea4dfa53d696cb47d5fb1ab6e06f76192632..34e347aecd5e6b7abd2ace5dd293f840838d427a 100644 (file)
@@ -40,35 +40,38 @@ SECTIONS
        }
        . = ALIGN(32);
        __flashprog_end = .;
+       _etext = .;
 
-       . = ALIGN(8);
        .rodata : {
                *(.rodata)
                *(.rodata.*)
        }
-       _etext = .;
 
-       __data_lma = ALIGN(8);
-       . = 0x24000000;
+       . = ALIGN(8);
        _data = .;
-       .data : AT(__data_lma) {
+       .data : {
                *(.data)
                *(.data.*)
        }
 
        . = ALIGN(4);
        __u_boot_cmd_start = .;
-       __u_boot_cmd_lma = __data_lma + (__u_boot_cmd_start - _data);
-       .u_boot_cmd : AT(__u_boot_cmd_lma) {
+       .u_boot_cmd : {
                KEEP(*(.u_boot_cmd))
        }
        __u_boot_cmd_end = .;
 
+       . = ALIGN(4);
+       _got = .;
+       .got : {
+               *(.got)
+       }
+       _egot = .;
+
        . = ALIGN(8);
        _edata = .;
-       __edata_lma = __u_boot_cmd_lma + (_edata - __u_boot_cmd_start);
 
-       .bss : AT(__edata_lma) {
+       .bss : {
                *(.bss)
                *(.bss.*)
        }
index 4fe7d785f36ca24ff1ae2cbda597d522f05060c4..e55c1a78a82b5b38b9e3af5a6b587f463d0bfcce 100644 (file)
@@ -1,7 +1,7 @@
 #
 # U-boot - Makefile
 #
-# Copyright (c) 2007 Analog Device Inc.
+# Copyright (c) 2005-2007 Analog Device Inc.
 #
 # (C) Copyright 2000-2006
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
index feaeb00697089f1ef6293077e7c4d22bdcc4de92..1dd4a3fe2e0af9c9139a13a13478a43c625e84a7 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - ezkit533.c
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index e211918bc20ae438ad89c05ff916021e1d48fb0f..bd9e859e70db09be2207e64d99e6eb43109ba9ff 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - flash-defines.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef __FLASHDEFINES_H__
@@ -60,7 +60,7 @@ void reset_flash(void);
 int erase_flash(void);
 int erase_block_flash(int, unsigned long);
 void unlock_flash(long lOffset);
-int write_data(long lStart, long lCount, long lStride, int *pnData);
+int write_data(long lStart, long lCount, uchar *pnData);
 int FillData(long lStart, long lCount, long lStride, int *pnData);
 int read_data(long lStart, long lCount, long lStride, int *pnData);
 int read_flash(long nOffset, int *pnValue);
index 067a2609065a3865b14be06e15cb44ab5bd7ab4b..299cdbae735bbc4521349b41e6539272035997a2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - flash.c Flash driver for PSD4256GV
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  * This file is based on BF533EzFlash.c originally written by Analog Devices, Inc.
  *
  * (C) Copyright 2000-2004
@@ -22,8 +22,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <asm/io.h>
@@ -178,63 +178,66 @@ int flash_erase(flash_info_t * info, int s_first, int s_last)
 int write_buff(flash_info_t * info, uchar * src, ulong addr, ulong cnt)
 {
        int ret;
-
-       ret = write_data(addr, cnt, 1, (int *)src);
+       int d;
+       if (addr % 2) {
+               read_flash(addr - 1 - CFG_FLASH_BASE, &d);
+               d = (int)((d & 0x00FF) | (*src++ << 8));
+               ret = write_data(addr - 1, 2, (uchar *) & d);
+               if (ret == FLASH_FAIL)
+                       return ERR_NOT_ERASED;
+               ret = write_data(addr + 1, cnt - 1, src);
+       } else
+               ret = write_data(addr, cnt, src);
        if (ret == FLASH_FAIL)
                return ERR_NOT_ERASED;
        return FLASH_SUCCESS;
 }
 
-int write_data(long lStart, long lCount, long lStride, int *pnData)
+int write_data(long lStart, long lCount, uchar * pnData)
 {
        long i = 0;
-       int j = 0;
        unsigned long ulOffset = lStart - CFG_FLASH_BASE;
        int d;
-       int iShift = 0;
-       int iNumWords = 2;
-       int nLeftover = lCount % 4;
        int nSector = 0;
+       int flag = 0;
 
-       for (i = 0; (i < lCount / 4) && (i < BUFFER_SIZE); i++) {
-               for (iShift = 0, j = 0; (j < iNumWords);
-                    j++, ulOffset += (lStride * 2)) {
-                       if ((ulOffset >= INVALIDLOCNSTART)
-                           && (ulOffset < INVALIDLOCNEND)) {
-                               printf
-                                   ("Invalid locations, Try writing to another location \n");
-                               return FLASH_FAIL;
-                       }
-                       get_sector_number(ulOffset, &nSector);
-                       read_flash(ulOffset, &d);
-                       if (d != 0xffff) {
-                               printf
-                                   ("Flash not erased at offset 0x%x Please erase to reprogram \n",
-                                    ulOffset);
-                               return FLASH_FAIL;
-                       }
-                       unlock_flash(ulOffset);
-                       if (write_flash(ulOffset, (pnData[i] >> iShift)) < 0) {
-                               printf("Error programming the flash \n");
-                               return FLASH_FAIL;
-                       }
-                       iShift += 16;
-               }
+       if (lCount % 2) {
+               flag = 1;
+               lCount = lCount - 1;
        }
-       if (nLeftover > 0) {
-               if ((ulOffset >= INVALIDLOCNSTART)
-                   && (ulOffset < INVALIDLOCNEND))
+
+       for (i = 0; i < lCount - 1; i += 2, ulOffset += 2) {
+               get_sector_number(ulOffset, &nSector);
+               read_flash(ulOffset, &d);
+               if (d != 0xffff) {
+                       printf
+                           ("Flash not erased at offset 0x%x Please erase to reprogram \n",
+                            ulOffset);
                        return FLASH_FAIL;
+               }
+               unlock_flash(ulOffset);
+               d = (int)(pnData[i] | pnData[i + 1] << 8);
+               write_flash(ulOffset, d);
+               if (poll_toggle_bit(ulOffset) < 0) {
+                       printf("Error programming the flash \n");
+                       return FLASH_FAIL;
+               }
+               if ((i > 0) && (!(i % AFP_SectorSize2)))
+                       printf(".");
+       }
+       if (flag) {
                get_sector_number(ulOffset, &nSector);
                read_flash(ulOffset, &d);
                if (d != 0xffff) {
                        printf
-                           ("Flash already programmed. Please erase to reprogram \n");
-                       printf("uloffset = 0x%x \t d = 0x%x\n", ulOffset, d);
+                           ("Flash not erased at offset 0x%x Please erase to reprogram \n",
+                            ulOffset);
                        return FLASH_FAIL;
                }
                unlock_flash(ulOffset);
-               if (write_flash(ulOffset, pnData[i]) < 0) {
+               d = (int)(pnData[i] | (d & 0xFF00));
+               write_flash(ulOffset, d);
+               if (poll_toggle_bit(ulOffset) < 0) {
                        printf("Error programming the flash \n");
                        return FLASH_FAIL;
                }
index 97765165f8807a54b6d86fe96f9bf188b47b1d33..cc654b89561436e8c47b64a3f4795439d5ecd3e2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - psd4256.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 /*
index 8223d591ce41b493b22ecd302f24bb8eb8b62f51..02c941b5a5d6f4a3eba29f119463e3d78608a884 100644 (file)
@@ -1,7 +1,7 @@
 #
 # U-boot - Makefile
 #
-# Copyright (c) 2007 Analog Device Inc.
+# Copyright (c) 2005-2007 Analog Device Inc.
 #
 # (C) Copyright 2000-2006
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
index 2f6e75187b1659999e68d4e0aafa4fcb659e3dfe..b9dff99171a46cf81b2eebdad9d2ab4255b67e37 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - stamp.c STAMP board specific routines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index b2b51aa2ba24ac5534fe910189903cb883ebaf9d..1e58e47546d759c13c8fa2e41240950d2820bca0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - stamp.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef __STAMP_H__
index cc4e9985fec454f38317493c102d890d72151a6d..47f7c9edf6f666a405280577ba834b1bdad19467 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - BF537.c
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index f19e171d04f26a6621a7f3a46a096b00acf39e10..acc1e8638bfc841a0e53c6d5a3bdf48815e55d6c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - flash-defines.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef __FLASHDEFINES_H__
index 42dcf062b1a3475115b750138ad119edc3bf9484..ed8584147972dac54e797edead2342661a3ed62d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - flash.c Flash driver for PSD4256GV
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  * This file is based on BF533EzFlash.c originally written by Analog Devices, Inc.
  *
  * (C) Copyright 2000-2004
@@ -22,8 +22,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <malloc.h>
index 71281c0139cd6549ae8e18d5a753d8de98504926..989b0194c1eab4c64e86e7ff97d1baa58430677a 100644 (file)
@@ -2,7 +2,7 @@
  * U-boot - ezkit561.c
  *
  * Copyright (c) 2005 Bas Vermeulen <bas@buyways.nl>
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -22,8 +22,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index a42904cf735e4b03aca54ffd192a4dcaee45b352..419232483606a9acd11628f9caa27e643569f044 100644 (file)
@@ -477,11 +477,14 @@ void dummy_func(struct pci_controller* hose, pci_dev_t dev, struct pci_config_ta
 static struct pci_config_table pci_mpc85xxcds_config_table[] = {
        {0x10e3, 0x0513, PCI_ANY_ID, 1, 3, PCI_ANY_ID, dummy_func, {0,0,0}},
        {0x1106, 0x0686, PCI_ANY_ID, 1, 2, 0, mpc85xx_config_via, {0,0,0}},
-       {0x1106, 0x0571, PCI_ANY_ID, 1, 2, 1, mpc85xx_config_via_usbide, {0,0,0}},
+       {0x1106, 0x0571, PCI_ANY_ID, 1, 2, 1,
+               mpc85xx_config_via_usbide, {0,0,0}},
        {0x1105, 0x3038, PCI_ANY_ID, 1, 2, 2, mpc85xx_config_via_usb, {0,0,0}},
        {0x1106, 0x3038, PCI_ANY_ID, 1, 2, 3, mpc85xx_config_via_usb2, {0,0,0}},
-       {0x1106, 0x3058, PCI_ANY_ID, 1, 2, 5, mpc85xx_config_via_power, {0,0,0}},
-       {0x1106, 0x3068, PCI_ANY_ID, 1, 2, 6, mpc85xx_config_via_ac97, {0,0,0}}
+       {0x1106, 0x3058, PCI_ANY_ID, 1, 2, 5,
+               mpc85xx_config_via_power, {0,0,0}},
+       {0x1106, 0x3068, PCI_ANY_ID, 1, 2, 6, mpc85xx_config_via_ac97, {0,0,0}},
+       {},
 };
 
 static struct pci_controller hose[] = {
index 1bea0074fa1c7b5da9bbf2a7139f8badd0ed7fa7..dc87a122a100621e88138fe34b5f1a709b96d524 100644 (file)
@@ -69,6 +69,7 @@ SECTIONS
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
     cpu/mpc85xx/cpu.o (.text)
+    drivers/tsec.o (.text)
     cpu/mpc85xx/speed.o (.text)
     cpu/mpc85xx/pci.o (.text)
     common/dlmalloc.o (.text)
index 978bda5e4dc20d76312b4f97fee557f7299b70f5..d468f5b618a82c43c8855417b5b7d42ed7dd7ebf 100644 (file)
@@ -64,8 +64,9 @@ tlb1_entry:
        /*
         * Number of TLB0 and TLB1 entries in the following table
         */
-       .long 13
+       .long (2f-1f)/16
 
+1:
 #if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)
        /*
         * TLB0         4K      Non-cacheable, guarded
@@ -134,7 +135,7 @@ tlb1_entry:
 
        /*
         * TLB 1:       256M    Non-cacheable, guarded
-        * 0x80000000   256M    PCI1 MEM First half
+        * 0x80000000   256M    PCI1 MEM
         */
        .long TLB1_MAS0(1, 1, 0)
        .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
@@ -143,40 +144,37 @@ tlb1_entry:
 
        /*
         * TLB 2:       256M    Non-cacheable, guarded
-        * 0x90000000   256M    PCI1 MEM Second half
+        * 0x90000000   256M    PCI2 MEM
         */
        .long TLB1_MAS0(1, 2, 0)
        .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_PCI1_MEM_BASE + 0x10000000),
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_PCI2_MEM_BASE),
                        0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_PCI1_MEM_BASE + 0x10000000),
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_PCI2_MEM_BASE),
                        0,0,0,0,0,1,0,1,0,1)
 
        /*
-        * TLB 3:       256M    Non-cacheable, guarded
-        * 0xa0000000   256M    PCI2 MEM First half
+        * TLB 3:       1GB     Non-cacheable, guarded
+        * 0xa0000000   256M    PEX MEM First half
+        * 0xb0000000   256M    PEX MEM Second half
+        * 0xc0000000   256M    Rapid IO MEM First half
+        * 0xd0000000   256M    Rapid IO MEM Second half
         */
        .long TLB1_MAS0(1, 3, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_PCI2_MEM_BASE), 0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_PCI2_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_PEX_MEM_BASE), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_PEX_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)
 
        /*
-        * TLB 4:       256M    Non-cacheable, guarded
-        * 0xb0000000   256M    PCI2 MEM Second half
+        * TLB 4:       Reserved for future usage
         */
-       .long TLB1_MAS0(1, 4, 0)
-       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
-       .long TLB1_MAS2(E500_TLB_EPN(CFG_PCI2_MEM_BASE + 0x10000000),
-                       0,0,0,0,1,0,1,0)
-       .long TLB1_MAS3(E500_TLB_RPN(CFG_PCI2_MEM_BASE + 0x10000000),
-                       0,0,0,0,0,1,0,1,0,1)
 
        /*
         * TLB 5:       64M     Non-cacheable, guarded
         * 0xe000_0000  1M      CCSRBAR
-        * 0xe200_0000  16M     PCI1 IO
-        * 0xe300_0000  16M     PCI2 IO
+        * 0xe200_0000  8M      PCI1 IO
+        * 0xe280_0000  8M      PCI2 IO
+        * 0xe300_0000  16M     PEX IO
         */
        .long TLB1_MAS0(1, 5, 0)
        .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
@@ -200,19 +198,22 @@ tlb1_entry:
        .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1M)
        .long TLB1_MAS2(E500_TLB_EPN(CADMUS_BASE_ADDR), 0,0,0,0,1,0,1,0)
        .long TLB1_MAS3(E500_TLB_RPN(CADMUS_BASE_ADDR), 0,0,0,0,0,1,0,1,0,1)
-
+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     PCI2 MEM                512M
+ * 0x8000_0000     0x8fff_ffff     PCI1 MEM                256M
+ * 0x9000_0000     0x9fff_ffff     PCI2 MEM                256M
+ * 0xa000_0000     0xbfff_ffff     PEX MEM                 512M
+ * 0xc000_0000     0xdfff_ffff     RapidIO                 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
+ * 0xe200_0000     0xe27f_ffff     PCI1 IO                 8M
+ * 0xe280_0000     0xe2ff_ffff     PCI2 IO                 8M
+ * 0xe300_0000     0xe3ff_ffff     PEX IO                  16M
+ * 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
@@ -229,27 +230,39 @@ tlb1_entry:
 #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 LAWAR1         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_256M))
 
 #define LAWBAR2 ((CFG_PCI2_MEM_BASE>>12) & 0xfffff)
-#define LAWAR2         (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M))
+#define LAWAR2         (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_256M))
 
 #define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff)
-#define LAWAR3         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_1M))
+#define LAWAR3         (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_8M))
 
 #define LAWBAR4 ((CFG_PCI2_IO_PHYS>>12) & 0xfffff)
-#define LAWAR4         (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_1M))
+#define LAWAR4         (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_8M))
 
 /* 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))
 
+#define LAWBAR6 ((CFG_PEX_MEM_BASE>>12) & 0xfffff)
+#define LAWAR6         (LAWAR_EN | LAWAR_TRGT_IF_PEX | (LAWAR_SIZE & LAWAR_SIZE_512M))
+
+#define LAWBAR7 ((CFG_PEX_IO_PHYS>>12) & 0xfffff)
+#define LAWAR7         (LAWAR_EN | LAWAR_TRGT_IF_PEX | (LAWAR_SIZE & LAWAR_SIZE_16M))
+
+#define LAWBAR8 ((CFG_RIO_MEM_BASE>>12) & 0xfffff)
+#define LAWAR8  (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M))
+
        .section .bootpg, "ax"
        .globl  law_entry
 
 law_entry:
        entry_start
-       .long 6
+       .long (4f-3f)/8
+3:
        .long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3
-       .long LAWBAR4,LAWAR4,LAWBAR5,LAWAR5
+       .long LAWBAR4,LAWAR4,LAWBAR5,LAWAR5,LAWBAR6,LAWAR6,LAWBAR7,LAWAR7
+       .long LAWBAR8,LAWAR8
+4:
        entry_end
index 7433ebf25bc7c96daa838817b07e15279d63efa2..929ff2e66292aca149e8308c8e278c995a54e919 100644 (file)
@@ -51,6 +51,7 @@ int checkboard (void)
 {
        volatile immap_t *immap = (immap_t *) CFG_CCSRBAR;
        volatile ccsr_gur_t *gur = &immap->im_gur;
+       volatile ccsr_local_ecm_t *ecm = &immap->im_local_ecm;
 
        /* PCI slot in USER bits CSR[6:7] by convention. */
        uint pci_slot = get_pci_slot ();
@@ -89,6 +90,12 @@ int checkboard (void)
         */
        local_bus_init ();
 
+       /*
+        * Fix CPU2 errata: A core hang possible while executing a
+        * msync instruction and a snoopable transaction from an I/O
+        * master tagged to make quick forward progress is present.
+        */
+       ecm->eebpcr |= (1 << 16);
 
        /*
         * Hack TSEC 3 and 4 IO voltages.
@@ -303,11 +310,14 @@ void dummy_func(struct pci_controller* hose, pci_dev_t dev, struct pci_config_ta
 static struct pci_config_table pci_mpc85xxcds_config_table[] = {
        {0x10e3, 0x0513, PCI_ANY_ID, 1, 3, PCI_ANY_ID, dummy_func, {0,0,0}},
        {0x1106, 0x0686, PCI_ANY_ID, 1, 2, 0, mpc85xx_config_via, {0,0,0}},
-       {0x1106, 0x0571, PCI_ANY_ID, 1, 2, 1, mpc85xx_config_via_usbide, {0,0,0}},
+       {0x1106, 0x0571, PCI_ANY_ID, 1, 2, 1,
+               mpc85xx_config_via_usbide, {0,0,0}},
        {0x1105, 0x3038, PCI_ANY_ID, 1, 2, 2, mpc85xx_config_via_usb, {0,0,0}},
        {0x1106, 0x3038, PCI_ANY_ID, 1, 2, 3, mpc85xx_config_via_usb2, {0,0,0}},
-       {0x1106, 0x3058, PCI_ANY_ID, 1, 2, 5, mpc85xx_config_via_power, {0,0,0}},
-       {0x1106, 0x3068, PCI_ANY_ID, 1, 2, 6, mpc85xx_config_via_ac97, {0,0,0}}
+       {0x1106, 0x3058, PCI_ANY_ID, 1, 2, 5,
+               mpc85xx_config_via_power, {0,0,0}},
+       {0x1106, 0x3068, PCI_ANY_ID, 1, 2, 6, mpc85xx_config_via_ac97, {0,0,0}},
+       {},
 };
 
 static struct pci_controller hose[] = {
index 2c8fe9603d9121882c49752a959458c5ee4fd6ea..c1f3495d7590f6e78f18dfa7782d6cf3930077bc 100644 (file)
@@ -69,6 +69,7 @@ SECTIONS
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
     cpu/mpc85xx/cpu.o (.text)
+    drivers/tsec.o (.text)
     cpu/mpc85xx/speed.o (.text)
     cpu/mpc85xx/pci.o (.text)
     common/dlmalloc.o (.text)
index d980ea63102ada4fdd480016b569ed130848dd91..704bf03164a42d6800a952293a4852ff29c16f99 100644 (file)
@@ -474,11 +474,14 @@ void dummy_func(struct pci_controller* hose, pci_dev_t dev, struct pci_config_ta
 static struct pci_config_table pci_mpc85xxcds_config_table[] = {
        {0x10e3, 0x0513, PCI_ANY_ID, 1, 3, PCI_ANY_ID, dummy_func, {0,0,0}},
        {0x1106, 0x0686, PCI_ANY_ID, 1, 2, 0, mpc85xx_config_via, {0,0,0}},
-       {0x1106, 0x0571, PCI_ANY_ID, 1, 2, 1, mpc85xx_config_via_usbide, {0,0,0}},
+       {0x1106, 0x0571, PCI_ANY_ID, 1, 2, 1,
+               mpc85xx_config_via_usbide, {0,0,0}},
        {0x1105, 0x3038, PCI_ANY_ID, 1, 2, 2, mpc85xx_config_via_usb, {0,0,0}},
        {0x1106, 0x3038, PCI_ANY_ID, 1, 2, 3, mpc85xx_config_via_usb2, {0,0,0}},
-       {0x1106, 0x3058, PCI_ANY_ID, 1, 2, 5, mpc85xx_config_via_power, {0,0,0}},
-       {0x1106, 0x3068, PCI_ANY_ID, 1, 2, 6, mpc85xx_config_via_ac97, {0,0,0}}
+       {0x1106, 0x3058, PCI_ANY_ID, 1, 2, 5,
+               mpc85xx_config_via_power, {0,0,0}},
+       {0x1106, 0x3068, PCI_ANY_ID, 1, 2, 6, mpc85xx_config_via_ac97, {0,0,0}},
+       {},
 };
 
 
@@ -487,7 +490,7 @@ static struct pci_controller hose[] = {
        config_table: pci_mpc85xxcds_config_table,
        },
 #ifdef CONFIG_MPC85XX_PCI2
-       { }
+       {},
 #endif
 };
 
index 2aa2ad78fcd551b3e89fd8b1594b46eb2a37a04a..9285928dc428d89171745c1701628cb566dd0c7c 100644 (file)
@@ -69,6 +69,7 @@ SECTIONS
     cpu/mpc85xx/interrupts.o (.text)
     cpu/mpc85xx/cpu_init.o (.text)
     cpu/mpc85xx/cpu.o (.text)
+    drivers/tsec.o (.text)
     cpu/mpc85xx/speed.o (.text)
     cpu/mpc85xx/pci.o (.text)
     common/dlmalloc.o (.text)
similarity index 60%
rename from board/mpc8641hpcn/pixis.c
rename to board/freescale/common/pixis.c
index 964a17ca0801ab8847c5c00864e3e5f2e6763111..af98157dfd724d51acedd911a5e74c6b2aacc616 100644 (file)
  */
 
 #include <common.h>
-#include <watchdog.h>
 #include <command.h>
+#include <watchdog.h>
 #include <asm/cache.h>
-#include <mpc86xx.h>
 
 #include "pixis.h"
 
 
+static ulong strfractoint(uchar *strptr);
+
+
+/*
+ * Simple board reset.
+ */
+void pixis_reset(void)
+{
+    out8(PIXIS_BASE + PIXIS_RST, 0);
+}
+
+
 /*
  * Per table 27, page 58 of MPC8641HPCN spec.
  */
@@ -235,7 +246,8 @@ void set_px_go_with_watchdog(void)
 }
 
 
-int disable_watchdog(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+int pixis_disable_watchdog_cmd(cmd_tbl_t *cmdtp,
+                              int flag, int argc, char *argv[])
 {
        u8 tmp;
 
@@ -252,7 +264,7 @@ int disable_watchdog(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 }
 
 U_BOOT_CMD(
-          diswd, 1, 0, disable_watchdog,
+          diswd, 1, 0, pixis_disable_watchdog_cmd,
           "diswd       - Disable watchdog timer \n",
           NULL);
 
@@ -263,7 +275,7 @@ U_BOOT_CMD(
  * input: strptr i.e. argv[2]
  */
 
-ulong strfractoint(uchar *strptr)
+static ulong strfractoint(uchar *strptr)
 {
        int i, j, retval;
        int mulconst;
@@ -319,3 +331,142 @@ ulong strfractoint(uchar *strptr)
 
        return retval;
 }
+
+
+int
+pixis_reset_cmd(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       ulong val;
+       ulong corepll;
+
+       /*
+        * No args is a simple reset request.
+        */
+       if (argc <= 1) {
+               pixis_reset();
+               /* not reached */
+       }
+
+       if (strcmp(argv[1], "cf") == 0) {
+
+               /*
+                * Reset with frequency changed:
+                *    cf <SYSCLK freq> <COREPLL ratio> <MPXPLL ratio>
+                */
+               if (argc < 5) {
+                       puts(cmdtp->usage);
+                       return 1;
+               }
+
+               read_from_px_regs(0);
+
+               val = set_px_sysclk(simple_strtoul(argv[2], NULL, 10));
+
+               corepll = strfractoint(argv[3]);
+               val = val + set_px_corepll(corepll);
+               val = val + set_px_mpxpll(simple_strtoul(argv[4], NULL, 10));
+               if (val == 3) {
+                       puts("Setting registers VCFGEN0 and VCTL\n");
+                       read_from_px_regs(1);
+                       puts("Resetting board with values from ");
+                       puts("VSPEED0, VSPEED1, VCLKH, and VCLKL \n");
+                       set_px_go();
+               } else {
+                       puts(cmdtp->usage);
+                       return 1;
+               }
+
+               while (1) ;     /* Not reached */
+
+       } else if (strcmp(argv[1], "altbank") == 0) {
+
+               /*
+                * Reset using alternate flash bank:
+                */
+               if (argv[2] == 0) {
+                       /*
+                        * Reset from alternate bank without changing
+                        * frequency and without watchdog timer enabled.
+                        *      altbank
+                        */
+                       read_from_px_regs(0);
+                       read_from_px_regs_altbank(0);
+                       if (argc > 2) {
+                               puts(cmdtp->usage);
+                               return 1;
+                       }
+                       puts("Setting registers VCFGNE1, VBOOT, and VCTL\n");
+                       set_altbank();
+                       read_from_px_regs_altbank(1);
+                       puts("Resetting board to boot from the other bank.\n");
+                       set_px_go();
+
+               } else if (strcmp(argv[2], "cf") == 0) {
+                       /*
+                        * Reset with frequency changed
+                        *    altbank cf <SYSCLK freq> <COREPLL ratio>
+                        *                              <MPXPLL ratio>
+                        */
+                       read_from_px_regs(0);
+                       read_from_px_regs_altbank(0);
+                       val = set_px_sysclk(simple_strtoul(argv[3], NULL, 10));
+                       corepll = strfractoint(argv[4]);
+                       val = val + set_px_corepll(corepll);
+                       val = val + set_px_mpxpll(simple_strtoul(argv[5],
+                                                                NULL, 10));
+                       if (val == 3) {
+                               puts("Setting registers VCFGEN0, VCFGEN1, VBOOT, and VCTL\n");
+                               set_altbank();
+                               read_from_px_regs(1);
+                               read_from_px_regs_altbank(1);
+                               puts("Enabling watchdog timer on the FPGA\n");
+                               puts("Resetting board with values from ");
+                               puts("VSPEED0, VSPEED1, VCLKH and VCLKL ");
+                               puts("to boot from the other bank.\n");
+                               set_px_go_with_watchdog();
+                       } else {
+                               puts(cmdtp->usage);
+                               return 1;
+                       }
+
+                       while (1) ;     /* Not reached */
+
+               } else if (strcmp(argv[2], "wd") == 0) {
+                       /*
+                        * Reset from alternate bank without changing
+                        * frequencies but with watchdog timer enabled:
+                        *    altbank wd
+                        */
+                       read_from_px_regs(0);
+                       read_from_px_regs_altbank(0);
+                       puts("Setting registers VCFGEN1, VBOOT, and VCTL\n");
+                       set_altbank();
+                       read_from_px_regs_altbank(1);
+                       puts("Enabling watchdog timer on the FPGA\n");
+                       puts("Resetting board to boot from the other bank.\n");
+                       set_px_go_with_watchdog();
+                       while (1) ;     /* Not reached */
+
+               } else {
+                       puts(cmdtp->usage);
+                       return 1;
+               }
+
+       } else {
+               puts(cmdtp->usage);
+               return 1;
+       }
+
+       return 0;
+}
+
+
+U_BOOT_CMD(
+       pixis_reset, CFG_MAXARGS, 1, pixis_reset_cmd,
+       "pixis_reset - Reset the board using the FPGA sequencer\n",
+       "    pixis_reset\n"
+       "    pixis_reset [altbank]\n"
+       "    pixis_reset altbank wd\n"
+       "    pixis_reset altbank cf <SYSCLK freq> <COREPLL ratio> <MPXPLL ratio>\n"
+       "    pixis_reset cf <SYSCLK freq> <COREPLL ratio> <MPXPLL ratio>\n"
+       );
similarity index 89%
rename from board/mpc8641hpcn/pixis.h
rename to board/freescale/common/pixis.h
index cd9a45db87d2f4e24cbd00739935d12fc769d259..ff62a62c74f44b0b218bea27cb1e7a46212aa5f8 100644 (file)
@@ -20,6 +20,7 @@
  * MA 02111-1307 USA
  */
 
+extern void pixis_reset(void);
 extern int set_px_sysclk(ulong sysclk);
 extern int set_px_mpxpll(ulong mpxpll);
 extern int set_px_corepll(ulong corepll);
@@ -28,6 +29,3 @@ extern void read_from_px_regs_altbank(int set);
 extern void set_altbank(void);
 extern void set_px_go(void);
 extern void set_px_go_with_watchdog(void);
-extern int disable_watchdog(cmd_tbl_t *cmdtp,
-                           int flag, int argc, char *argv[]);
-extern ulong strfractoint(uchar *strptr);
diff --git a/board/freescale/mpc8544ds/Makefile b/board/freescale/mpc8544ds/Makefile
new file mode 100644 (file)
index 0000000..bec2168
--- /dev/null
@@ -0,0 +1,58 @@
+#
+# Copyright 2007 Freescale Semiconductor, Inc.
+# (C) Copyright 2001-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
+
+# ifneq ($(OBJTREE),$(SRCTREE))
+# $(shell mkdir -p $(obj)./common)
+# endif
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  := $(BOARD).o \
+          ../common/pixis.o
+
+SOBJS  := init.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
+       $(AR) crv $@ $(OBJS)
+
+clean:
+       rm -f $(OBJS) $(SOBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/freescale/mpc8544ds/config.mk b/board/freescale/mpc8544ds/config.mk
new file mode 100644 (file)
index 0000000..85663ef
--- /dev/null
@@ -0,0 +1,32 @@
+#
+# 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
+#
+
+#
+# mpc8544ds board
+#
+ifndef TEXT_BASE
+TEXT_BASE = 0xfff80000
+endif
+
+PLATFORM_CPPFLAGS += -DCONFIG_E500=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC8544=1
diff --git a/board/freescale/mpc8544ds/init.S b/board/freescale/mpc8544ds/init.S
new file mode 100644 (file)
index 0000000..296fee5
--- /dev/null
@@ -0,0 +1,243 @@
+/*
+ * 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>
+
+#define LAWAR_TRGT_PCI1                0x00000000
+#define LAWAR_TRGT_PCIE1       0x00200000
+#define LAWAR_TRGT_PCIE2       0x00100000
+#define LAWAR_TRGT_PCIE3       0x00300000
+#define LAWAR_TRGT_LBC         0x00400000
+#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, sharen, 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 TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * 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 TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR),
+                       0,0,0,0,0,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR),
+                       0,0,0,0,0,1,0,1,0,1)
+
+       .long TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 4 * 1024),
+                       0,0,0,0,0,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 4 * 1024),
+                       0,0,0,0,0,1,0,1,0,1)
+
+       .long TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 8 * 1024),
+                       0,0,0,0,0,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 8 * 1024),
+                       0,0,0,0,0,1,0,1,0,1)
+
+       .long TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 12 * 1024),
+                       0,0,0,0,0,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 12 * 1024),
+                       0,0,0,0,0,1,0,1,0,1)
+
+
+       /*
+        * TLB 0:       64M     Non-cacheable, guarded
+        * 0xfc000000   64M     Covers FLASH at 0xFE800000 and 0xFF800000
+        * Out of reset this entry is only 4K.
+        */
+       .long TLB1_MAS0(1, 0, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_BOOT_BLOCK), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_BOOT_BLOCK), 0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLB 1:       1G      Non-cacheable, guarded
+        * 0x80000000   1G      PCIE  8,9,a,b
+        */
+       .long TLB1_MAS0(1, 1, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_PCIE_PHYS),
+               0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_PCIE_PHYS),
+               0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        */
+       .long TLB1_MAS0(1, 2, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_PCI_PHYS),
+                       0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_PCI_PHYS),     0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        */
+       .long TLB1_MAS0(1, 3, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_PCI_PHYS + 0x10000000),
+                       0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_PCI_PHYS + 0x10000000),
+                       0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLB 4:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe100_0000  255M    PCI IO range
+        */
+       .long TLB1_MAS0(1, 4, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR), 0,0,0,0,0,1,0,1,0,1)
+
+#ifdef CFG_LBC_CACHE_BASE
+       /*
+        * TLB 5:       64M     Cacheable, non-guarded
+        */
+       .long TLB1_MAS0(1, 5, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_LBC_CACHE_BASE), 0,0,0,0,0,0,0,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_LBC_CACHE_BASE), 0,0,0,0,0,1,0,1,0,1)
+#endif
+       /*
+        * TLB 6:       64M     Non-cacheable, guarded
+        * 0xf8000000   64M     PIXIS 0xF8000000 - 0xFBFFFFFF
+        */
+       .long TLB1_MAS0(1, 6, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_LBC_NONCACHE_BASE), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_LBC_NONCACHE_BASE), 0,0,0,0,0,1,0,1,0,1)
+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_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN
+
+       .long   (CFG_PCI1_MEM_BASE>>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_16M)
+
+       .long   (CFG_LBC_CACHE_BASE>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M)
+
+       .long   (CFG_PCIE1_MEM_PHYS>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_PCIE1 | (LAWAR_SIZE & LAWAR_SIZE_256M)
+
+       /* To keep to 10 LAWs, PCIE1_IO_PHYS must use top of mem region  */
+
+       .long   (CFG_PCIE2_MEM_PHYS>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_PCIE2 | (LAWAR_SIZE & LAWAR_SIZE_512M)
+
+       .long   (CFG_PCIE2_IO_PHYS>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_PCIE2 | (LAWAR_SIZE & LAWAR_SIZE_16M)
+
+       .long   (CFG_PCIE3_MEM_PHYS>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_PCIE3 | (LAWAR_SIZE & LAWAR_SIZE_256M)
+
+       .long   (CFG_PCIE3_IO_PHYS>>12) & 0xfffff
+       .long   LAWAR_EN | LAWAR_TRGT_PCIE3 | (LAWAR_SIZE & LAWAR_SIZE_16M)
+4:
+       entry_end
diff --git a/board/freescale/mpc8544ds/mpc8544ds.c b/board/freescale/mpc8544ds/mpc8544ds.c
new file mode 100644 (file)
index 0000000..4ff1da9
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * 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 <common.h>
+#include <command.h>
+#include <asm/processor.h>
+#include <asm/immap_85xx.h>
+#include <spd.h>
+#include <miiphy.h>
+
+#include "../common/pixis.h"
+
+#if defined(CONFIG_OF_FLAT_TREE)
+#include <ft_build.h>
+extern void ft_cpu_setup(void *blob, bd_t *bd);
+#endif
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+extern void ddr_enable_ecc(unsigned int dram_size);
+#endif
+
+extern long int spd_sdram(void);
+
+void sdram_init(void);
+
+int board_early_init_f (void)
+{
+       return 0;
+}
+
+int checkboard (void)
+{
+       volatile immap_t *immap = (immap_t *) CFG_CCSRBAR;
+       volatile ccsr_gur_t *gur = &immap->im_gur;
+
+       if ((uint)&gur->porpllsr != 0xe00e0000) {
+               printf("immap size error %x\n",&gur->porpllsr);
+       }
+       printf ("Board: MPC8544DS\n");
+
+       return 0;
+}
+
+long int
+initdram(int board_type)
+{
+       long dram_size = 0;
+
+       puts("Initializing\n");
+
+       dram_size = spd_sdram();
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+       /*
+        * Initialize and enable DDR ECC.
+        */
+       ddr_enable_ecc(dram_size);
+#endif
+       puts("    DDR: ");
+       return dram_size;
+}
+
+#if defined(CFG_DRAM_TEST)
+int
+testdram(void)
+{
+       uint *pstart = (uint *) CFG_MEMTEST_START;
+       uint *pend = (uint *) CFG_MEMTEST_END;
+       uint *p;
+
+       printf("Testing DRAM from 0x%08x to 0x%08x\n",
+              CFG_MEMTEST_START,
+              CFG_MEMTEST_END);
+
+       printf("DRAM test phase 1:\n");
+       for (p = pstart; p < pend; p++)
+               *p = 0xaaaaaaaa;
+
+       for (p = pstart; p < pend; p++) {
+               if (*p != 0xaaaaaaaa) {
+                       printf ("DRAM test fails at: %08x\n", (uint) p);
+                       return 1;
+               }
+       }
+
+       printf("DRAM test phase 2:\n");
+       for (p = pstart; p < pend; p++)
+               *p = 0x55555555;
+
+       for (p = pstart; p < pend; p++) {
+               if (*p != 0x55555555) {
+                       printf ("DRAM test fails at: %08x\n", (uint) p);
+                       return 1;
+               }
+       }
+
+       printf("DRAM test passed.\n");
+       return 0;
+}
+#endif
+
+int last_stage_init(void)
+{
+       return 0;
+}
+
+
+unsigned long
+get_board_sys_clk(ulong dummy)
+{
+       u8 i, go_bit, rd_clks;
+       ulong val = 0;
+
+       go_bit = in8(PIXIS_BASE + PIXIS_VCTL);
+       go_bit &= 0x01;
+
+       rd_clks = in8(PIXIS_BASE + PIXIS_VCFGEN0);
+       rd_clks &= 0x1C;
+
+       /*
+        * Only if both go bit and the SCLK bit in VCFGEN0 are set
+        * should we be using the AUX register. Remember, we also set the
+        * GO bit to boot from the alternate bank on the on-board flash
+        */
+
+       if (go_bit) {
+               if (rd_clks == 0x1c)
+                       i = in8(PIXIS_BASE + PIXIS_AUX);
+               else
+                       i = in8(PIXIS_BASE + PIXIS_SPD);
+       } else {
+               i = in8(PIXIS_BASE + PIXIS_SPD);
+       }
+
+       i &= 0x07;
+
+       switch (i) {
+       case 0:
+               val = 33333333;
+               break;
+       case 1:
+               val = 40000000;
+               break;
+       case 2:
+               val = 50000000;
+               break;
+       case 3:
+               val = 66666666;
+               break;
+       case 4:
+               val = 83000000;
+               break;
+       case 5:
+               val = 100000000;
+               break;
+       case 6:
+               val = 133333333;
+               break;
+       case 7:
+               val = 166666666;
+               break;
+       }
+
+       return val;
+}
+
+#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP)
+void
+ft_board_setup(void *blob, bd_t *bd)
+{
+       u32 *p;
+       int len;
+
+       ft_cpu_setup(blob, bd);
+
+       p = ft_get_prop(blob, "/memory/reg", &len);
+       if (p != NULL) {
+               *p++ = cpu_to_be32(bd->bi_memstart);
+               *p = cpu_to_be32(bd->bi_memsize);
+       }
+}
+#endif
diff --git a/board/freescale/mpc8544ds/u-boot.lds b/board/freescale/mpc8544ds/u-boot.lds
new file mode 100644 (file)
index 0000000..1a8aaa9
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * 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
+ */
+
+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/mpc85xx/start.o        (.bootpg)
+    board/freescale/mpc8544ds/init.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      :
+  {
+    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)
+    cpu/mpc85xx/cpu.o (.text)
+    cpu/mpc85xx/speed.o (.text)
+    common/dlmalloc.o (.text)
+    lib_generic/crc32.o (.text)
+    lib_ppc/extable.o (.text)
+    lib_generic/zlib.o (.text)
+    *(.text)
+    *(.fixup)
+    *(.got1)
+   }
+    _etext = .;
+    PROVIDE (etext = .);
+    .rodata    :
+   {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  }
+  .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       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index d49c0e7e6d58837ddfc75b5939d57ecceadf2db5..ecff8d741566235a78bab67ed6fdc8a920c60e1a 100644 (file)
@@ -1,4 +1,2 @@
+#
 TEXT_BASE = 0x00f80000
-
-# include NPE ethernet driver
-BOARDLIBS = $(obj)cpu/ixp/npe/libnpe.a
index 98b86d1834f6e3b8dea06febf124ae207a8ac757..726366ddf0dccd4086efc033017a1c7a90f2ce5e 100644 (file)
@@ -180,10 +180,6 @@ void lcd_enable (void)
                        break;
                udelay (PSOC_WAIT_TIME);
        }
-       if (!retries) {
-               printf ("%s Warning: PSoC doesn't respond on "
-                       "RTS NEGATE\n", __FUNCTION__);
-       }
 
        return;
 }
index d60d23332b178b9285d50e7a7b9ff0bd3a6edd41..6eb5fe9cfc9950a914e9ebfad3d274a9cc701e6a 100644 (file)
 
 #include <common.h>
 #include <mpc5xxx.h>
+#include <miiphy.h>
+#if defined(CONFIG_OF_FLAT_TREE)
+#include <ft_build.h>
+#endif
 
+#if defined(CONFIG_STATUS_LED)
+#include <status_led.h>
+#endif /* CONFIG_STATUS_LED */
 
 /* Kollmorgen DPR initialization data */
 struct init_elem {
@@ -75,11 +82,27 @@ int board_early_init_r(void)
 }
 
 
+/*
+ * Additional PHY intialization. After being reset in mpc5xxx_fec_init_phy(),
+ * PHY goes into FX mode.  To take it out of the FX mode and switch into
+ * desired TX operation, one needs to clear the FX_SEL bit of Mode Control
+ * Register.
+ */
+void reset_phy(void)
+{
+       unsigned short mode_control;
+
+       miiphy_read("FEC ETHERNET", CONFIG_PHY_ADDR, 0x15, &mode_control);
+       miiphy_write("FEC ETHERNET", CONFIG_PHY_ADDR, 0x15,
+                       mode_control & 0xfffe);
+       return;
+}
+
 #ifndef CFG_RAMBOOT
 /*
  * Helper function to initialize SDRAM controller.
  */
-static void sdram_start (int hi_addr)
+static void sdram_start(int hi_addr)
 {
        long hi_addr_bit = hi_addr ? 0x01000000 : 0;
 
@@ -111,7 +134,7 @@ static void sdram_start (int hi_addr)
 /*
  * Initalize SDRAM - configure SDRAM controller, detect memory size.
  */
-long int initdram (int board_type)
+long int initdram(int board_type)
 {
        ulong dramsize = 0;
 #ifndef CFG_RAMBOOT
@@ -165,8 +188,43 @@ long int initdram (int board_type)
 }
 
 
-int checkboard (void)
+int checkboard(void)
 {
-       puts("Board: Promess Motion-PRO board\n");
+       uchar rev = *(vu_char *)CPLD_REV_REGISTER;
+       printf("Board: Promess Motion-PRO board (CPLD rev. 0x%02x)\n", rev);
        return 0;
 }
+
+
+#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       ft_cpu_setup(blob, bd);
+}
+#endif /* defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP) */
+
+
+#if defined(CONFIG_STATUS_LED)
+void __led_init(led_id_t regaddr, int state)
+{
+       *((vu_long *) regaddr) |= ENABLE_GPIO_OUT;
+
+       if (state == STATUS_LED_ON)
+               *((vu_long *) regaddr) |= LED_ON;
+       else
+               *((vu_long *) regaddr) &= ~LED_ON;
+}
+
+void __led_set(led_id_t regaddr, int state)
+{
+       if (state == STATUS_LED_ON)
+               *((vu_long *) regaddr) |= LED_ON;
+       else
+               *((vu_long *) regaddr) &= ~LED_ON;
+}
+
+void __led_toggle(led_id_t regaddr)
+{
+       *((vu_long *) regaddr) ^= LED_ON;
+}
+#endif /* CONFIG_STATUS_LED */
diff --git a/board/mpc7448hpc2/Makefile b/board/mpc7448hpc2/Makefile
new file mode 100644 (file)
index 0000000..e3d757d
--- /dev/null
@@ -0,0 +1,52 @@
+#
+# (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 $(TOPDIR)/config.mk
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  := $(BOARD).o tsi108_init.o
+SOBJS  := asm_init.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
+
+clean:
+       rm -f $(SOBJS) $(OBJS)
+
+.PHONY: distclean
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude ($obj).depend
+
+#########################################################################
diff --git a/board/mpc7448hpc2/asm_init.S b/board/mpc7448hpc2/asm_init.S
new file mode 100644 (file)
index 0000000..a7a40a1
--- /dev/null
@@ -0,0 +1,918 @@
+/*
+ * (C) Copyright 2004-05;  Tundra Semiconductor Corp.
+ *
+ * Added automatic detect of SDC settings
+ * Copyright (c) 2005 Freescale Semiconductor, Inc.
+ * Maintainer tie-fei.zang@freescale.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
+ */
+
+/*
+ * FILENAME: asm_init.s
+ *
+ * Originator: Alex Bounine
+ *
+ * DESCRIPTION:
+ * Initialization code for the Tundra Tsi108 bridge chip
+ *
+ */
+
+#include <config.h>
+#include <version.h>
+
+#include <ppc_asm.tmpl>
+#include <ppc_defs.h>
+#include <asm/processor.h>
+
+#include <tsi108.h>
+
+/*
+ * Build Configuration Options
+ */
+
+/* #define DISABLE_PBM         disables usage of PB Master */
+/* #define SDC_HARDCODED_INIT  config SDRAM controller with hardcoded values */
+/* #define SDC_AUTOPRECH_EN    enable SDRAM auto precharge */
+
+/*
+ * Hardcoded SDC settings
+ */
+
+#ifdef SDC_HARDCODED_INIT
+
+/* Micron MT9HTF6472AY-40EA1 : Unbuffered, 512MB, 400, CL3, Single Rank */
+
+#define VAL_SD_REFRESH (0x61A)
+#define VAL_SD_TIMING  (0x0308336b)
+#define VAL_SD_D0_CTRL (0x07100021)    /* auto-precharge disabled */
+#define VAL_SD_D0_BAR  (0x0FE00000)    /* 512MB @ 0x00000000 */
+#define VAL_SD_D1_CTRL (0x07100021)    /* auto-precharge disabled */
+#define VAL_SD_D1_BAR  (0x0FE00200)    /* 512MB @ 0x20000000 */
+
+#endif /* SDC_HARDCODED_INIT */
+
+/*
+ CPU Configuration:
+
+ CPU Address and Data Parity enables.
+
+#define CPU_AP
+#define CPU_DP
+*/
+
+/*
+ * Macros
+ * !!! Attention !!! Macros LOAD_PTR, LOAD_U32 and LOAD_MEM defined below are
+ * expected to work correctly for the CSR space within 32KB range.
+ *
+ * LOAD_PTR and LOAD_U32 - load specified register with a 32 bit constant.
+ * These macros are absolutely identical except their names. This difference
+ * is provided intentionally for better readable code.
+ */
+
+#define LOAD_PTR(reg,const32) \
+       addis reg,r0,const32@h; ori reg,reg,const32@l
+
+#define LOAD_U32(reg,const32) \
+       addis reg,r0,const32@h; ori reg,reg,const32@l
+
+/* LOADMEM initializes a register with the contents of a specified 32-bit
+ * memory location, usually a CSR value.
+ */
+
+#define LOAD_MEM(reg,addr32) \
+       addis reg,r0,addr32@ha; lwz reg,addr32@l(reg)
+
+#ifndef SDC_HARDCODED_INIT
+sdc_clk_sync:
+       /* MHz: 0,0,183,100,133,167,200,233 */
+       .long   0, 0, 6, 10, 8, 6, 5, 4         /* nSec */
+#endif
+
+/*
+ * board_asm_init() - early initialization function. Coded to be portable to
+ * dual-CPU configuration.
+ * Checks CPU number and performs board HW initialization if called for CPU0.
+ * Registers used: r3,r4,r5,r6,r19,r29
+ *
+ * NOTE: For dual-CPU configuration only CPU0 is allowed to configure Tsi108
+ * and the rest of the board. Current implementation demonstrates two
+ * possible ways to identify CPU number:
+ * - for MPC74xx platform: uses MSSCR0[ID] bit as defined in UM.
+ * - for PPC750FX/GX boards: uses WHO_AM_I bit reported by Tsi108.
+ */
+
+       .globl board_asm_init
+board_asm_init:
+       mflr    r19     /* Save LR to be able return later. */
+       bl      icache_enable   /* Enable icache to reduce reads from flash. */
+
+/* Initialize pointer to Tsi108 register space */
+
+       LOAD_PTR(r29,CFG_TSI108_CSR_RST_BASE)/* r29 - pointer to tsi108 CSR space */
+       ori r4,r29,TSI108_PB_REG_OFFSET
+
+/* Check Processor Version Number */
+
+       mfspr   r3, PVR
+       rlwinm  r3,r3,16,16,23  /* get ((Processor Version Number) & 0xFF00) */
+
+       cmpli   0,0,r3,0x8000   /* MPC74xx */
+       bne     cont_brd_init
+
+       /*
+        * For MPC744x/5x enable extended BATs[4-7]
+        * Sri: Set HIGH_BAT_EN and XBSEN, and SPD =1
+        * to disable prefetch
+        */
+
+       mfspr   r5, HID0
+       oris    r5, r5, 0x0080  /* Set HID0[HIGH_BAT_EN] bit #8 */
+       ori     r5, r5, 0x0380  /* Set SPD,XBSEN,SGE bits #22,23,24 */
+       mtspr   HID0, r5
+       isync
+       sync
+
+       /* Adding code to disable external interventions in MPX bus mode */
+       mfspr   r3, 1014
+       oris    r3, r3, 0x0100  /* Set the EIDIS bit in MSSCR0:  bit 7 */
+       mtspr   1014, r3
+       isync
+       sync
+
+       /* Sri: code to enable FP unit */
+       mfmsr   r3
+       ori     r3, r3, 0x2000
+       mtmsr   r3
+       isync
+       sync
+
+       /* def CONFIG_DUAL_CPU
+        * For MPC74xx processor, use MSSCR0[ID] bit to identify CPU number.
+        */
+#if(1)
+       mfspr   r3,1014         /* read MSSCR0 */
+       rlwinm. r3,r3,27,31,31  /* get processor ID number */
+       mtspr   SPRN_PIR,r3     /* Save CPU ID */
+       sync
+       bne     init_done
+       b       do_tsi108_init
+
+cont_brd_init:
+
+       /* An alternative method of checking the processor number (in addition
+        * to configuration using MSSCR0[ID] bit on MPC74xx).
+        * Good for IBM PPC750FX/GX.
+        */
+
+       lwz     r3,PB_BUS_MS_SELECT(r4) /* read PB_ID register */
+       rlwinm. r3,r3,24,31,31          /* get processor ID number */
+       bne init_done
+#else
+
+cont_brd_init:
+
+#endif /* CONFIG_DUAL_CPU */
+
+       /* Initialize Tsi108 chip */
+
+do_tsi108_init:
+
+       /*
+        * Adjust HLP/Flash parameters. By default after reset the HLP port is
+        * set to support slow devices. Better performance can be achived when
+        * an optimal parameters are used for specific EPROM device.
+        * NOTE: This should be performed ASAP for the emulation platform
+        * because it has 5MHz HLP clocking.
+        */
+
+#ifdef CONFIG_TSI108EMU
+       ori     r4,r29,TSI108_HLP_REG_OFFSET
+       LOAD_U32(r5,0x434422c0)
+       stw     r5,0x08(r4)     /* set HLP B0_CTRL0 */
+       sync
+       LOAD_U32(r5,0xd0012000)
+       stw     r5,0x0c(r4)             /* set HLP B0_CTRL1 */
+       sync
+#endif
+
+       /* Initialize PB interface. */
+
+       ori r4,r29,TSI108_PB_REG_OFFSET
+
+#if (CFG_TSI108_CSR_BASE != CFG_TSI108_CSR_RST_BASE)
+       /* Relocate (if required) Tsi108 registers. Set new value for
+        * PB_REG_BAR:
+        * Note we are in the 32-bit address mode.
+        */
+       LOAD_U32(r5,(CFG_TSI108_CSR_BASE | 0x01)) /* PB_REG_BAR: BA + EN */
+       stw     r5,PB_REG_BAR(r4)
+       andis.  r29,r5,0xFFFF
+       sync
+       ori     r4,r29,TSI108_PB_REG_OFFSET
+#endif
+
+       /* Set PB Slave configuration register */
+
+       LOAD_U32(r5,0x00002481) /* PB_SCR: TEA enabled,AACK delay = 1 */
+       lwz     r3, PB_RSR(r4)  /* get PB bus mode */
+       xori    r3,r3,0x0001    /* mask PB_BMODE: r3 -> (0 = 60X, 1 = MPX) */
+       rlwimi  r5,r3,14,17,17  /* for MPX: set DTI_MODE bit */
+       stw     r5,PB_SCR(r4)
+       sync
+
+       /* Configure PB Arbiter */
+
+       lwz     r5,PB_ARB_CTRL(r4)      /* Read PB Arbiter Control Register */
+       li      r3, 0x00F0              /* ARB_PIPELINE_DEP mask */
+#ifdef DISABLE_PBM
+       ori     r3,r3,0x1000    /* add PBM_EN to clear (enabled by default) */
+#endif
+       andc    r5,r5,r3        /* Clear the masked bit fields */
+       ori     r5,r5,0x0001    /* Set pipeline depth */
+       stw     r5,PB_ARB_CTRL(r4)
+
+#if (0)        /* currently using the default settings for PBM after reset */
+       LOAD_U32(r5,0x)         /* value for PB_MCR */
+       stw     r5,PB_MCR(r4)
+       sync
+
+       LOAD_U32(r5,0x)         /* value for PB_MCMD */
+       stw     r5,PB_MCMD(r4)
+       sync
+#endif
+
+       /* Disable or enable PVT based on processor bus frequency
+        * 1. Read CG_PWRUP_STATUS register field bits 18,17,16
+        * 2. See if the value is < or > 133mhz (18:16 = 100)
+        * 3. If > enable PVT
+        */
+
+       LOAD_U32(r3,0xC0002234)
+       lwz     r3,0(r3)
+       rlwinm  r3,r3,16,29,31
+
+       cmpi    0,0,r3,0x0004
+       bgt     sdc_init
+
+#ifndef CONFIG_TSI108EMU
+       /* FIXME: Disable PB calibration control for any real Tsi108 board */
+       li      r5,0x0101       /* disable calibration control */
+       stw     r5,PB_PVT_CTRL2(r4)
+       sync
+#endif
+
+       /* Initialize SDRAM controller. */
+
+sdc_init:
+
+#ifndef SDC_HARDCODED_INIT
+       /* get SDC clock prior doing sdram controller autoconfig */
+       ori     r4,r29,TSI108_CLK_REG_OFFSET    /* r4 - ptr to CG registers */
+       lwz     r3, CG_PWRUP_STATUS(r4)         /* get CG configuration */
+       rlwinm  r3,r3,12,29,31                  /* r3 - SD clk */
+       lis     r5,sdc_clk_sync@h
+       ori     r5,r5,sdc_clk_sync@l
+       /* Sri:  At this point check if r3 = 001. If yes,
+        * the memory frequency should be same as the
+        * MPX bus frequency
+        */
+       cmpi    0,0,r3,0x0001
+       bne     get_nsec
+       lwz     r6, CG_PWRUP_STATUS(r4)
+       rlwinm  r6,r6,16,29,31
+       mr      r3,r6
+
+get_nsec:
+       rlwinm  r3,r3,2,0,31
+       lwzx    r9,r5,r3        /* get SD clk rate in nSec */
+       /* ATTN: r9 will be used by SPD routine */
+#endif /* !SDC_HARDCODED_INIT */
+
+       ori     r4,r29,TSI108_SD_REG_OFFSET /* r4 - ptr to SDRAM registers */
+
+       /* Initialize SDRAM controller. SDRAM Size = 512MB, One DIMM. */
+
+       LOAD_U32(r5,0x00)
+       stw     r5,SD_INT_ENABLE(r4) /* Ensure that interrupts are disabled */
+#ifdef ENABLE_SDRAM_ECC
+       li      r5, 0x01
+#endif /* ENABLE_SDRAM_ECC */
+       stw     r5,SD_ECC_CTRL(r4)      /* Enable/Disable ECC */
+       sync
+
+#ifdef SDC_HARDCODED_INIT /* config sdram controller with hardcoded values */
+
+       /* First read the CG_PWRUP_STATUS register to get the
+        * memory speed from bits 22,21,20
+        */
+
+       LOAD_U32(r3,0xC0002234)
+       lwz     r3,0(r3)
+       rlwinm  r3,r3,12,29,31
+
+       /* Now first check for 166, then 200, or default */
+
+       cmpi    0,0,r3,0x0005
+       bne     check_for_200mhz
+
+       /* set values for 166 Mhz memory speed
+        * Set refresh rate and timing parameters
+        */
+       LOAD_U32(r5,0x00000515)
+       stw     r5,SD_REFRESH(r4)
+       LOAD_U32(r5,0x03073368)
+       stw     r5,SD_TIMING(r4)
+       sync
+
+       /* Initialize DIMM0 control and BAR registers */
+       LOAD_U32(r5,VAL_SD_D0_CTRL)     /* auto-precharge disabled */
+#ifdef SDC_AUTOPRECH_EN
+       oris    r5,r5,0x0001            /* set auto precharge EN bit */
+#endif
+       stw     r5,SD_D0_CTRL(r4)
+       LOAD_U32(r5,VAL_SD_D0_BAR)
+       stw     r5,SD_D0_BAR(r4)
+       sync
+
+       /* Initialize DIMM1 control and BAR registers
+        * (same as dimm 0, next 512MB, disabled)
+        */
+       LOAD_U32(r5,VAL_SD_D1_CTRL)     /* auto-precharge disabled */
+#ifdef SDC_AUTOPRECH_EN
+       oris    r5,r5,0x0001    /* set auto precharge EN bit */
+#endif
+       stw     r5,SD_D1_CTRL(r4)
+       LOAD_U32(r5,VAL_SD_D1_BAR)
+       stw     r5,SD_D1_BAR(r4)
+       sync
+
+       b       sdc_init_done
+
+check_for_200mhz:
+
+       cmpi    0,0,r3,0x0006
+       bne     set_default_values
+
+       /* set values for 200Mhz memory speed
+        * Set refresh rate and timing parameters
+        */
+       LOAD_U32(r5,0x0000061a)
+       stw     r5,SD_REFRESH(r4)
+       LOAD_U32(r5,0x03083348)
+       stw     r5,SD_TIMING(r4)
+       sync
+
+       /* Initialize DIMM0 control and BAR registers */
+       LOAD_U32(r5,VAL_SD_D0_CTRL)     /* auto-precharge disabled */
+#ifdef SDC_AUTOPRECH_EN
+       oris    r5,r5,0x0001            /* set auto precharge EN bit */
+#endif
+       stw     r5,SD_D0_CTRL(r4)
+       LOAD_U32(r5,VAL_SD_D0_BAR)
+       stw     r5,SD_D0_BAR(r4)
+       sync
+
+       /* Initialize DIMM1 control and BAR registers
+        * (same as dimm 0, next 512MB, disabled)
+        */
+       LOAD_U32(r5,VAL_SD_D1_CTRL)     /* auto-precharge disabled */
+#ifdef SDC_AUTOPRECH_EN
+       oris    r5,r5,0x0001            /* set auto precharge EN bit */
+#endif
+       stw     r5,SD_D1_CTRL(r4)
+       LOAD_U32(r5,VAL_SD_D1_BAR)
+       stw     r5,SD_D1_BAR(r4)
+       sync
+
+       b       sdc_init_done
+
+set_default_values:
+
+       /* Set refresh rate and timing parameters */
+       LOAD_U32(r5,VAL_SD_REFRESH)
+       stw     r5,SD_REFRESH(r4)
+       LOAD_U32(r5,VAL_SD_TIMING)
+       stw     r5,SD_TIMING(r4)
+       sync
+
+       /* Initialize DIMM0 control and BAR registers */
+       LOAD_U32(r5,VAL_SD_D0_CTRL)     /* auto-precharge disabled */
+#ifdef SDC_AUTOPRECH_EN
+       oris    r5,r5,0x0001            /* set auto precharge EN bit */
+#endif
+       stw     r5,SD_D0_CTRL(r4)
+       LOAD_U32(r5,VAL_SD_D0_BAR)
+       stw     r5,SD_D0_BAR(r4)
+       sync
+
+       /* Initialize DIMM1 control and BAR registers
+        * (same as dimm 0, next 512MB, disabled)
+        */
+       LOAD_U32(r5,VAL_SD_D1_CTRL)     /* auto-precharge disabled */
+#ifdef SDC_AUTOPRECH_EN
+       oris    r5,r5,0x0001            /* set auto precharge EN bit */
+#endif
+       stw     r5,SD_D1_CTRL(r4)
+       LOAD_U32(r5,VAL_SD_D1_BAR)
+       stw     r5,SD_D1_BAR(r4)
+       sync
+#else /* !SDC_HARDCODED_INIT */
+       bl      tsi108_sdram_spd        /* automatically detect SDC settings */
+#endif /* SDC_HARDCODED_INIT */
+
+sdc_init_done:
+
+#ifdef DISABLE_PBM
+       LOAD_U32(r5,0x00000030)         /* PB_EN + OCN_EN */
+#else
+       LOAD_U32(r5,0x00000230)         /* PB_EN + OCN_EN + PB/OCN=80/20 */
+#endif /* DISABLE_PBM */
+
+#ifdef CONFIG_TSI108EMU
+       oris    r5,r5,0x0010            /* set EMULATION_MODE bit */
+#endif
+
+       stw     r5,SD_CTRL(r4)
+       eieio
+       sync
+
+       /* Enable SDRAM access */
+
+       oris    r5,r5,0x8000            /* start SDC: set SD_CTRL[ENABLE] bit */
+       stw     r5,SD_CTRL(r4)
+       sync
+
+wait_init_complete:
+       lwz     r5,SD_STATUS(r4)
+       andi.   r5,r5,0x0001
+       /* wait until SDRAM initialization is complete */
+       beq     wait_init_complete
+
+       /* Map SDRAM into the processor bus address space */
+
+       ori     r4,r29,TSI108_PB_REG_OFFSET
+
+       /* Setup BARs associated with direct path PB<->SDRAM */
+
+       /* PB_SDRAM_BAR1:
+        * provides a direct path to the main system memory (cacheable SDRAM)
+        */
+
+       /* BA=0,Size=512MB, ENable, No Addr.Translation */
+       LOAD_U32(r5, 0x00000011)
+       stw     r5,PB_SDRAM_BAR1(r4)
+       sync
+
+       /* Make sure that PB_SDRAM_BAR1 decoder is set
+        * (to allow following immediate read from SDRAM)
+        */
+       lwz     r5,PB_SDRAM_BAR1(r4)
+       sync
+
+       /* PB_SDRAM_BAR2:
+        * provides non-cacheable alias (via the direct path) to main
+        * system memory.
+        * Size = 512MB, ENable, Addr.Translation - ON,
+        * BA = 0x0_40000000, TA = 0x0_00000000
+        */
+
+       LOAD_U32(r5, 0x40010011)
+       stw     r5,PB_SDRAM_BAR2(r4)
+       sync
+
+       /* Make sure that PB_SDRAM_BAR2 decoder is set
+        * (to allow following immediate read from SDRAM)
+        */
+       lwz     r5,PB_SDRAM_BAR2(r4)
+       sync
+
+init_done:
+
+       /* All done. Restore LR and return. */
+       mtlr    r19
+       blr
+
+#if (0)
+       /*
+        * init_cpu1
+        * This routine enables CPU1 on the dual-processor system.
+        * Now there is only one processor in the system
+        */
+
+       .global enable_cpu1
+enable_cpu1:
+
+       lis     r3,Tsi108_Base@ha       /* Get Grendel CSR Base Addr */
+       addi    r3,r3,Tsi108_Base@l
+       lwz     r3,0(r3)                /* R3 = CSR Base Addr */
+       ori     r4,r3,TSI108_PB_REG_OFFSET
+       lwz     r3,PB_ARB_CTRL(r4)      /* Read PB Arbiter Control Register */
+       ori     r3,r3,0x0200            /* Set M1_EN bit */
+       stw     r3,PB_ARB_CTRL(r4)
+
+       blr
+#endif
+
+       /*
+        * enable_EI
+        * Enable CPU core external interrupt
+        */
+
+       .global enable_EI
+enable_EI:
+       mfmsr   r3
+       ori     r3,r3,0x8000    /* set EE bit */
+       mtmsr   r3
+       blr
+
+       /*
+        * disable_EI
+        * Disable CPU core external interrupt
+        */
+
+       .global disable_EI
+disable_EI:
+       mfmsr   r3
+       li      r4,-32768       /* aka "li  r4,0x8000" */
+       andc    r3,r3,r4        /* clear EE bit */
+       mtmsr   r3
+       blr
+
+#ifdef ENABLE_SDRAM_ECC
+       /* enables SDRAM ECC  */
+
+       .global enable_ECC
+enable_ECC:
+       ori     r4,r29,TSI108_SD_REG_OFFSET
+       lwz     r3,SD_ECC_CTRL(r4)      /* Read SDRAM ECC Control Register */
+       ori     r3,r3,0x0001            /* Set ECC_EN bit */
+       stw     r3,SD_ECC_CTRL(r4)
+       blr
+
+       /*
+        * clear_ECC_err
+        * Clears all pending SDRAM ECC errors
+        * (normally after SDRAM scrubbing/initialization)
+        */
+
+       .global clear_ECC_err
+clear_ECC_err:
+       ori r4,r29,TSI108_SD_REG_OFFSET
+       ori r3,r0,0x0030        /* ECC_UE_INT + ECC_CE_INT bits */
+       stw r3,SD_INT_STATUS(r4)
+       blr
+
+#endif /* ENABLE_SDRAM_ECC */
+
+#ifndef SDC_HARDCODED_INIT
+
+       /* SDRAM SPD Support */
+#define        SD_I2C_CTRL1    (0x400)
+#define        SD_I2C_CTRL2    (0x404)
+#define SD_I2C_RD_DATA (0x408)
+#define SD_I2C_WR_DATA (0x40C)
+
+       /*
+        * SDRAM SPD Support Macros
+        */
+
+#define SPD_DIMM0      (0x00000100)
+#define SPD_DIMM1      (0x00000200)    /* SPD_DIMM1 was 0x00000000 */
+
+#define SPD_RDIMM                      (0x01)
+#define SPD_UDIMM                      (0x02)
+
+#define SPD_CAS_3                      0x8
+#define SPD_CAS_4                      0x10
+#define SPD_CAS_5                      0x20
+
+#define ERR_NO_DIMM_FOUND              (0xdb0)
+#define ERR_TRAS_FAIL                  (0xdb1)
+#define ERR_TRCD_FAIL                  (0xdb2)
+#define ERR_TRP_FAIL                   (0xdb3)
+#define ERR_TWR_FAIL                   (0xdb4)
+#define ERR_UNKNOWN_PART               (0xdb5)
+#define ERR_NRANK_INVALID              (0xdb6)
+#define ERR_DIMM_SIZE                  (0xdb7)
+#define ERR_ADDR_MODE                  (0xdb8)
+#define ERR_RFRSH_RATE                 (0xdb9)
+#define ERR_DIMM_TYPE                  (0xdba)
+#define ERR_CL_VALUE                   (0xdbb)
+#define ERR_TRFC_FAIL                  (0xdbc)
+
+/* READ_SPD requirements:
+ * byte - byte address in SPD device (0 - 255)
+ * r3 = will return data read from I2C Byte location
+ * r4 - unchanged (SDC base addr)
+ * r5 - clobbered in routine (I2C status)
+ * r10 - number of DDR slot where first SPD device is detected
+ */
+
+#define READ_SPD(byte_num)             \
+       addis   r3, 0, byte_num@l;      \
+       or      r3, r3, r10;            \
+       ori     r3, r3, 0x0A;           \
+       stw     r3, SD_I2C_CTRL1(r4);   \
+       li      r3, I2C_CNTRL2_START;   \
+       stw     r3, SD_I2C_CTRL2(r4);   \
+       eieio;                          \
+       sync;                           \
+       li      r3, 0x100;              \
+1:;                                    \
+       addic.  r3, r3, -1;             \
+       bne     1b;                     \
+2:;                                    \
+       lwz     r5, SD_I2C_CTRL2(r4);   \
+       rlwinm. r3,r5,0,23,23;          \
+       bne     2b;                     \
+       rlwinm. r3,r5,0,3,3;            \
+       lwz     r3,SD_I2C_RD_DATA(r4)
+
+#define SPD_MIN_RFRSH  (0x80)
+#define SPD_MAX_RFRSH  (0x85)
+
+refresh_rates: /* in nSec */
+       .long   15625   /* Normal (0x80) */
+       .long   3900    /* Reduced 0.25x (0x81) */
+       .long   7800    /* Reduced 0.5x (0x82) */
+       .long   31300   /* Extended 2x (0x83) */
+       .long   62500   /* Extended 4x (0x84) */
+       .long   125000  /* Extended 8x (0x85) */
+
+/*
+ * tsi108_sdram_spd
+ *
+ * Inittializes SDRAM Controller using DDR2 DIMM Serial Presence Detect data
+ * Uses registers: r4 - SDC base address (not changed)
+ *                                r9 - SDC clocking period in nSec
+ * Changes registers: r3,r5,r6,r7,r8,r10,r11
+ */
+
+tsi108_sdram_spd:
+
+       li      r10,SPD_DIMM0
+       xor     r11,r11,r11             /* DIMM Base Address: starts from 0 */
+
+do_first_dimm:
+
+       /* Program Refresh Rate Register */
+
+       READ_SPD(12)                    /* get Refresh Rate */
+       beq     check_next_slot
+       li      r5, ERR_RFRSH_RATE
+       cmpi    0,0,r3,SPD_MIN_RFRSH
+       ble     spd_fail
+       cmpi    0,0,r3,SPD_MAX_RFRSH
+       bgt     spd_fail
+       addi    r3,r3,-SPD_MIN_RFRSH
+       rlwinm  r3,r3,2,0,31
+       lis     r5,refresh_rates@h
+       ori     r5,r5,refresh_rates@l
+       lwzx    r5,r5,r3                /* get refresh rate in nSec */
+       divwu   r5,r5,r9                /* calculate # of SDC clocks */
+       stw     r5,SD_REFRESH(r4)       /* Set refresh rate */
+       sync
+
+       /* Program SD Timing Register */
+
+       li      r7, 0           /* clear r7 prior parameter collection */
+
+       READ_SPD(20)            /* get DIMM type: Registered or Unbuffered */
+       beq     spd_read_fail
+       li      r5, ERR_DIMM_TYPE
+       cmpi    0,0,r3,SPD_UDIMM
+       beq     do_cl
+       cmpi    0,0,r3,SPD_RDIMM
+       bne     spd_fail
+       oris    r7,r7,0x1000    /* set SD_TIMING[DIMM_TYPE] bit */
+
+do_cl:
+       READ_SPD(18)            /* Get CAS Latency */
+       beq     spd_read_fail
+       li      r5,ERR_CL_VALUE
+       andi.   r6,r3,SPD_CAS_3
+       beq     cl_4
+       li      r6,3
+       b       set_cl
+cl_4:
+       andi.   r6,r3,SPD_CAS_4
+       beq     cl_5
+       li      r6,4
+       b       set_cl
+cl_5:
+       andi.   r6,r3,SPD_CAS_5
+       beq     spd_fail
+       li      r6,5
+set_cl:
+       rlwimi  r7,r6,24,5,7
+
+       READ_SPD(30)            /* Get tRAS */
+       beq     spd_read_fail
+       divwu   r6,r3,r9
+       mullw   r8,r6,r9
+       subf.   r8,r8,r3
+       beq     set_tras
+       addi    r6,r6,1
+set_tras:
+       li r5,ERR_TRAS_FAIL
+       cmpi    0,0,r6,0x0F     /* max supported value */
+       bgt     spd_fail
+       rlwimi  r7,r6,16,12,15
+
+       READ_SPD(29)    /* Get tRCD */
+       beq     spd_read_fail
+       /* right shift tRCD by 2 bits as per DDR2 spec */
+       rlwinm  r3,r3,30,2,31
+       divwu   r6,r3,r9
+       mullw   r8,r6,r9
+       subf.   r8,r8,r3
+       beq     set_trcd
+       addi    r6,r6,1
+set_trcd:
+       li      r5,ERR_TRCD_FAIL
+       cmpi    0,0,r6,0x07     /* max supported value */
+       bgt     spd_fail
+       rlwimi  r7,r6,12,17,19
+
+       READ_SPD(27)    /* Get tRP value */
+       beq     spd_read_fail
+       rlwinm  r3,r3,30,2,31   /* right shift tRP by 2 bits as per DDR2 spec */
+       divwu   r6,r3,r9
+       mullw   r8,r6,r9
+       subf.   r8,r8,r3
+       beq     set_trp
+       addi    r6,r6,1
+set_trp:
+       li      r5,ERR_TRP_FAIL
+       cmpi    0,0,r6,0x07     /* max supported value */
+       bgt     spd_fail
+       rlwimi  r7,r6,8,21,23
+
+       READ_SPD(36)    /* Get tWR value */
+       beq     spd_read_fail
+       rlwinm  r3,r3,30,2,31   /* right shift tWR by 2 bits as per DDR2 spec */
+       divwu   r6,r3,r9
+       mullw   r8,r6,r9
+       subf.   r8,r8,r3
+       beq     set_twr
+       addi    r6,r6,1
+set_twr:
+       addi    r6,r6,-1        /* Tsi108 SDC always gives one extra clock */
+       li      r5,ERR_TWR_FAIL
+       cmpi    0,0,r6,0x07     /* max supported value */
+       bgt     spd_fail
+       rlwimi  r7,r6,5,24,26
+
+       READ_SPD(42)    /* Get tRFC */
+       beq     spd_read_fail
+       li      r5, ERR_TRFC_FAIL
+       /* Tsi108 spec: tRFC=(tRFC + 1)/2 */
+       addi    r3,r3,1
+       rlwinm. r3,r3,31,1,31   /* divide by 2 */
+       beq     spd_fail
+       divwu   r6,r3,r9
+       mullw   r8,r6,r9
+       subf.   r8,r8,r3
+       beq     set_trfc
+       addi    r6,r6,1
+set_trfc:
+       cmpi    0,0,r6,0x1F     /* max supported value */
+       bgt     spd_fail
+       rlwimi  r7,r6,0,27,31
+
+       stw     r7,SD_TIMING(r4)
+       sync
+
+       /*
+        * The following two registers are set on per-DIMM basis.
+        * The SD_REFRESH and SD_TIMING settings are common for both DIMMS
+        */
+
+do_each_dimm:
+
+       /* Program SDRAM DIMM Control Register */
+
+       li      r7, 0           /* clear r7 prior parameter collection */
+
+       READ_SPD(13)            /* Get Primary SDRAM Width */
+       beq     spd_read_fail
+       cmpi    0,0,r3,4        /* Check for 4-bit SDRAM */
+       beq     do_nbank
+       oris    r7,r7,0x0010    /* Set MEM_WIDTH bit */
+
+do_nbank:
+       READ_SPD(17)            /* Get Number of banks on SDRAM device */
+       beq     spd_read_fail
+       /* Grendel only distinguish betw. 4 or 8-bank memory parts */
+       li      r5,ERR_UNKNOWN_PART     /* non-supported memory part */
+       cmpi    0,0,r3,4
+       beq     do_nrank
+       cmpi    0,0,r3,8
+       bne     spd_fail
+       ori     r7,r7,0x1000
+
+do_nrank:
+       READ_SPD(5)             /* Get # of Ranks */
+       beq     spd_read_fail
+       li      r5,ERR_NRANK_INVALID
+       andi.   r6,r3,0x7       /* Use bits [2..0] only */
+       beq     do_addr_mode
+       cmpi    0,0,r6,1
+       bgt     spd_fail
+       rlwimi  r7,r6,8,23,23
+
+do_addr_mode:
+       READ_SPD(4)             /* Get # of Column Addresses */
+       beq     spd_read_fail
+       li      r5, ERR_ADDR_MODE
+       andi.   r3,r3,0x0f      /* cut off reserved bits */
+       cmpi    0,0,r3,8
+       ble     spd_fail
+       cmpi    0,0,r3,15
+       bgt     spd_fail
+       addi    r6,r3,-8        /* calculate ADDR_MODE parameter */
+       rlwimi  r7,r6,4,24,27   /* set ADDR_MODE field */
+
+set_dimm_ctrl:
+#ifdef SDC_AUTOPRECH_EN
+       oris    r7,r7,0x0001    /* set auto precharge EN bit */
+#endif
+       ori     r7,r7,1         /* set ENABLE bit */
+       cmpi    0,0,r10,SPD_DIMM0
+       bne     1f
+       stw     r7,SD_D0_CTRL(r4)
+       sync
+       b       set_dimm_bar
+1:
+       stw     r7,SD_D1_CTRL(r4)
+       sync
+
+
+       /* Program SDRAM DIMMx Base Address Register */
+
+set_dimm_bar:
+       READ_SPD(5)             /* get # of Ranks */
+       beq     spd_read_fail
+       andi.   r7,r3,0x7
+       addi    r7,r7,1
+       READ_SPD(31)            /* Read DIMM rank density */
+       beq     spd_read_fail
+       rlwinm  r5,r3,27,29,31
+       rlwinm  r6,r3,3,24,28
+       or      r5,r6,r5        /* r5 = Normalized Rank Density byte */
+       lis     r8, 0x0080      /* 128MB >> 4 */
+       mullw   r8,r8,r5        /* r8 = (rank_size >> 4) */
+       mullw   r8,r8,r7        /* r8 = (DIMM_size >> 4) */
+       neg     r7,r8
+       rlwinm  r7,r7,28,4,31
+       or      r7,r7,r11       /* set ADDR field */
+       rlwinm  r8,r8,12,20,31
+       add     r11,r11,r8      /* set Base Addr for next DIMM */
+
+       cmpi    0,0,r10,SPD_DIMM0
+       bne     set_dimm1_size
+       stw     r7,SD_D0_BAR(r4)
+       sync
+       li      r10,SPD_DIMM1
+       READ_SPD(0)
+       bne do_each_dimm
+       b spd_done
+
+set_dimm1_size:
+       stw     r7,SD_D1_BAR(r4)
+       sync
+spd_done:
+       blr
+
+check_next_slot:
+       cmpi    0,0,r10,SPD_DIMM1
+       beq     spd_read_fail
+       li      r10,SPD_DIMM1
+       b       do_first_dimm
+spd_read_fail:
+       ori     r3,r0,0xdead
+       b       err_hung
+spd_fail:
+       li      r3,0x0bad
+       sync
+err_hung:      /* hang here for debugging */
+       nop
+       nop
+       b       err_hung
+
+#endif /* !SDC_HARDCODED_INIT */
diff --git a/board/mpc7448hpc2/config.mk b/board/mpc7448hpc2/config.mk
new file mode 100644 (file)
index 0000000..2e58858
--- /dev/null
@@ -0,0 +1,28 @@
+#
+# Copyright (c) 2005 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
+#
+
+# Flash address
+TEXT_BASE = 0xFF000000
+# RAM address
+#TEXT_BASE = 0x00400000
+
+PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE) -maltivec -mabi=altivec -msoft-float
diff --git a/board/mpc7448hpc2/mpc7448hpc2.c b/board/mpc7448hpc2/mpc7448hpc2.c
new file mode 100644 (file)
index 0000000..63c99de
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * (C) Copyright 2005 Freescale Semiconductor, Inc.
+ *
+ * Roy Zang <tie-fei.zang@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
+ *
+ * modifications for the Tsi108 Emul Board by avb@Tundra
+ */
+
+/*
+ * board support/init functions for the
+ * Freescale MPC7448 HPC2 (High-Performance Computing 2 Platform).
+ */
+
+#include <common.h>
+#include <74xx_7xx.h>
+#if defined(CONFIG_OF_FLAT_TREE)
+#include <ft_build.h>
+extern void ft_cpu_setup (void *blob, bd_t *bd);
+#endif
+
+#undef DEBUG
+
+extern void flush_data_cache (void);
+extern void invalidate_l1_instruction_cache (void);
+extern void tsi108_init_f (void);
+
+int display_mem_map (void);
+
+void after_reloc (ulong dest_addr)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+
+       /*
+        * Jump to the main U-Boot board init code
+        */
+       board_init_r ((gd_t *) gd, dest_addr);
+       /* NOTREACHED */
+}
+
+/*
+ * Check Board Identity:
+ * report board type
+ */
+
+int checkboard (void)
+{
+       int l_type = 0;
+
+       printf ("BOARD: %s\n", CFG_BOARD_NAME);
+       return (l_type);
+}
+
+/*
+ * Read Processor ID:
+ *
+ * report calling processor number
+ */
+
+int read_pid (void)
+{
+       return 0;               /* we are on single CPU platform for a while */
+}
+
+long int dram_size (int board_type)
+{
+       return 0x20000000;      /* 256M bytes */
+}
+
+long int initdram (int board_type)
+{
+       return dram_size (board_type);
+}
+
+#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP)
+void
+ft_board_setup (void *blob, bd_t *bd)
+{
+       u32 *p;
+       int len;
+
+       ft_cpu_setup (blob, bd);
+
+       p = ft_get_prop (blob, "/memory/reg", &len);
+       if (p != NULL) {
+               *p++ = cpu_to_be32 (bd->bi_memstart);
+               *p = cpu_to_be32 (bd->bi_memsize);
+       }
+}
+#endif
diff --git a/board/mpc7448hpc2/tsi108_init.c b/board/mpc7448hpc2/tsi108_init.c
new file mode 100644 (file)
index 0000000..8a7efef
--- /dev/null
@@ -0,0 +1,665 @@
+/*****************************************************************************
+ * (C) Copyright 2003;  Tundra Semiconductor Corp.
+ *
+ * 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
+ *****************************************************************************/
+
+/*----------------------------------------------------------------------------
+ * FILENAME: tsi108_init.c
+ *
+ * Originator: Alex Bounine
+ *
+ * DESCRIPTION:
+ * Initialization code for the Tundra Tsi108 bridge chip
+ *---------------------------------------------------------------------------*/
+
+#include <common.h>
+#include <74xx_7xx.h>
+#include <config.h>
+#include <version.h>
+#include <asm/processor.h>
+#include <tsi108.h>
+
+extern void mpicInit (int verbose);
+
+/*
+ * Configuration Options
+ */
+
+typedef struct {
+       ulong upper;
+       ulong lower;
+} PB2OCN_LUT_ENTRY;
+
+PB2OCN_LUT_ENTRY pb2ocn_lut1[32] = {
+       /* 0 - 7 */
+       {0x00000000, 0x00000201}, /* PBA=0xE000_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xE100_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xE200_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xE300_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xE400_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xE500_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xE600_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xE700_0000 -> PCI/X (Byte-Swap) */
+
+       /* 8 - 15 */
+       {0x00000000, 0x00000201}, /* PBA=0xE800_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xE900_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xEA00_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xEB00_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xEC00_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xED00_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xEE00_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xEF00_0000 -> PCI/X (Byte-Swap) */
+
+       /* 16 - 23 */
+       {0x00000000, 0x00000201}, /* PBA=0xF000_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xF100_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xF200_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xF300_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xF400_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xF500_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xF600_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xF700_0000 -> PCI/X (Byte-Swap) */
+       /* 24 - 31 */
+       {0x00000000, 0x00000201}, /* PBA=0xF800_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xF900_0000 -> PCI/X (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xFA00_0000 -> PCI/X  PCI I/O (Byte-Swap) */
+       {0x00000000, 0x00000201}, /* PBA=0xFB00_0000 -> PCI/X  PCI Config (Byte-Swap) */
+
+       {0x00000000, 0x02000240}, /* PBA=0xFC00_0000 -> HLP */
+       {0x00000000, 0x01000240}, /* PBA=0xFD00_0000 -> HLP */
+       {0x00000000, 0x03000240}, /* PBA=0xFE00_0000 -> HLP */
+       {0x00000000, 0x00000240}  /* PBA=0xFF00_0000 -> HLP : (Translation Enabled + Byte-Swap)*/
+};
+
+#ifdef CFG_CLK_SPREAD
+typedef struct {
+       ulong ctrl0;
+       ulong ctrl1;
+} PLL_CTRL_SET;
+
+/*
+ * Clock Generator SPLL0 initialization values
+ * PLL0 configuration table for various PB_CLKO freq.
+ * Uses pre-calculated values for Fs = 30 kHz, D = 0.5%
+ * Fout depends on required PB_CLKO. Based on Fref = 33 MHz
+ */
+
+static PLL_CTRL_SET pll0_config[8] = {
+       {0x00000000, 0x00000000},       /* 0: bypass */
+       {0x00000000, 0x00000000},       /* 1: reserved */
+       {0x00430044, 0x00000043},       /* 2: CG_PB_CLKO = 183 MHz */
+       {0x005c0044, 0x00000039},       /* 3: CG_PB_CLKO = 100 MHz */
+       {0x005c0044, 0x00000039},       /* 4: CG_PB_CLKO = 133 MHz */
+       {0x004a0044, 0x00000040},       /* 5: CG_PB_CLKO = 167 MHz */
+       {0x005c0044, 0x00000039},       /* 6: CG_PB_CLKO = 200 MHz */
+       {0x004f0044, 0x0000003e}        /* 7: CG_PB_CLKO = 233 MHz */
+};
+#endif /* CFG_CLK_SPREAD */
+
+/*
+ * Prosessor Bus Clock (in MHz) defined by CG_PB_SELECT
+ * (based on recommended Tsi108 reference clock 33MHz)
+ */
+static int pb_clk_sel[8] = { 0, 0, 183, 100, 133, 167, 200, 233 };
+
+/*
+ * get_board_bus_clk ()
+ *
+ * returns the bus clock in Hz.
+ */
+unsigned long get_board_bus_clk (void)
+{
+       ulong i;
+
+       /* Detect PB clock freq. */
+       i = in32(CFG_TSI108_CSR_BASE + TSI108_CLK_REG_OFFSET + CG_PWRUP_STATUS);
+       i = (i >> 16) & 0x07;   /* Get PB PLL multiplier */
+
+       return pb_clk_sel[i] * 1000000;
+}
+
+/*
+ * board_early_init_f ()
+ *
+ * board-specific initialization executed from flash
+ */
+
+int board_early_init_f (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+       ulong i;
+
+       gd->mem_clk = 0;
+       i = in32 (CFG_TSI108_CSR_BASE + TSI108_CLK_REG_OFFSET +
+                       CG_PWRUP_STATUS);
+       i = (i >> 20) & 0x07;   /* Get GD PLL multiplier */
+       switch (i) {
+       case 0: /* external clock */
+               printf ("Using external clock\n");
+               break;
+       case 1: /* system clock */
+               gd->mem_clk = gd->bus_clk;
+               break;
+       case 4: /* 133 MHz */
+       case 5: /* 166 MHz */
+       case 6: /* 200 MHz */
+               gd->mem_clk = pb_clk_sel[i] * 1000000;
+               break;
+       default:
+               printf ("Invalid DDR2 clock setting\n");
+               return -1;
+       }
+       printf ("BUS: %d MHz\n", get_board_bus_clk() / 1000000);
+       printf ("MEM: %d MHz\n", gd->mem_clk / 1000000);
+       return 0;
+}
+
+/*
+ * board_early_init_r() - Tsi108 initialization function executed right after
+ * relocation. Contains code that cannot be executed from flash.
+ */
+
+int board_early_init_r (void)
+{
+       ulong temp, i;
+       ulong reg_val;
+       volatile ulong *reg_ptr;
+
+       reg_ptr =
+               (ulong *) (CFG_TSI108_CSR_BASE + TSI108_PB_REG_OFFSET + 0x900);
+
+       for (i = 0; i < 32; i++) {
+               *reg_ptr++ = 0x00000201;        /* SWAP ENABLED */
+               *reg_ptr++ = 0x00;
+       }
+
+       __asm__ __volatile__ ("eieio");
+       __asm__ __volatile__ ("sync");
+
+       /* Setup PB_OCN_BAR2: size 256B + ENable @ 0x0_80000000 */
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PB_REG_OFFSET + PB_OCN_BAR2,
+               0x80000001);
+       __asm__ __volatile__ ("sync");
+
+       /* Make sure that OCN_BAR2 decoder is set (to allow following immediate
+        * read from SDRAM)
+        */
+
+       temp = in32(CFG_TSI108_CSR_BASE + TSI108_PB_REG_OFFSET + PB_OCN_BAR2);
+       __asm__ __volatile__ ("sync");
+
+       /*
+        * Remap PB_OCN_BAR1 to accomodate PCI-bus aperture and EPROM into the
+        * processor bus address space. Immediately after reset LUT and address
+        * translation are disabled for this BAR. Now we have to initialize LUT
+        * and switch from the BOOT mode to the normal operation mode.
+        *
+        * The aperture defined by PB_OCN_BAR1 startes at address 0xE0000000
+        * and covers 512MB of address space. To allow larger aperture we also
+        * have to relocate register window of Tsi108
+        *
+        * Initialize LUT (32-entries) prior switching PB_OCN_BAR1 from BOOT
+        * mode.
+        *
+        * initialize pointer to LUT associated with PB_OCN_BAR1
+        */
+       reg_ptr =
+               (ulong *) (CFG_TSI108_CSR_BASE + TSI108_PB_REG_OFFSET + 0x800);
+
+       for (i = 0; i < 32; i++) {
+               *reg_ptr++ = pb2ocn_lut1[i].lower;
+               *reg_ptr++ = pb2ocn_lut1[i].upper;
+       }
+
+       __asm__ __volatile__ ("sync");
+
+       /* Base addresses for CS0, CS1, CS2, CS3 */
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B0_ADDR,
+               0x00000000);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B1_ADDR,
+               0x00100000);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B2_ADDR,
+               0x00200000);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B3_ADDR,
+               0x00300000);
+       __asm__ __volatile__ ("sync");
+
+       /* Masks for HLP banks */
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B0_MASK,
+               0xFFF00000);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B1_MASK,
+               0xFFF00000);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B2_MASK,
+               0xFFF00000);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B3_MASK,
+               0xFFF00000);
+       __asm__ __volatile__ ("sync");
+
+       /* Set CTRL0 values for banks */
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B0_CTRL0,
+               0x7FFC44C2);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B1_CTRL0,
+               0x7FFC44C0);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B2_CTRL0,
+               0x7FFC44C0);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B3_CTRL0,
+               0x7FFC44C2);
+       __asm__ __volatile__ ("sync");
+
+       /* Set banks to latched mode, enabled, and other default settings */
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B0_CTRL1,
+               0x7C0F2000);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B1_CTRL1,
+               0x7C0F2000);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B2_CTRL1,
+               0x7C0F2000);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_HLP_REG_OFFSET + HLP_B3_CTRL1,
+               0x7C0F2000);
+       __asm__ __volatile__ ("sync");
+
+       /*
+        * Set new value for PB_OCN_BAR1: switch from BOOT to LUT mode.
+        * value for PB_OCN_BAR1: (BA-0xE000_0000 + size 512MB + ENable)
+        */
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PB_REG_OFFSET + PB_OCN_BAR1,
+               0xE0000011);
+       __asm__ __volatile__ ("sync");
+
+       /* Make sure that OCN_BAR2 decoder is set (to allow following
+        * immediate read from SDRAM)
+        */
+
+       temp = in32(CFG_TSI108_CSR_BASE + TSI108_PB_REG_OFFSET + PB_OCN_BAR1);
+       __asm__ __volatile__ ("sync");
+
+       /*
+        * SRI: At this point we have enabled the HLP banks. That means we can
+        * now read from the NVRAM and initialize the environment variables.
+        * We will over-ride the env_init called in board_init_f
+        * This is really a work-around because, the HLP bank 1
+        * where NVRAM resides is not visible during board_init_f
+        * (lib_ppc/board.c)
+        * Alternatively, we could use the I2C EEPROM at start-up to configure
+        * and enable all HLP banks and not just HLP 0 as is being done for
+        * Taiga Rev. 2.
+        */
+
+       env_init ();
+
+#ifndef DISABLE_PBM
+
+       /*
+        * For IBM processors we have to set Address-Only commands generated
+        * by PBM that are different from ones set after reset.
+        */
+
+       temp = get_cpu_type ();
+
+       if ((CPU_750FX == temp) || (CPU_750GX == temp))
+               out32 (CFG_TSI108_CSR_BASE + TSI108_PB_REG_OFFSET + PB_MCMD,
+                       0x00009955);
+#endif /* DISABLE_PBM */
+
+#ifdef CONFIG_PCI
+       /*
+        * Initialize PCI/X block
+        */
+
+       /* Map PCI/X Configuration Space (16MB @ 0x0_FE000000) */
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET +
+               PCI_PFAB_BAR0_UPPER, 0);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_PFAB_BAR0,
+               0xFB000001);
+       __asm__ __volatile__ ("sync");
+
+       /* Set Bus Number for the attached PCI/X bus (we will use 0 for NB) */
+
+       temp =  in32(CFG_TSI108_CSR_BASE +
+               TSI108_PCI_REG_OFFSET + PCI_PCIX_STAT);
+
+       temp &= ~0xFF00;        /* Clear the BUS_NUM field */
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_PCIX_STAT,
+               temp);
+
+       /* Map PCI/X IO Space (64KB @ 0x0_FD000000) takes one 16MB LUT entry */
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_PFAB_IO_UPPER,
+               0);
+       __asm__ __volatile__ ("sync");
+
+       /* This register is on the PCI side to interpret the address it receives
+        * and maps it as a IO address.
+        */
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_PFAB_IO,
+               0xFA000001);
+       __asm__ __volatile__ ("sync");
+
+       /*
+        * Map PCI/X Memory Space
+        *
+        * Transactions directed from OCM to PCI Memory Space are directed
+        * from PB to PCI
+        * unchanged (as defined by PB_OCN_BAR1,2 and LUT settings).
+        * If address remapping is required the corresponding PCI_PFAB_MEM32
+        * and PCI_PFAB_PFMx register groups have to be configured.
+        *
+        * Map the path from the PCI/X bus into the system memory
+        *
+        * The memory mapped window assotiated with PCI P2O_BAR2 provides
+        * access to the system memory without address remapping.
+        * All system memory is opened for accesses initiated by PCI/X bus
+        * masters.
+        *
+        * Initialize LUT associated with PCI P2O_BAR2
+        *
+        * set pointer to LUT associated with PCI P2O_BAR2
+        */
+
+       reg_ptr =
+               (ulong *) (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + 0x500);
+
+#ifdef DISABLE_PBM
+
+       /* In case when PBM is disabled (no HW supported cache snoopng on PB)
+        * P2O_BAR2 is directly mapped into the system memory without address
+        * translation.
+        */
+
+       reg_val = 0x00000004;   /* SDRAM port + NO Addr_Translation */
+
+       for (i = 0; i < 32; i++) {
+               *reg_ptr++ = reg_val;   /* P2O_BAR2_LUTx */
+               *reg_ptr++ = 0;         /* P2O_BAR2_LUT_UPPERx */
+       }
+
+       /* value for PCI BAR2 (size = 512MB, Enabled, No Addr. Translation) */
+       reg_val = 0x00007500;
+#else
+
+       reg_val = 0x00000002;   /* Destination port = PBM */
+
+       for (i = 0; i < 32; i++) {
+               *reg_ptr++ = reg_val;   /* P2O_BAR2_LUTx */
+/* P2O_BAR2_LUT_UPPERx : Set data swapping mode for PBM (byte swapping) */
+               *reg_ptr++ = 0x40000000;
+/* offset = 16MB, address translation is enabled to allow byte swapping */
+               reg_val += 0x01000000;
+       }
+
+/* value for PCI BAR2 (size = 512MB, Enabled, Address Translation Enabled) */
+       reg_val = 0x00007100;
+#endif
+
+       __asm__ __volatile__ ("eieio");
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_P2O_PAGE_SIZES,
+               reg_val);
+       __asm__ __volatile__ ("sync");
+
+       /* Set 64-bit PCI bus address for system memory
+        * ( 0 is the best choice for easy mapping)
+        */
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_P2O_BAR2,
+               0x00000000);
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_P2O_BAR2_UPPER,
+               0x00000000);
+       __asm__ __volatile__ ("sync");
+
+#ifndef DISABLE_PBM
+       /*
+        *  The memory mapped window assotiated with PCI P2O_BAR3 provides
+        *  access to the system memory using SDRAM OCN port and address
+        *  translation. This is alternative way to access SDRAM from PCI
+        *  required for Tsi108 emulation testing.
+        *  All system memory is opened for accesses initiated by
+        *  PCI/X bus masters.
+        *
+        *  Initialize LUT associated with PCI P2O_BAR3
+        *
+        *  set pointer to LUT associated with PCI P2O_BAR3
+        */
+       reg_ptr =
+               (ulong *) (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + 0x600);
+
+       reg_val = 0x00000004;   /* Destination port = SDC */
+
+       for (i = 0; i < 32; i++) {
+               *reg_ptr++ = reg_val;   /* P2O_BAR3_LUTx */
+
+/* P2O_BAR3_LUT_UPPERx : Set data swapping mode for PBM (byte swapping) */
+               *reg_ptr++ = 0;
+
+/* offset = 16MB, address translation is enabled to allow byte swapping */
+               reg_val += 0x01000000;
+       }
+
+       __asm__ __volatile__ ("eieio");
+       __asm__ __volatile__ ("sync");
+
+       /* Configure PCI P2O_BAR3 (size = 512MB, Enabled) */
+
+       reg_val =
+               in32(CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET +
+                PCI_P2O_PAGE_SIZES);
+       reg_val &= ~0x00FF;
+       reg_val |= 0x0071;
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_P2O_PAGE_SIZES,
+               reg_val);
+       __asm__ __volatile__ ("sync");
+
+       /* Set 64-bit base PCI bus address for window (0x20000000) */
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_P2O_BAR3_UPPER,
+               0x00000000);
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_P2O_BAR3,
+               0x20000000);
+       __asm__ __volatile__ ("sync");
+
+#endif /* !DISABLE_PBM */
+
+#ifdef ENABLE_PCI_CSR_BAR
+       /* open if required access to Tsi108 CSRs from the PCI/X bus */
+       /* enable BAR0 on the PCI/X bus */
+       reg_val = in32(CFG_TSI108_CSR_BASE +
+               TSI108_PCI_REG_OFFSET + PCI_MISC_CSR);
+       reg_val |= 0x02;
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_MISC_CSR,
+               reg_val);
+       __asm__ __volatile__ ("sync");
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_P2O_BAR0_UPPER,
+               0x00000000);
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_P2O_BAR0,
+               CFG_TSI108_CSR_BASE);
+       __asm__ __volatile__ ("sync");
+
+#endif
+
+       /*
+        * Finally enable PCI/X Bus Master and Memory Space access
+        */
+
+       reg_val = in32(CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_CSR);
+       reg_val |= 0x06;
+       out32 (CFG_TSI108_CSR_BASE + TSI108_PCI_REG_OFFSET + PCI_CSR, reg_val);
+       __asm__ __volatile__ ("sync");
+
+#endif /* CONFIG_PCI */
+
+       /*
+        * Initialize MPIC outputs (interrupt pins):
+        * Interrupt routing on the Grendel Emul. Board:
+        * PB_INT[0] -> INT (CPU0)
+        * PB_INT[1] -> INT (CPU1)
+        * PB_INT[2] -> MCP (CPU0)
+        * PB_INT[3] -> MCP (CPU1)
+        * Set interrupt controller outputs as Level_Sensitive/Active_Low
+        */
+       out32 (CFG_TSI108_CSR_BASE + TSI108_MPIC_REG_OFFSET + MPIC_CSR(0), 0x02);
+       out32 (CFG_TSI108_CSR_BASE + TSI108_MPIC_REG_OFFSET + MPIC_CSR(1), 0x02);
+       out32 (CFG_TSI108_CSR_BASE + TSI108_MPIC_REG_OFFSET + MPIC_CSR(2), 0x02);
+       out32 (CFG_TSI108_CSR_BASE + TSI108_MPIC_REG_OFFSET + MPIC_CSR(3), 0x02);
+       __asm__ __volatile__ ("sync");
+
+       /*
+        * Ensure that Machine Check exception is enabled
+        * We need it to support PCI Bus probing (configuration reads)
+        */
+
+       reg_val = mfmsr ();
+       mtmsr(reg_val | MSR_ME);
+
+       return 0;
+}
+
+/*
+ * Needed to print out L2 cache info
+ * used in the misc_init_r function
+ */
+
+unsigned long get_l2cr (void)
+{
+       unsigned long l2controlreg;
+       asm volatile ("mfspr %0, 1017":"=r" (l2controlreg):);
+       return l2controlreg;
+}
+
+/*
+ * misc_init_r()
+ *
+ * various things to do after relocation
+ *
+ */
+
+int misc_init_r (void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+#ifdef CFG_CLK_SPREAD  /* Initialize Spread-Spectrum Clock generation */
+       ulong i;
+
+       /* Ensure that Spread-Spectrum is disabled */
+       out32 (CFG_TSI108_CSR_BASE + TSI108_CLK_REG_OFFSET + CG_PLL0_CTRL0, 0);
+       out32 (CFG_TSI108_CSR_BASE + TSI108_CLK_REG_OFFSET + CG_PLL1_CTRL0, 0);
+
+       /* Initialize PLL1: CG_PCI_CLK , internal OCN_CLK
+        * Uses pre-calculated value for Fout = 800 MHz, Fs = 30 kHz, D = 0.5%
+        */
+
+       out32 (CFG_TSI108_CSR_BASE + TSI108_CLK_REG_OFFSET + CG_PLL1_CTRL0,
+               0x002e0044);    /* D = 0.25% */
+       out32 (CFG_TSI108_CSR_BASE + TSI108_CLK_REG_OFFSET + CG_PLL1_CTRL1,
+               0x00000039);    /* BWADJ */
+
+       /* Initialize PLL0: CG_PB_CLKO  */
+       /* Detect PB clock freq. */
+       i = in32(CFG_TSI108_CSR_BASE + TSI108_CLK_REG_OFFSET + CG_PWRUP_STATUS);
+       i = (i >> 16) & 0x07;   /* Get PB PLL multiplier */
+
+       out32 (CFG_TSI108_CSR_BASE +
+               TSI108_CLK_REG_OFFSET + CG_PLL0_CTRL0, pll0_config[i].ctrl0);
+       out32 (CFG_TSI108_CSR_BASE +
+               TSI108_CLK_REG_OFFSET + CG_PLL0_CTRL1, pll0_config[i].ctrl1);
+
+       /* Wait and set SSEN for both PLL0 and 1 */
+       udelay (1000);
+       out32 (CFG_TSI108_CSR_BASE + TSI108_CLK_REG_OFFSET + CG_PLL1_CTRL0,
+               0x802e0044);    /* D=0.25% */
+       out32 (CFG_TSI108_CSR_BASE +
+               TSI108_CLK_REG_OFFSET + CG_PLL0_CTRL0,
+               0x80000000 | pll0_config[i].ctrl0);
+#endif /* CFG_CLK_SPREAD */
+
+#ifdef CFG_L2
+       l2cache_enable ();
+#endif
+       printf ("BUS:   %d MHz\n", gd->bus_clk / 1000000);
+       printf ("MEM:   %d MHz\n", gd->mem_clk / 1000000);
+
+       /*
+        * All the information needed to print the cache details is avaiblable
+        * at this point i.e. above call to l2cache_enable is the very last
+        * thing done with regards to enabling diabling the cache.
+        * So this seems like a good place to print all this information
+        */
+
+       printf ("CACHE: ");
+       switch (get_cpu_type()) {
+       case CPU_7447A:
+               printf ("L1 Instruction cache - 32KB 8-way");
+               (get_hid0 () & (1 << 15)) ? printf (" ENABLED\n") :
+                       printf (" DISABLED\n");
+               printf ("L1 Data cache - 32KB 8-way");
+               (get_hid0 () & (1 << 14)) ? printf (" ENABLED\n") :
+                       printf (" DISABLED\n");
+               printf ("Unified L2 cache - 512KB 8-way");
+               (get_l2cr () & (1 << 31)) ? printf (" ENABLED\n") :
+                       printf (" DISABLED\n");
+               printf ("\n");
+               break;
+
+       case CPU_7448:
+               printf ("L1 Instruction cache - 32KB 8-way");
+               (get_hid0 () & (1 << 15)) ? printf (" ENABLED\n") :
+                       printf (" DISABLED\n");
+               printf ("L1 Data cache - 32KB 8-way");
+               (get_hid0 () & (1 << 14)) ? printf (" ENABLED\n") :
+                       printf (" DISABLED\n");
+               printf ("Unified L2 cache - 1MB 8-way");
+               (get_l2cr () & (1 << 31)) ? printf (" ENABLED\n") :
+                       printf (" DISABLED\n");
+               break;
+       default:
+               break;
+       }
+       return 0;
+}
diff --git a/board/mpc7448hpc2/u-boot.lds b/board/mpc7448hpc2/u-boot.lds
new file mode 100644 (file)
index 0000000..8f24213
--- /dev/null
@@ -0,0 +1,136 @@
+/*
+ * (C) Copyright 2001
+ * Josh Huber <huber@mclx.com>, Mission Critical Linux, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * u-boot.lds - linker script for U-Boot on mpc7448hpc2 Board.
+ */
+
+OUTPUT_ARCH(powerpc)
+SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib);
+/* Do we need any of these for elf?
+   __DYNAMIC = 0;    */
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = + SIZEOF_HEADERS;
+  .interp : { *(.interp) }
+  .hash          : { *(.hash)          }
+  .dynsym        : { *(.dynsym)                }
+  .dynstr        : { *(.dynstr)                }
+  .rel.text      : { *(.rel.text)              }
+  .rela.text     : { *(.rela.text)     }
+  .rel.data      : { *(.rel.data)              }
+  .rela.data     : { *(.rela.data)     }
+  .rel.rodata    : { *(.rel.rodata)    }
+  .rela.rodata   : { *(.rela.rodata)   }
+  .rel.got       : { *(.rel.got)               }
+  .rela.got      : { *(.rela.got)              }
+  .rel.ctors     : { *(.rel.ctors)     }
+  .rela.ctors    : { *(.rela.ctors)    }
+  .rel.dtors     : { *(.rel.dtors)     }
+  .rela.dtors    : { *(.rela.dtors)    }
+  .rel.bss       : { *(.rel.bss)               }
+  .rela.bss      : { *(.rela.bss)              }
+  .rel.plt       : { *(.rel.plt)               }
+  .rela.plt      : { *(.rela.plt)              }
+  .init          : { *(.init)  }
+  .plt : { *(.plt) }
+  .text      :
+  {
+    cpu/74xx_7xx/start.o       (.text)
+
+/* store the environment in a seperate sector in the boot flash */
+/*    . = env_offset; */
+/*    common/environment.o(.text) */
+
+    *(.text)
+    *(.fixup)
+    *(.got1)
+  }
+  _etext = .;
+  PROVIDE (etext = .);
+  .rodata    :
+  {
+    *(.rodata)
+    *(.rodata1)
+    *(.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       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
diff --git a/board/mpc8313erdb/Makefile b/board/mpc8313erdb/Makefile
new file mode 100644 (file)
index 0000000..a987e51
--- /dev/null
@@ -0,0 +1,50 @@
+#
+# (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)lib$(BOARD).a
+
+COBJS  := $(BOARD).o sdram.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS)
+       $(AR) crv $@ $(OBJS)
+
+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/mpc8313erdb/config.mk b/board/mpc8313erdb/config.mk
new file mode 100644 (file)
index 0000000..f768264
--- /dev/null
@@ -0,0 +1 @@
+TEXT_BASE = 0xFE000000
diff --git a/board/mpc8313erdb/mpc8313erdb.c b/board/mpc8313erdb/mpc8313erdb.c
new file mode 100644 (file)
index 0000000..999fe9e
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) Freescale Semiconductor, Inc. 2006-2007
+ *
+ * Author: Scott Wood <scottwood@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 <ft_build.h>
+#include <pci.h>
+#include <mpc83xx.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int board_early_init_f(void)
+{
+#ifndef CFG_8313ERDB_BROKEN_PMC
+       volatile immap_t *im = (immap_t *)CFG_IMMR;
+
+       if (im->pmc.pmccr1 & PMCCR1_POWER_OFF)
+               gd->flags |= GD_FLG_SILENT;
+#endif
+
+       return 0;
+}
+
+int checkboard(void)
+{
+       puts("Board: Freescale MPC8313ERDB\n");
+       return 0;
+}
+
+static struct pci_region pci_regions[] = {
+       {
+               bus_start: CFG_PCI1_MEM_BASE,
+               phys_start: CFG_PCI1_MEM_PHYS,
+               size: CFG_PCI1_MEM_SIZE,
+               flags: PCI_REGION_MEM | PCI_REGION_PREFETCH
+       },
+       {
+               bus_start: CFG_PCI1_MMIO_BASE,
+               phys_start: CFG_PCI1_MMIO_PHYS,
+               size: CFG_PCI1_MMIO_SIZE,
+               flags: PCI_REGION_MEM
+       },
+       {
+               bus_start: CFG_PCI1_IO_BASE,
+               phys_start: CFG_PCI1_IO_PHYS,
+               size: CFG_PCI1_IO_SIZE,
+               flags: PCI_REGION_IO
+       }
+};
+
+void pci_init_board(void)
+{
+       volatile immap_t *immr = (volatile immap_t *)CFG_IMMR;
+       volatile clk83xx_t *clk = (volatile clk83xx_t *)&immr->clk;
+       volatile law83xx_t *pci_law = immr->sysconf.pcilaw;
+       struct pci_region *reg[] = { pci_regions };
+       int warmboot;
+
+       /* Enable all 3 PCI_CLK_OUTPUTs. */
+       clk->occr |= 0xe0000000;
+
+       /*
+        * Configure PCI Local Access Windows
+        */
+       pci_law[0].bar = CFG_PCI1_MEM_PHYS & LAWBAR_BAR;
+       pci_law[0].ar = LBLAWAR_EN | LBLAWAR_512MB;
+
+       pci_law[1].bar = CFG_PCI1_IO_PHYS & LAWBAR_BAR;
+       pci_law[1].ar = LBLAWAR_EN | LBLAWAR_1MB;
+
+       warmboot = gd->bd->bi_bootflags & BOOTFLAG_WARM;
+#ifndef CFG_8313ERDB_BROKEN_PMC
+       warmboot |= immr->pmc.pmccr1 & PMCCR1_POWER_OFF;
+#endif
+
+       mpc83xx_pci_init(1, reg, warmboot);
+}
+
+#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP)
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       u32 *p;
+       int len;
+
+#ifdef CONFIG_PCI
+       ft_pci_setup(blob, bd);
+#endif
+       ft_cpu_setup(blob, bd);
+
+       p = ft_get_prop(blob, "/memory/reg", &len);
+       if (p) {
+               *p++ = cpu_to_be32(bd->bi_memstart);
+               *p = cpu_to_be32(bd->bi_memsize);
+       }
+}
+#endif
diff --git a/board/mpc8313erdb/sdram.c b/board/mpc8313erdb/sdram.c
new file mode 100644 (file)
index 0000000..4b67788
--- /dev/null
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) Freescale Semiconductor, Inc. 2006-2007
+ *
+ * Authors: Nick.Spence@freescale.com
+ *          Wilson.Lo@freescale.com
+ *          scottwood@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 <mpc83xx.h>
+#include <spd_sdram.h>
+
+#include <asm/bitops.h>
+#include <asm/io.h>
+
+#include <asm/processor.h>
+
+#ifndef CFG_8313ERDB_BROKEN_PMC
+static void resume_from_sleep(void)
+{
+       DECLARE_GLOBAL_DATA_PTR;
+       u32 magic = *(u32 *)0;
+
+       typedef void (*func_t)(void);
+       func_t resume = *(func_t *)4;
+
+       if (magic == 0xf5153ae5)
+               resume();
+
+       gd->flags &= ~GD_FLG_SILENT;
+       puts("\nResume from sleep failed: bad magic word\n");
+}
+#endif
+
+/* Fixed sdram init -- doesn't use serial presence detect.
+ *
+ * This is useful for faster booting in configs where the RAM is unlikely
+ * to be changed, or for things like NAND booting where space is tight.
+ */
+static long fixed_sdram(void)
+{
+       volatile immap_t *im = (volatile immap_t *)CFG_IMMR;
+       u32 msize = CFG_DDR_SIZE * 1024 * 1024;
+       u32 msize_log2 = __ilog2(msize);
+
+       im->sysconf.ddrlaw[0].bar = CFG_DDR_SDRAM_BASE >> 12;
+       im->sysconf.ddrlaw[0].ar = LBLAWAR_EN | (msize_log2 - 1);
+       im->sysconf.ddrcdr = CFG_DDRCDR_VALUE;
+
+       /*
+        * Erratum DDR3 requires a 50ms delay after clearing DDRCDR[DDR_cfg],
+        * or the DDR2 controller may fail to initialize correctly.
+        */
+       udelay(50000);
+
+       im->ddr.csbnds[0].csbnds = (msize - 1) >> 24;
+       im->ddr.cs_config[0] = CFG_DDR_CONFIG;
+
+       /* Currently we use only one CS, so disable the other bank. */
+       im->ddr.cs_config[1] = 0;
+
+       im->ddr.sdram_clk_cntl = CFG_DDR_CLK_CNTL;
+       im->ddr.timing_cfg_3 = CFG_DDR_TIMING_3;
+       im->ddr.timing_cfg_1 = CFG_DDR_TIMING_1;
+       im->ddr.timing_cfg_2 = CFG_DDR_TIMING_2;
+       im->ddr.timing_cfg_0 = CFG_DDR_TIMING_0;
+
+#ifndef CFG_8313ERDB_BROKEN_PMC
+       if (im->pmc.pmccr1 & PMCCR1_POWER_OFF)
+               im->ddr.sdram_cfg = CFG_SDRAM_CFG | SDRAM_CFG_BI;
+       else
+#endif
+               im->ddr.sdram_cfg = CFG_SDRAM_CFG;
+
+       im->ddr.sdram_cfg2 = CFG_SDRAM_CFG2;
+       im->ddr.sdram_mode = CFG_DDR_MODE;
+       im->ddr.sdram_mode2 = CFG_DDR_MODE_2;
+
+       im->ddr.sdram_interval = CFG_DDR_INTERVAL;
+       sync();
+
+       /* enable DDR controller */
+       im->ddr.sdram_cfg |= SDRAM_CFG_MEM_EN;
+
+       return msize;
+}
+
+long int initdram(int board_type)
+{
+       volatile immap_t *im = (volatile immap_t *)CFG_IMMR;
+       volatile lbus83xx_t *lbc = &im->lbus;
+       u32 msize;
+
+       if ((im->sysconf.immrbar & IMMRBAR_BASE_ADDR) != (u32)im)
+               return -1;
+
+       puts("Initializing\n");
+
+       /* DDR SDRAM - Main SODIMM */
+       msize = fixed_sdram();
+
+       /* Local Bus setup lbcr and mrtpr */
+       lbc->lbcr = CFG_LBC_LBCR;
+       lbc->mrtpr = CFG_LBC_MRTPR;
+       sync();
+
+#ifndef CFG_8313ERDB_BROKEN_PMC
+       if (im->pmc.pmccr1 & PMCCR1_POWER_OFF)
+               resume_from_sleep();
+#endif
+
+       puts("   DDR RAM: ");
+       /* return total bus SDRAM size(bytes)  -- DDR */
+       return msize;
+}
diff --git a/board/mpc8313erdb/u-boot.lds b/board/mpc8313erdb/u-boot.lds
new file mode 100644 (file)
index 0000000..937c87a
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * (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
+ */
+
+OUTPUT_ARCH(powerpc)
+SECTIONS
+{
+  /* Read-only sections, merged into text segment: */
+  . = + SIZEOF_HEADERS;
+  .interp : { *(.interp) }
+  .hash          : { *(.hash)          }
+  .dynsym        : { *(.dynsym)                }
+  .dynstr        : { *(.dynstr)                }
+  .rel.text      : { *(.rel.text)              }
+  .rela.text     : { *(.rela.text)     }
+  .rel.data      : { *(.rel.data)              }
+  .rela.data     : { *(.rela.data)     }
+  .rel.rodata    : { *(.rel.rodata)    }
+  .rela.rodata   : { *(.rela.rodata)   }
+  .rel.got       : { *(.rel.got)               }
+  .rela.got      : { *(.rela.got)              }
+  .rel.ctors     : { *(.rel.ctors)     }
+  .rela.ctors    : { *(.rela.ctors)    }
+  .rel.dtors     : { *(.rel.dtors)     }
+  .rela.dtors    : { *(.rela.dtors)    }
+  .rel.bss       : { *(.rel.bss)               }
+  .rela.bss      : { *(.rela.bss)              }
+  .rel.plt       : { *(.rel.plt)               }
+  .rela.plt      : { *(.rela.plt)              }
+  .init          : { *(.init)  }
+  .plt : { *(.plt) }
+  .text      :
+  {
+    cpu/mpc83xx/start.o        (.text)
+    *(.text)
+    *(.fixup)
+    *(.got1)
+    . = ALIGN(16);
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  }
+  .fini      : { *(.fini)    } =0
+  .ctors     : { *(.ctors)   }
+  .dtors     : { *(.dtors)   }
+
+  /* Read-write section, merged into data segment: */
+  . = (. + 0x0FFF) & 0xFFFFF000;
+  _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(4096);
+  __init_begin = .;
+  .text.init : { *(.text.init) }
+  .data.init : { *(.data.init) }
+  . = ALIGN(4096);
+  __init_end = .;
+
+  __bss_start = .;
+  .bss       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
+ENTRY(_start)
index 2b3ded17629d9ba2bceb98399d59970cedec119f..178b1d36fbf683faa44fefd6a4be57809b0f1022 100644 (file)
@@ -80,8 +80,7 @@ int fixed_sdram(void)
        im->ddr.sdram_interval =
            (0x0410 << SDRAM_INTERVAL_REFINT_SHIFT) | (0x0100 <<
                                                       SDRAM_INTERVAL_BSTOPRE_SHIFT);
-       im->ddr.sdram_clk_cntl =
-           DDR_SDRAM_CLK_CNTL_SS_EN | DDR_SDRAM_CLK_CNTL_CLK_ADJUST_05;
+       im->ddr.sdram_clk_cntl = CFG_DDR_SDRAM_CLK_CNTL;
 
        udelay(200);
 
index 5801a5f178448952cd5373b8e2865f042aa7e785..9ace8860cfdb742f712ab2b7db87aa3ea7fb367b 100644 (file)
@@ -26,8 +26,3 @@
 #
 
 TEXT_BASE = 0xFE000000
-
-#
-# Additional board-specific libraries
-#
-BOARDLIBS = libfdt/libfdt.a
index deadb5ffbe2456ee4f9b0f9cb973ffb772d43eaa..562eb8b53af29deab02ed9f27a707e7f33c997a6 100644 (file)
@@ -664,19 +664,28 @@ U_BOOT_CMD(ecc, 4, 0, do_ecc,
 
 #if (defined(CONFIG_OF_FLAT_TREE) || defined(CONFIG_OF_LIBFDT)) \
      && defined(CONFIG_OF_BOARD_SETUP)
+
+/*
+ * Prototypes of functions that we use.
+ */
+void ft_cpu_setup(void *blob, bd_t *bd);
+
+#ifdef CONFIG_PCI
+void ft_pci_setup(void *blob, bd_t *bd);
+#endif
+
 void
 ft_board_setup(void *blob, bd_t *bd)
 {
 #if defined(CONFIG_OF_LIBFDT)
        int nodeoffset;
-       int err;
        int tmp[2];
 
        nodeoffset = fdt_path_offset (fdt, "/memory");
        if (nodeoffset >= 0) {
                tmp[0] = cpu_to_be32(bd->bi_memstart);
                tmp[1] = cpu_to_be32(bd->bi_memsize);
-               err = fdt_setprop(fdt, nodeoffset, "reg", tmp, sizeof(tmp));
+               fdt_setprop(fdt, nodeoffset, "reg", tmp, sizeof(tmp));
        }
 #else
        u32 *p;
@@ -694,4 +703,4 @@ ft_board_setup(void *blob, bd_t *bd)
 #endif
        ft_cpu_setup(blob, bd);
 }
-#endif
+#endif /* CONFIG_OF_x */
index 242cb9fbc1dafda157e4cf0a2254f7ef087ae5d0..544fde94c43461370fccd2083fc71fedee65acf3 100644 (file)
@@ -260,8 +260,8 @@ tlb1_entry:
 #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))
+#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
index 242cb9fbc1dafda157e4cf0a2254f7ef087ae5d0..544fde94c43461370fccd2083fc71fedee65acf3 100644 (file)
@@ -260,8 +260,8 @@ tlb1_entry:
 #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))
+#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
diff --git a/board/mpc8568mds/Makefile b/board/mpc8568mds/Makefile
new file mode 100644 (file)
index 0000000..a799aa4
--- /dev/null
@@ -0,0 +1,58 @@
+#
+# Copyright 2004-2007 Freescale Semiconductor.
+# (C) Copyright 2001-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
+ifneq ($(OBJTREE),$(SRCTREE))
+$(shell mkdir -p $(obj)../common)
+endif
+
+LIB    = $(obj)lib$(BOARD).a
+
+COBJS  := $(BOARD).o \
+       bcsr.o \
+       ft_board.o
+
+SOBJS  := init.o
+
+SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS   := $(addprefix $(obj),$(COBJS))
+SOBJS  := $(addprefix $(obj),$(SOBJS))
+
+$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+       rm -f $(OBJS) $(SOBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/mpc8568mds/bcsr.c b/board/mpc8568mds/bcsr.c
new file mode 100644 (file)
index 0000000..2e2e8cd
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2007 Freescale Semiconductor.
+ *
+ * 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 "bcsr.h"
+
+void enable_8568mds_duart()
+{
+       volatile uint* duart_mux        = (uint *)(CFG_CCSRBAR + 0xe0060);
+       volatile uint* devices          = (uint *)(CFG_CCSRBAR + 0xe0070);
+       volatile u8 *bcsr               = (u8 *)(CFG_BCSR);
+
+       *duart_mux = 0x80000000;        /* Set the mux to Duart on PMUXCR */
+       *devices  = 0;                  /* Enable all peripheral devices */
+       bcsr[5] |= 0x01;                /* Enable Duart in BCSR*/
+}
+
+void enable_8568mds_flash_write()
+{
+       volatile u8 *bcsr = (u8 *)(CFG_BCSR);
+
+       bcsr[9] |= 0x01;
+}
+
+void disable_8568mds_flash_write()
+{
+       volatile u8 *bcsr = (u8 *)(CFG_BCSR);
+
+       bcsr[9] &= ~(0x01);
+}
diff --git a/board/mpc8568mds/bcsr.h b/board/mpc8568mds/bcsr.h
new file mode 100644 (file)
index 0000000..8d4cb2f
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2007 Freescale Semiconductor.
+ *
+ * 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 __BCSR_H_
+#define __BCSR_H_
+
+#include <common.h>
+
+/* BCSR Bit definitions
+       * BCSR 0 *
+       0:3     ccb sys pll
+       4:6     cfg core pll
+       7       cfg boot seq
+
+       * BCSR 1 *
+       0:2     cfg rom lock
+       3:5     cfg host agent
+       6       PCI IO
+       7       cfg RIO size
+
+       * BCSR 2 *
+       0:4     QE PLL
+       5       QE clock
+       6       cfg PCI arbiter
+
+       * BCSR 3 *
+       0       TSEC1 reduce
+       1       TSEC2 reduce
+       2:3     TSEC1 protocol
+       4:5     TSEC2 protocol
+       6       PHY1 slave
+       7       PHY2 slave
+
+       * BCSR 4 *
+       4       clock enable
+       5       boot EPROM
+       6       GETH transactive reset
+       7       BRD write potect
+
+       * BCSR 5 *
+       1:3     Leds 1-3
+       4       UPC1 enable
+       5       UPC2 enable
+       6       UPC2 pos
+       7       RS232 enable
+
+       * BCSR 6 *
+       0       CFG ver 0
+       1       CFG ver 1
+       6       Register config led
+       7       Power on reset
+
+       * BCSR 7 *
+       2       board host mode indication
+       5       enable TSEC1 PHY
+       6       enable TSEC2 PHY
+
+       * BCSR 8 *
+       0       UCC GETH1 enable
+       1       UCC GMII enable
+       3       UCC TBI enable
+       5       UCC MII enable
+       7       Real time clock reset
+
+       * BCSR 9 *
+       0       UCC2 GETH enable
+       1       UCC2 GMII enable
+       3       UCC2 TBI enable
+       5       UCC2 MII enable
+       6       Ready only - indicate flash ready after burning
+       7       Flash write protect
+*/
+
+/*BCSR Utils functions*/
+
+void enable_8568mds_duart(void);
+void enable_8568mds_flash_write(void);
+void disable_8568mds_flash_write(void);
+
+#endif /* __BCSR_H_ */
diff --git a/board/mpc8568mds/config.mk b/board/mpc8568mds/config.mk
new file mode 100644 (file)
index 0000000..021522c
--- /dev/null
@@ -0,0 +1,30 @@
+#
+# Copyright 2007 Freescale Semiconductor.
+#
+# 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
+#
+
+#
+# mpc8568mds board
+#
+TEXT_BASE = 0xfff80000
+
+PLATFORM_CPPFLAGS += -DCONFIG_E500=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx=1
+PLATFORM_CPPFLAGS += -DCONFIG_MPC8568=1
similarity index 54%
rename from cpu/microblaze/disable_int.S
rename to board/mpc8568mds/ft_board.c
index aecd79513ca3bf09d6c32e52b3f0a9c7ca9ab0fe..36815ccfbb52897ee2cb432297436e274686bef8 100644 (file)
@@ -1,7 +1,5 @@
 /*
- * (C) Copyright 2007 Michal Simek
- *
- * Michal  SIMEK <monstr@monstr.eu>
+ * Copyright 2004-2007 Freescale Semiconductor.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -13,7 +11,7 @@
  *
  * 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
+ * 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
  * MA 02111-1307 USA
  */
 
-       .text
-       .globl  microblaze_disable_interrupts
-       .ent    microblaze_disable_interrupts
-       .align  2
-microblaze_disable_interrupts:
-       #Make space on stack for a temporary
-       addi    r1, r1, -4
-       #Save register r12
-       swi     r12, r1, 0
-       #Read the MSR register
-       mfs     r12, rmsr
-       #Clear the interrupt enable bit
-       andi    r12, r12, ~2
-       #Save the MSR register
-       mts     rmsr, r12
-       #Load register r12
-       lwi     r12, r1, 0
-       #Return
-       rtsd    r15, 8
-       #Update stack in the delay slot
-       addi    r1, r1, 4
-       .end    microblaze_disable_interrupts
+#include <common.h>
+
+#include <ft_build.h>
+
+extern void ft_cpu_setup(void *blob, bd_t *bd);
+
+#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP)
+void
+ft_board_setup(void *blob, bd_t *bd)
+{
+       u32 *p;
+       int len;
+#ifdef CONFIG_PCI
+       ft_pci_setup(blob, bd);
+#endif
+       ft_cpu_setup(blob, bd);
+       p = ft_get_prop(blob, "/memory/reg", &len);
+       if (p != NULL) {
+               *p++ = cpu_to_be32(bd->bi_memstart);
+               *p = cpu_to_be32(bd->bi_memsize);
+       }
+}
+#endif /* CONFIG_OF_FLAT_TREE && CONFIG_OF_BOARD_SETUP */
diff --git a/board/mpc8568mds/init.S b/board/mpc8568mds/init.S
new file mode 100644 (file)
index 0000000..0d87982
--- /dev/null
@@ -0,0 +1,258 @@
+/*
+ * 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, sharen, 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 TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,0,1,0,1,0,1)
+#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 TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR), 0,0,0,0,0,0,0,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR), 0,0,0,0,0,1,0,1,0,1)
+
+       .long TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 4 * 1024),
+                       0,0,0,0,0,0,0,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 4 * 1024),
+                       0,0,0,0,0,1,0,1,0,1)
+
+       .long TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 8 * 1024),
+                       0,0,0,0,0,0,0,0)
+       .long TLB1_MAS3(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 8 * 1024),
+                       0,0,0,0,0,1,0,1,0,1)
+
+       .long TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 12 * 1024),
+                       0,0,0,0,0,0,0,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 12 * 1024),
+                       0,0,0,0,0,1,0,1,0,1)
+
+       /* TLB 1 Initializations */
+       /*
+        * TLBe 0:      16M     Non-cacheable, guarded
+        * 0xff000000   16M     FLASH (upper half)
+        * Out of reset this entry is only 4K.
+        */
+       .long TLB1_MAS0(1, 0, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_FLASH_BASE + 0x1000000),
+                       0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_FLASH_BASE + 0x1000000),
+                       0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLBe 1:      16M     Non-cacheable, guarded
+        * 0xfe000000   16M     FLASH (lower half)
+        */
+       .long TLB1_MAS0(1, 1, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_FLASH_BASE), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_FLASH_BASE), 0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLBe 2:      256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM
+        */
+       .long TLB1_MAS0(1, 2, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_PCI1_MEM_BASE), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_PCI1_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLBe 3:      256M    Non-cacheable, guarded
+        * 0xa0000000   256M    PCIe Mem
+        */
+       .long TLB1_MAS0(1, 3, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_PEX_MEM_BASE), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_PEX_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLBe 4:      Reserved for future usage
+        */
+
+       /*
+        * TLBe 5:      64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  8M      PCI1 IO
+        * 0xe280_0000  8M      PCIe IO
+        */
+       .long TLB1_MAS0(1, 5, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR), 0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLBe 6:      64M     Cacheable, non-guarded
+        * 0xf000_0000  64M     LBC SDRAM
+        */
+       .long TLB1_MAS0(1, 6, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_LBC_SDRAM_BASE), 0,0,0,0,0,0,0,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_LBC_SDRAM_BASE), 0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLBe 7:      256K    Non-cacheable, guarded
+        * 0xf8000000   32K BCSR
+        * 0xf8008000   32K PIB (CS4)
+        * 0xf8010000   32K PIB (CS5)
+        */
+       .long TLB1_MAS0(1, 7, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256K)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_BCSR_BASE), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_BCSR_BASE), 0,0,0,0,0,1,0,1,0,1)
+
+2:
+       entry_end
+
+/*
+ * LAW(Local Access Window) configuration:
+ *
+ *0)   0x0000_0000   0x7fff_ffff     DDR                     2G
+ *1)   0x8000_0000   0x9fff_ffff     PCI1 MEM                256MB
+ *2)   0xa000_0000   0xbfff_ffff     PCIe MEM                256MB
+ *5)   0xc000_0000   0xdfff_ffff     SRIO                    256MB
+ *-)   0xe000_0000   0xe00f_ffff     CCSR                    1M
+ *3)   0xe200_0000   0xe27f_ffff     PCI1 I/O                8M
+ *4)   0xe280_0000   0xe2ff_ffff     PCIe I/0                8M
+ *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_256M))
+
+#define LAWBAR2 ((CFG_PEX_MEM_BASE>>12) & 0xfffff)
+#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_PEX | (LAWAR_SIZE & LAWAR_SIZE_256M))
+
+#define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff)
+#define LAWAR3 (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_8M))
+
+#define LAWBAR4 ((CFG_PEX_IO_PHYS>>12) & 0xfffff)
+#define LAWAR4  (LAWAR_EN | LAWAR_TRGT_IF_PEX | (LAWAR_SIZE & LAWAR_SIZE_16M))
+
+
+#define LAWBAR5 ((CFG_SRIO_MEM_BASE>>12) & 0xfffff)
+#define LAWAR5 (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_256M))
+
+/* 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/mpc8568mds/mpc8568mds.c b/board/mpc8568mds/mpc8568mds.c
new file mode 100644 (file)
index 0000000..9c7960d
--- /dev/null
@@ -0,0 +1,288 @@
+/*
+ * Copyright 2007 Freescale Semiconductor.
+ *
+ * (C) Copyright 2002 Scott McNutt <smcnutt@artesyncp.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 <pci.h>
+#include <asm/processor.h>
+#include <asm/immap_85xx.h>
+#include <spd.h>
+
+#include "bcsr.h"
+
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+extern void ddr_enable_ecc(unsigned int dram_size);
+#endif
+
+extern long int spd_sdram(void);
+
+void local_bus_init(void);
+void sdram_init(void);
+
+int board_early_init_f (void)
+{
+       /*
+        * Initialize local bus.
+        */
+       local_bus_init ();
+
+       enable_8568mds_duart();
+       enable_8568mds_flash_write();
+
+       return 0;
+}
+
+int checkboard (void)
+{
+       printf ("Board: 8568 MDS\n");
+
+       return 0;
+}
+
+long int
+initdram(int board_type)
+{
+       long dram_size = 0;
+       volatile immap_t *immap = (immap_t *)CFG_IMMR;
+
+       puts("Initializing\n");
+
+#if defined(CONFIG_DDR_DLL)
+       {
+               /*
+                * Work around to stabilize DDR DLL MSYNC_IN.
+                * Errata DDR9 seems to have been fixed.
+                * This is now the workaround for Errata DDR11:
+                *    Override DLL = 1, Course Adj = 1, Tap Select = 0
+                */
+
+               volatile ccsr_gur_t *gur= &immap->im_gur;
+
+               gur->ddrdllcr = 0x81000000;
+               asm("sync;isync;msync");
+               udelay(200);
+       }
+#endif
+       dram_size = spd_sdram();
+
+#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+       /*
+        * Initialize and enable DDR ECC.
+        */
+       ddr_enable_ecc(dram_size);
+#endif
+       /*
+        * SDRAM Initialization
+        */
+       sdram_init();
+
+       puts("    DDR: ");
+       return dram_size;
+}
+
+/*
+ * Initialize Local Bus
+ */
+void
+local_bus_init(void)
+{
+       volatile immap_t *immap = (immap_t *)CFG_IMMR;
+       volatile ccsr_gur_t *gur = &immap->im_gur;
+       volatile ccsr_lbc_t *lbc = &immap->im_lbc;
+
+       uint clkdiv;
+       uint lbc_hz;
+       sys_info_t sysinfo;
+
+       get_sys_info(&sysinfo);
+       clkdiv = (lbc->lcrr & 0x0f) * 2;
+       lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv;
+
+       gur->lbiuiplldcr1 = 0x00078080;
+       if (clkdiv == 16) {
+               gur->lbiuiplldcr0 = 0x7c0f1bf0;
+       } else if (clkdiv == 8) {
+               gur->lbiuiplldcr0 = 0x6c0f1bf0;
+       } else if (clkdiv == 4) {
+               gur->lbiuiplldcr0 = 0x5c0f1bf0;
+       }
+
+       lbc->lcrr |= 0x00030000;
+
+       asm("sync;isync;msync");
+}
+
+/*
+ * Initialize SDRAM memory on the Local Bus.
+ */
+void
+sdram_init(void)
+{
+#if defined(CFG_OR2_PRELIM) && defined(CFG_BR2_PRELIM)
+
+       uint idx;
+       volatile immap_t *immap = (immap_t *)CFG_IMMR;
+       volatile ccsr_lbc_t *lbc = &immap->im_lbc;
+       uint *sdram_addr = (uint *)CFG_LBC_SDRAM_BASE;
+       uint lsdmr_common;
+
+       puts("    SDRAM: ");
+
+       print_size (CFG_LBC_SDRAM_SIZE * 1024 * 1024, "\n");
+
+       /*
+        * Setup SDRAM Base and Option Registers
+        */
+       lbc->or2 = CFG_OR2_PRELIM;
+       asm("msync");
+
+       lbc->br2 = CFG_BR2_PRELIM;
+       asm("msync");
+
+       lbc->lbcr = CFG_LBC_LBCR;
+       asm("msync");
+
+
+       lbc->lsrt = CFG_LBC_LSRT;
+       lbc->mrtpr = CFG_LBC_MRTPR;
+       asm("msync");
+
+       /*
+        * MPC8568 uses "new" 15-16 style addressing.
+        */
+       lsdmr_common = CFG_LBC_LSDMR_COMMON;
+       lsdmr_common |= CFG_LBC_LSDMR_BSMA1516;
+
+       /*
+        * Issue PRECHARGE ALL command.
+        */
+       lbc->lsdmr = lsdmr_common | CFG_LBC_LSDMR_OP_PCHALL;
+       asm("sync;msync");
+       *sdram_addr = 0xff;
+       ppcDcbf((unsigned long) sdram_addr);
+       udelay(100);
+
+       /*
+        * Issue 8 AUTO REFRESH commands.
+        */
+       for (idx = 0; idx < 8; idx++) {
+               lbc->lsdmr = lsdmr_common | CFG_LBC_LSDMR_OP_ARFRSH;
+               asm("sync;msync");
+               *sdram_addr = 0xff;
+               ppcDcbf((unsigned long) sdram_addr);
+               udelay(100);
+       }
+
+       /*
+        * Issue 8 MODE-set command.
+        */
+       lbc->lsdmr = lsdmr_common | CFG_LBC_LSDMR_OP_MRW;
+       asm("sync;msync");
+       *sdram_addr = 0xff;
+       ppcDcbf((unsigned long) sdram_addr);
+       udelay(100);
+
+       /*
+        * Issue NORMAL OP command.
+        */
+       lbc->lsdmr = lsdmr_common | CFG_LBC_LSDMR_OP_NORMAL;
+       asm("sync;msync");
+       *sdram_addr = 0xff;
+       ppcDcbf((unsigned long) sdram_addr);
+       udelay(200);    /* Overkill. Must wait > 200 bus cycles */
+
+#endif /* enable SDRAM init */
+}
+
+#if defined(CFG_DRAM_TEST)
+int
+testdram(void)
+{
+       uint *pstart = (uint *) CFG_MEMTEST_START;
+       uint *pend = (uint *) CFG_MEMTEST_END;
+       uint *p;
+
+       printf("Testing DRAM from 0x%08x to 0x%08x\n",
+              CFG_MEMTEST_START,
+              CFG_MEMTEST_END);
+
+       printf("DRAM test phase 1:\n");
+       for (p = pstart; p < pend; p++)
+               *p = 0xaaaaaaaa;
+
+       for (p = pstart; p < pend; p++) {
+               if (*p != 0xaaaaaaaa) {
+                       printf ("DRAM test fails at: %08x\n", (uint) p);
+                       return 1;
+               }
+       }
+
+       printf("DRAM test phase 2:\n");
+       for (p = pstart; p < pend; p++)
+               *p = 0x55555555;
+
+       for (p = pstart; p < pend; p++) {
+               if (*p != 0x55555555) {
+                       printf ("DRAM test fails at: %08x\n", (uint) p);
+                       return 1;
+               }
+       }
+
+       printf("DRAM test passed.\n");
+       return 0;
+}
+#endif
+
+#if defined(CONFIG_PCI)
+#ifndef CONFIG_PCI_PNP
+static struct pci_config_table pci_mpc8568mds_config_table[] = {
+       {
+        PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
+        pci_cfgfunc_config_device,
+        {PCI_ENET0_IOADDR,
+         PCI_ENET0_MEMADDR,
+         PCI_COMMON_MEMORY | PCI_COMMAND_MASTER}
+        },
+       {}
+};
+#endif
+
+static struct pci_controller hose[] = {
+#ifndef CONFIG_PCI_PNP
+       { config_table: pci_mpc8568mds_config_table,},
+#endif
+#ifdef CONFIG_MPC85XX_PCI2
+       {},
+#endif
+};
+
+#endif /* CONFIG_PCI */
+
+void
+pci_init_board(void)
+{
+#ifdef CONFIG_PCI
+       pci_mpc85xx_init(&hose);
+#endif
+}
diff --git a/board/mpc8568mds/u-boot.lds b/board/mpc8568mds/u-boot.lds
new file mode 100644 (file)
index 0000000..71099f6
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2004-2007 Freescale Semiconductor.
+ *
+ * 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
+{
+ /* ELIOR - From RAM:  From FLASH: 0xFFFFFFFC*/
+  .resetvec 0xFFFFFFFC:
+  {
+    *(.resetvec)
+  } = 0xffff
+
+  /*(ELIOR - From RAM:  From FLASH: 0xFFFFF000*/
+  .bootpg 0xFFFFF000:
+  {
+       cpu/mpc85xx/start.o     (.bootpg)
+       board/mpc8568mds/init.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      :
+  {
+    cpu/mpc85xx/start.o        (.text)
+    board/mpc8568mds/init.o (.text)
+    cpu/mpc85xx/traps.o (.text)
+    cpu/mpc85xx/interrupts.o (.text)
+    cpu/mpc85xx/cpu_init.o (.text)
+    cpu/mpc85xx/cpu.o (.text)
+    cpu/mpc85xx/speed.o (.text)
+    cpu/mpc85xx/pci.o (.text)
+    common/dlmalloc.o (.text)
+    lib_generic/crc32.o (.text)
+    lib_ppc/extable.o (.text)
+    lib_generic/zlib.o (.text)
+    *(.text)
+    *(.fixup)
+    *(.got1)
+   }
+    _etext = .;
+    PROVIDE (etext = .);
+    .rodata    :
+   {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  }
+  .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       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index 4b68c36743f275a3f2a7b00d3d9e0e6f87dcf507..96252116690e2de20fdf899602decbe02ad399aa 100644 (file)
@@ -25,7 +25,9 @@ include $(TOPDIR)/config.mk
 
 LIB    = $(obj)lib$(BOARD).a
 
-COBJS  := $(BOARD).o pixis.o sys_eeprom.o
+COBJS  := $(BOARD).o sys_eeprom.o \
+               ../freescale/common/pixis.o
+
 SOBJS  := init.o
 
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
index 6b3e2d275de1dfde76fea7ff44c3f51b1c3d996a..cb21ba6a75ba0192e050b00239ca9c4c5c5659af 100644 (file)
@@ -59,7 +59,7 @@
 #define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M))
 
 #define LAWBAR3 ((CFG_PCI2_MEM_BASE>>12) & 0xffffff)
-#define LAWAR3 (~LAWAR_EN & (LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M)))
+#define LAWAR3 (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M))
 
 /*
  * This is not so much the SDRAM map as it is the whole localbus map.
 #define LAWBAR4 ((0xf8100000>>12) & 0xffffff)
 #define LAWAR4 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_2M))
 
-#define LAWBAR5 ((CFG_PCI1_IO_BASE>>12) & 0xffffff)
+#define LAWBAR5 ((CFG_PCI1_IO_PHYS>>12) & 0xffffff)
 #define LAWAR5 (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_16M))
 
-#define LAWBAR6 ((CFG_PCI2_IO_BASE>>12) & 0xffffff)
-#define LAWAR6 (~LAWAR_EN &( LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_16M)))
+#define LAWBAR6 ((CFG_PCI2_IO_PHYS>>12) & 0xffffff)
+#define LAWAR6 (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_16M))
 
 #define LAWBAR7 ((0xfe000000 >>12) & 0xffffff)
 #define LAWAR7 (LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_32M))
@@ -84,7 +84,7 @@
 #define LAWAR8  ((LAWAR_TRGT_IF_DDR2 | (LAWAR_SIZE & LAWAR_SIZE_512M)) & ~LAWAR_EN)
 #endif
 
-#define LAWBAR9 ((CFG_RIO_MEM_BASE>>12) & 0xfffff)
+#define LAWBAR9 ((CFG_RIO_MEM_PHYS>>12) & 0xfffff)
 #define LAWAR9  (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M))
 
        .section .bootpg, "ax"
index b2cf4a9566d5a65f38208a33d2be5e548b797782..7d7e2afad31cc1389e4a3dcdf404d42448dac0e4 100644 (file)
@@ -1,9 +1,5 @@
 /*
- * Copyright 2004 Freescale Semiconductor.
- * Jeff Brown
- * Srikanth Srinivasan (srikanth.srinivasan@freescale.com)
- *
- * (C) Copyright 2002 Scott McNutt <smcnutt@artesyncp.com>
+ * Copyright 2006, 2007 Freescale Semiconductor.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
  */
 
 #include <common.h>
-#include <command.h>
 #include <pci.h>
 #include <asm/processor.h>
 #include <asm/immap_86xx.h>
 #include <spd.h>
+#include <asm/io.h>
 
 #if defined(CONFIG_OF_FLAT_TREE)
 #include <ft_build.h>
 extern void ft_cpu_setup(void *blob, bd_t *bd);
 #endif
 
-#include "pixis.h"
+#include "../freescale/common/pixis.h"
 
 #if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
 extern void ddr_enable_ecc(unsigned int dram_size);
@@ -258,109 +254,6 @@ ft_board_setup(void *blob, bd_t *bd)
 #endif
 
 
-void
-mpc8641_reset_board(cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
-{
-       char cmd;
-       ulong val;
-       ulong corepll;
-
-       /*
-        * No args is a simple reset request.
-        */
-       if (argc <= 1) {
-               out8(PIXIS_BASE + PIXIS_RST, 0);
-               /* not reached */
-       }
-
-       cmd = argv[1][1];
-       switch (cmd) {
-       case 'f':               /* reset with frequency changed */
-               if (argc < 5)
-                       goto my_usage;
-               read_from_px_regs(0);
-
-               val = set_px_sysclk(simple_strtoul(argv[2], NULL, 10));
-
-               corepll = strfractoint(argv[3]);
-               val = val + set_px_corepll(corepll);
-               val = val + set_px_mpxpll(simple_strtoul(argv[4], NULL, 10));
-               if (val == 3) {
-                       puts("Setting registers VCFGEN0 and VCTL\n");
-                       read_from_px_regs(1);
-                       puts("Resetting board with values from VSPEED0, VSPEED1, VCLKH, and VCLKL ....\n");
-                       set_px_go();
-               } else
-                       goto my_usage;
-
-               while (1) ;     /* Not reached */
-
-       case 'l':
-               if (argv[2][1] == 'f') {
-                       read_from_px_regs(0);
-                       read_from_px_regs_altbank(0);
-                       /* reset with frequency changed */
-                       val = set_px_sysclk(simple_strtoul(argv[3], NULL, 10));
-
-                       corepll = strfractoint(argv[4]);
-                       val = val + set_px_corepll(corepll);
-                       val = val + set_px_mpxpll(simple_strtoul(argv[5],
-                                                                NULL, 10));
-                       if (val == 3) {
-                               puts("Setting registers VCFGEN0, VCFGEN1, VBOOT, and VCTL\n");
-                               set_altbank();
-                               read_from_px_regs(1);
-                               read_from_px_regs_altbank(1);
-                               puts("Enabling watchdog timer on the FPGA and resetting board with values from VSPEED0, VSPEED1, VCLKH, and VCLKL to boot from the other bank ....\n");
-                               set_px_go_with_watchdog();
-                       } else
-                               goto my_usage;
-
-                       while (1) ;     /* Not reached */
-
-               } else if (argv[2][1] == 'd') {
-                       /*
-                        * Reset from alternate bank without changing
-                        * frequencies but with watchdog timer enabled.
-                        */
-                       read_from_px_regs(0);
-                       read_from_px_regs_altbank(0);
-                       puts("Setting registers VCFGEN1, VBOOT, and VCTL\n");
-                       set_altbank();
-                       read_from_px_regs_altbank(1);
-                       puts("Enabling watchdog timer on the FPGA and resetting board to boot from the other bank....\n");
-                       set_px_go_with_watchdog();
-                       while (1) ;     /* Not reached */
-
-               } else {
-                       /*
-                        * Reset from next bank without changing
-                        * frequency and without watchdog timer enabled.
-                        */
-                       read_from_px_regs(0);
-                       read_from_px_regs_altbank(0);
-                       if (argc > 2)
-                               goto my_usage;
-                       puts("Setting registers VCFGNE1, VBOOT, and VCTL\n");
-                       set_altbank();
-                       read_from_px_regs_altbank(1);
-                       puts("Resetting board to boot from the other bank....\n");
-                       set_px_go();
-               }
-
-       default:
-               goto my_usage;
-       }
-
-my_usage:
-       puts("\nUsage: reset cf <SYSCLK freq> <COREPLL ratio> <MPXPLL ratio>\n");
-       puts("       reset altbank [cf <SYSCLK freq> <COREPLL ratio> <MPXPLL ratio>]\n");
-       puts("       reset altbank [wd]\n");
-       puts("For example:   reset cf 40 2.5 10\n");
-       puts("See MPC8641HPCN Design Workbook for valid values of command line parameters.\n");
-}
-
-
 /*
  * get_board_sys_clk
  *      Reads the FPGA on board for CONFIG_SYS_CLK_FREQ
index 52c8ffe353a80642fe85d5c6969873c3f636f326..9d9b892600aeb41908928616640e88af06474bec 100644 (file)
@@ -1,5 +1,5 @@
 #
-# (C) Copyright 2006 Detlev Zundel, dzu@denx.de
+# (C) Copyright 2006, 2007 Detlev Zundel, dzu@denx.de
 # (C) Copyright 2004
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
 #
@@ -27,4 +27,3 @@
 #
 
 TEXT_BASE = 0x40700000
-BOARDLIBS = $(obj)drivers/nand/libnand.a
index 8a6b5b00a9cbf9b59e61a51299de540d0b86ab75..707e4b97d1713099d258cc732dc22c4beeac0560 100644 (file)
@@ -177,16 +177,14 @@ long int initdram (int board_type)
         *
         * try 8 column mode
         */
-       size8 = dram_size (CFG_MAMR_8COL, (ulong *) SDRAM_BASE3_PRELIM,
-                                          SDRAM_MAX_SIZE);
+       size8 = dram_size (CFG_MAMR_8COL, SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);
 
        udelay (1000);
 
        /*
         * try 9 column mode
         */
-       size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE3_PRELIM,
-                                         SDRAM_MAX_SIZE);
+       size9 = dram_size (CFG_MAMR_9COL, SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);
 
        udelay (1000);
 
index 767075884a0fe1054b4de93561e87d7d7a54c853..51dee86ae5611a540db0d9d8f96074e03a8d9204 100644 (file)
@@ -1,4 +1,2 @@
+#
 TEXT_BASE = 0x01f00000
-
-# include NPE ethernet driver
-BOARDLIBS = $(obj)cpu/ixp/npe/libnpe.a
diff --git a/board/stxssa/Makefile b/board/stxssa/Makefile
new file mode 100644 (file)
index 0000000..344ecdf
--- /dev/null
@@ -0,0 +1,51 @@
+#
+# (C) Copyright 2001
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+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):        $(obj).depend $(OBJS) $(SOBJS)
+       $(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+       rm -f $(OBJS) $(SOBJS)
+
+distclean:     clean
+       rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/stxssa/config.mk b/board/stxssa/config.mk
new file mode 100644 (file)
index 0000000..30f42c5
--- /dev/null
@@ -0,0 +1,34 @@
+# Modified by Xianghua Xiao, X.Xiao@motorola.com
+# (C) Copyright 2002,2003 Motorola Inc.
+#
+# Copied from ADS85xx for STx GP3 - Dan Malek
+#
+# 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
+#
+
+#
+# default CCARBAR is at 0xff700000
+# assume U-Boot is less than 0.5MB
+# U-Boot is less than 256K, so push
+# it further up into the flash
+#
+TEXT_BASE = 0xfffC0000
+
+PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx=1
+PLATFORM_CPPFLAGS += -DCONFIG_E500=1
diff --git a/board/stxssa/init.S b/board/stxssa/init.S
new file mode 100644 (file)
index 0000000..a1a8d9e
--- /dev/null
@@ -0,0 +1,256 @@
+/*
+ * 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, sharen, 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 TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,0,1,0,1,0,1)
+#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 TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR), \
+                       0,0,0,0,0,0,0,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR), \
+                       0,0,0,0,0,1,0,1,0,1)
+
+       .long TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 4 * 1024), \
+                       0,0,0,0,0,0,0,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 4 * 1024), \
+                       0,0,0,0,0,1,0,1,0,1)
+
+       .long TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 8 * 1024), \
+                       0,0,0,0,0,0,0,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 8 * 1024), \
+                       0,0,0,0,0,1,0,1,0,1)
+
+       .long TLB1_MAS0(0, 0, 0)
+       .long TLB1_MAS1(1, 0, 0, 0, 0)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 12 * 1024), \
+                       0,0,0,0,0,0,0,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 12 * 1024), \
+                       0,0,0,0,0,1,0,1,0,1)
+
+
+       /*
+        * TLB 0:       64M     Non-cacheable, guarded
+        * 0xfc000000   6M4     FLASH
+        * Out of reset this entry is only 4K.
+        */
+       .long TLB1_MAS0(1, 0, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_FLASH_BASE), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_FLASH_BASE), 0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLB 1:       256M    Non-cacheable, guarded
+        * 0x80000000   256M    PCI1 MEM First half
+        */
+       .long TLB1_MAS0(1, 1, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_PCI1_MEM_BASE), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_PCI1_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLB 2:       256M    Non-cacheable, guarded
+        * 0x90000000   256M    PCI1 MEM Second half
+        */
+       .long TLB1_MAS0(1, 2, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_PCI1_MEM_BASE + 0x10000000), \
+                       0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_PCI1_MEM_BASE + 0x10000000), \
+                       0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLB 3:       256M    Non-cacheable, guarded
+        * 0xa0000000   256M    PCI2 MEM First half
+        */
+       .long TLB1_MAS0(1, 3, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_PCI2_MEM_BASE), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_PCI2_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLB 4:       256M    Non-cacheable, guarded
+        * 0xb0000000   256M    PCI2 MEM Second half
+        */
+       .long TLB1_MAS0(1, 4, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_PCI2_MEM_BASE + 0x10000000), \
+                       0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_PCI2_MEM_BASE + 0x10000000), \
+                       0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLB 5:       64M     Non-cacheable, guarded
+        * 0xe000_0000  1M      CCSRBAR
+        * 0xe200_0000  16M     PCI1 IO
+        * 0xe300_0000  16M     PCI2 IO
+        */
+       .long TLB1_MAS0(1, 5, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR), 0,0,0,0,0,1,0,1,0,1)
+
+       /*
+        * TLB 6:       256M    Non-cacheable, guarded
+        * 0xf0000000           Local bus expansion option.
+        * 0xfb000000           Configuration Latch register (one word)
+        * 0xfc000000           Up to 64M flash
+        */
+       .long TLB1_MAS0(1, 7, 0)
+       .long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M)
+       .long TLB1_MAS2(E500_TLB_EPN(CFG_LBC_OPTION_BASE), 0,0,0,0,1,0,1,0)
+       .long TLB1_MAS3(E500_TLB_RPN(CFG_LBC_OPTION_BASE), 0,0,0,0,0,1,0,1,0,1)
+       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/stxssa.c b/board/stxssa/stxssa.c
new file mode 100644 (file)
index 0000000..0fb233d
--- /dev/null
@@ -0,0 +1,398 @@
+/*
+ * (C) Copyright 2005, Embedded Alley Solutions, Inc.
+ * Dan Malek, <dan@embeddedalley.com>
+ * Copied from STx GP3.
+ * Updates for Silicon Tx GP3 SSA
+ *
+ * (C) Copyright 2003,Motorola Inc.
+ * Xianghua Xiao, (X.Xiao@motorola.com)
+ *
+ * (C) Copyright 2002 Scott McNutt <smcnutt@artesyncp.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
+ */
+
+
+extern long int spd_sdram (void);
+
+#include <common.h>
+#include <pci.h>
+#include <asm/processor.h>
+#include <asm/immap_85xx.h>
+#include <ioports.h>
+#include <asm/io.h>
+#include <spd.h>
+#include <miiphy.h>
+
+long int fixed_sdram (void);
+
+/*
+ * I/O Port configuration table
+ *
+ * if conf is 1, then that port pin will be configured at boot time
+ * according to the five values podr/pdir/ppar/psor/pdat for that entry
+ */
+
+const iop_conf_t iop_conf_tab[4][32] = {
+
+    /* Port A configuration */
+    {   /*            conf ppar psor pdir podr pdat */
+       /* PA31 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 TxENB */
+       /* PA30 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 TxClav   */
+       /* PA29 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 TxSOC  */
+       /* PA28 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 RxENB */
+       /* PA27 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 RxSOC */
+       /* PA26 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 RxClav */
+       /* PA25 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[0] */
+       /* PA24 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[1] */
+       /* PA23 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[2] */
+       /* PA22 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[3] */
+       /* PA21 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[4] */
+       /* PA20 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[5] */
+       /* PA19 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[6] */
+       /* PA18 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[7] */
+       /* PA17 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[7] */
+       /* PA16 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[6] */
+       /* PA15 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[5] */
+       /* PA14 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[4] */
+       /* PA13 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[3] */
+       /* PA12 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[2] */
+       /* PA11 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[1] */
+       /* PA10 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[0] */
+       /* PA9  */ {   0,   1,   1,   1,   0,   0   }, /* FCC1 L1TXD */
+       /* PA8  */ {   0,   1,   1,   0,   0,   0   }, /* FCC1 L1RXD */
+       /* PA7  */ {   0,   0,   0,   1,   0,   0   }, /* PA7 */
+       /* PA6  */ {   0,   1,   1,   1,   0,   0   }, /* TDM A1 L1RSYNC */
+       /* PA5  */ {   0,   0,   0,   1,   0,   0   }, /* PA5 */
+       /* PA4  */ {   0,   0,   0,   1,   0,   0   }, /* PA4 */
+       /* PA3  */ {   0,   0,   0,   1,   0,   0   }, /* PA3 */
+       /* PA2  */ {   0,   0,   0,   1,   0,   0   }, /* PA2 */
+       /* PA1  */ {   1,   0,   0,   0,   0,   0   }, /* FREERUN */
+       /* PA0  */ {   0,   0,   0,   1,   0,   0   }  /* PA0 */
+    },
+
+    /* Port B configuration */
+    {   /*            conf ppar psor pdir podr pdat */
+       /* PB31 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TX_ER */
+       /* PB30 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RX_DV */
+       /* PB29 */ {   1,   1,   1,   1,   0,   0   }, /* FCC2 MII TX_EN */
+       /* PB28 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RX_ER */
+       /* PB27 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII COL */
+       /* PB26 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII CRS */
+       /* PB25 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[3] */
+       /* PB24 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[2] */
+       /* PB23 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[1] */
+       /* PB22 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[0] */
+       /* PB21 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[0] */
+       /* PB20 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[1] */
+       /* PB19 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[2] */
+       /* PB18 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[3] */
+       /* PB17 */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:RX_DIV */
+       /* PB16 */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:RX_ERR */
+       /* PB15 */ {   0,   1,   0,   1,   0,   0   }, /* FCC3:TX_ERR */
+       /* PB14 */ {   0,   1,   0,   1,   0,   0   }, /* FCC3:TX_EN */
+       /* PB13 */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:COL */
+       /* PB12 */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:CRS */
+       /* PB11 */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:RXD */
+       /* PB10 */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:RXD */
+       /* PB9  */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:RXD */
+       /* PB8  */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:RXD */
+       /* PB7  */ {   0,   1,   0,   1,   0,   0   }, /* FCC3:TXD */
+       /* PB6  */ {   0,   1,   0,   1,   0,   0   }, /* FCC3:TXD */
+       /* PB5  */ {   0,   1,   0,   1,   0,   0   }, /* FCC3:TXD */
+       /* PB4  */ {   0,   1,   0,   1,   0,   0   }, /* FCC3:TXD */
+       /* PB3  */ {   0,   0,   0,   0,   0,   0   }, /* pin doesn't exist */
+       /* PB2  */ {   0,   0,   0,   0,   0,   0   }, /* pin doesn't exist */
+       /* PB1  */ {   0,   0,   0,   0,   0,   0   }, /* pin doesn't exist */
+       /* PB0  */ {   0,   0,   0,   0,   0,   0   }  /* pin doesn't exist */
+    },
+
+    /* Port C */
+    {   /*            conf ppar psor pdir podr pdat */
+       /* PC31 */ {   0,   0,   0,   1,   0,   0   }, /* PC31 */
+       /* PC30 */ {   0,   0,   0,   1,   0,   0   }, /* PC30 */
+       /* PC29 */ {   0,   1,   1,   0,   0,   0   }, /* SCC1 EN *CLSN */
+       /* PC28 */ {   0,   0,   0,   1,   0,   0   }, /* PC28 */
+       /* PC27 */ {   0,   0,   0,   1,   0,   0   }, /* UART Clock in */
+       /* PC26 */ {   0,   0,   0,   1,   0,   0   }, /* PC26 */
+       /* PC25 */ {   0,   0,   0,   1,   0,   0   }, /* PC25 */
+       /* PC24 */ {   0,   0,   0,   1,   0,   0   }, /* PC24 */
+       /* PC23 */ {   0,   1,   0,   1,   0,   0   }, /* ATMTFCLK */
+       /* PC22 */ {   0,   1,   0,   0,   0,   0   }, /* ATMRFCLK */
+       /* PC21 */ {   0,   1,   0,   0,   0,   0   }, /* SCC1 EN RXCLK */
+       /* PC20 */ {   0,   1,   0,   0,   0,   0   }, /* SCC1 EN TXCLK */
+       /* PC19 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RX_CLK CLK13 */
+       /* PC18 */ {   1,   1,   0,   0,   0,   0   }, /* FCC Tx Clock (CLK14) */
+       /* PC17 */ {   0,   0,   0,   1,   0,   0   }, /* PC17 */
+       /* PC16 */ {   0,   1,   0,   0,   0,   0   }, /* FCC Tx Clock (CLK16) */
+       /* PC15 */ {   0,   1,   0,   0,   0,   0   }, /* PC15 */
+       /* PC14 */ {   0,   1,   0,   0,   0,   0   }, /* SCC1 EN *CD */
+       /* PC13 */ {   0,   0,   0,   1,   0,   0   }, /* PC13 */
+       /* PC12 */ {   0,   1,   0,   1,   0,   0   }, /* PC12 */
+       /* PC11 */ {   0,   0,   0,   1,   0,   0   }, /* LXT971 transmit control */
+       /* PC10 */ {   0,   0,   0,   1,   0,   0   }, /* FETHMDC */
+       /* PC9  */ {   0,   0,   0,   0,   0,   0   }, /* FETHMDIO */
+       /* PC8  */ {   0,   0,   0,   1,   0,   0   }, /* PC8 */
+       /* PC7  */ {   0,   0,   0,   1,   0,   0   }, /* PC7 */
+       /* PC6  */ {   0,   0,   0,   1,   0,   0   }, /* PC6 */
+       /* PC5  */ {   0,   0,   0,   1,   0,   0   }, /* PC5 */
+       /* PC4  */ {   0,   0,   0,   1,   0,   0   }, /* PC4 */
+       /* PC3  */ {   0,   0,   0,   1,   0,   0   }, /* PC3 */
+       /* PC2  */ {   0,   0,   0,   1,   0,   1   }, /* ENET FDE */
+       /* PC1  */ {   0,   0,   0,   1,   0,   0   }, /* ENET DSQE */
+       /* PC0  */ {   0,   0,   0,   1,   0,   0   }, /* ENET LBK */
+    },
+
+    /* Port D */
+    {   /*            conf ppar psor pdir podr pdat */
+       /* PD31 */ {   0,   1,   0,   0,   0,   0   }, /* SCC1 EN RxD */
+       /* PD30 */ {   0,   1,   1,   1,   0,   0   }, /* SCC1 EN TxD */
+       /* PD29 */ {   0,   1,   0,   1,   0,   0   }, /* SCC1 EN TENA */
+       /* PD28 */ {   1,   1,   0,   0,   0,   0   }, /* SCC2 RxD */
+       /* PD27 */ {   1,   1,   0,   1,   0,   0   }, /* SCC2 TxD */
+       /* PD26 */ {   0,   0,   0,   1,   0,   0   }, /* PD26 */
+       /* PD25 */ {   0,   0,   0,   1,   0,   0   }, /* PD25 */
+       /* PD24 */ {   0,   0,   0,   1,   0,   0   }, /* PD24 */
+       /* PD23 */ {   0,   0,   0,   1,   0,   0   }, /* PD23 */
+       /* PD22 */ {   0,   0,   0,   1,   0,   0   }, /* PD22 */
+       /* PD21 */ {   0,   0,   0,   1,   0,   0   }, /* PD21 */
+       /* PD20 */ {   0,   0,   0,   1,   0,   0   }, /* PD20 */
+       /* PD19 */ {   0,   0,   0,   1,   0,   0   }, /* PD19 */
+       /* PD18 */ {   0,   0,   0,   1,   0,   0   }, /* PD18 */
+       /* PD17 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXPRTY */
+       /* PD16 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXPRTY */
+       /* PD15 */ {   1,   1,   1,   0,   1,   0   }, /* I2C SDA */
+       /* PD14 */ {   1,   1,   1,   0,   0,   0   }, /* I2C CLK */
+       /* PD13 */ {   0,   0,   0,   0,   0,   0   }, /* PD13 */
+       /* PD12 */ {   0,   0,   0,   0,   0,   0   }, /* PD12 */
+       /* PD11 */ {   0,   0,   0,   0,   0,   0   }, /* PD11 */
+       /* PD10 */ {   0,   0,   0,   0,   0,   0   }, /* PD10 */
+       /* PD9  */ {   0,   1,   0,   1,   0,   0   }, /* SMC1 TXD */
+       /* PD8  */ {   0,   1,   0,   0,   0,   0   }, /* SMC1 RXD */
+       /* PD7  */ {   0,   0,   0,   1,   0,   1   }, /* PD7 */
+       /* PD6  */ {   0,   0,   0,   1,   0,   1   }, /* PD6 */
+       /* PD5  */ {   0,   0,   0,   1,   0,   1   }, /* PD5 */
+       /* PD4  */ {   0,   0,   0,   1,   0,   1   }, /* PD4 */
+       /* PD3  */ {   0,   0,   0,   0,   0,   0   }, /* pin doesn't exist */
+       /* PD2  */ {   0,   0,   0,   0,   0,   0   }, /* pin doesn't exist */
+       /* PD1  */ {   0,   0,   0,   0,   0,   0   }, /* pin doesn't exist */
+       /* PD0  */ {   0,   0,   0,   0,   0,   0   }  /* pin doesn't exist */
+    }
+};
+
+static uint64_t        next_led_update;
+static uint            led_bit;
+
+void
+reset_phy(void)
+{
+       volatile uint *blatch;
+#if 0
+       int     i;
+#endif
+       blatch = (volatile uint *)CFG_LBC_CFGLATCH_BASE;
+
+       /* reset Giga bit Ethernet port if needed here */
+
+#if 1
+       *blatch &= ~0x000000c0;
+       udelay(100);
+#else
+       *blatch = 0;
+       asm("eieio");
+       for (i=0; i<1000; i++)
+               udelay(1000);
+#endif
+       *blatch = 0x000000c1;   /* Light one led, too */
+       udelay(1000);
+
+#if 0  /* This is the port we really want to use for debugging. */
+       /* reset the CPM FEC port */
+#if (CONFIG_ETHER_INDEX == 2)
+       bcsr->bcsr2 &= ~FETH2_RST;
+       udelay(2);
+       bcsr->bcsr2 |=  FETH2_RST;
+       udelay(1000);
+#elif (CONFIG_ETHER_INDEX == 3)
+       bcsr->bcsr3 &= ~FETH3_RST;
+       udelay(2);
+       bcsr->bcsr3 |=  FETH3_RST;
+       udelay(1000);
+#endif
+#if defined(CONFIG_MII) && defined(CONFIG_ETHER_ON_FCC)
+       /* reset PHY */
+       miiphy_reset("FCC1 ETHERNET", 0x0);
+
+       /* change PHY address to 0x02 */
+       bb_miiphy_write(NULL, 0, PHY_MIPSCR, 0xf028);
+
+       bb_miiphy_write(NULL, 0x02, PHY_BMCR,
+                       PHY_BMCR_AUTON | PHY_BMCR_RST_NEG);
+#endif /* CONFIG_MII */
+#endif
+}
+
+int
+board_early_init_f(void)
+{
+#if defined(CONFIG_PCI)
+    volatile immap_t *immr = (immap_t *)CFG_IMMR;
+    volatile ccsr_pcix_t *pci = &immr->im_pcix;
+
+    pci->peer &= 0xfffffffdf; /* disable master abort */
+#endif
+
+       /* Why is the phy reset done _after_ the ethernet
+        * initialization in lib_ppc/board.c?
+        * Do it here so it's done before the TSECs are used.
+        */
+       reset_phy();
+
+       return 0;
+}
+
+int
+checkboard(void)
+{
+       printf ("Board: Silicon Tx GPPP SSA Board\n");
+       return (0);
+}
+
+/* Blinkin' LEDS for Robert.
+*/
+void
+show_activity(int flag)
+{
+       volatile uint *blatch;
+
+       if (next_led_update > get_ticks())
+               return;
+
+       blatch = (volatile uint *)CFG_LBC_CFGLATCH_BASE;
+
+       led_bit >>= 1;
+       if (led_bit == 0)
+               led_bit = 0x08;
+       *blatch = (0xc0 | led_bit);
+       eieio();
+       next_led_update += (get_tbclk() / 4);
+}
+
+long int
+initdram (int board_type)
+{
+       long dram_size = 0;
+       extern long spd_sdram (void);
+
+#if defined(CONFIG_DDR_DLL)
+       {
+               volatile immap_t *immap = (immap_t *)CFG_IMMR;
+               volatile ccsr_gur_t *gur= &immap->im_gur;
+               uint temp_ddrdll = 0;
+
+               /* Work around to stabilize DDR DLL */
+               temp_ddrdll = gur->ddrdllcr;
+               gur->ddrdllcr = ((temp_ddrdll & 0xff) << 16) | 0x80000000;
+               asm("sync;isync;msync");
+       }
+#endif
+
+       dram_size = spd_sdram ();
+
+#if defined(CONFIG_DDR_ECC)
+       /* Initialize and enable DDR ECC.
+       */
+       ddr_enable_ecc(dram_size);
+#endif
+
+       return dram_size;
+}
+
+
+#if defined(CFG_DRAM_TEST)
+int testdram (void)
+{
+       uint *pstart = (uint *) CFG_MEMTEST_START;
+       uint *pend = (uint *) CFG_MEMTEST_END;
+       uint *p;
+
+       printf("SDRAM test phase 1:\n");
+       for (p = pstart; p < pend; p++)
+               *p = 0xaaaaaaaa;
+
+       for (p = pstart; p < pend; p++) {
+               if (*p != 0xaaaaaaaa) {
+                       printf ("SDRAM test fails at: %08x\n", (uint) p);
+                       return 1;
+               }
+       }
+
+       printf("SDRAM test phase 2:\n");
+       for (p = pstart; p < pend; p++)
+               *p = 0x55555555;
+
+       for (p = pstart; p < pend; p++) {
+               if (*p != 0x55555555) {
+                       printf ("SDRAM test fails at: %08x\n", (uint) p);
+                       return 1;
+               }
+       }
+
+       printf("SDRAM test passed.\n");
+       return 0;
+}
+#endif
+
+#if defined(CONFIG_PCI)
+
+/*
+ * Initialize PCI Devices, report devices found.
+ */
+
+#ifndef CONFIG_PCI_PNP
+static struct pci_config_table pci_stxgp3_config_table[] = {
+    { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
+      PCI_IDSEL_NUMBER, PCI_ANY_ID,
+      pci_cfgfunc_config_device, { PCI_ENET0_IOADDR,
+                                  PCI_ENET0_MEMADDR,
+                                  PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER
+      } },
+    { }
+};
+#endif
+
+
+static struct pci_controller hose = {
+#ifndef CONFIG_PCI_PNP
+       config_table: pci_stxgp3_config_table,
+#endif
+};
+
+#endif /* CONFIG_PCI */
+
+
+void
+pci_init_board(void)
+{
+#ifdef CONFIG_PCI
+       extern void pci_mpc85xx_init(struct pci_controller *hose);
+
+       pci_mpc85xx_init(&hose);
+#endif /* CONFIG_PCI */
+}
diff --git a/board/stxssa/u-boot.lds b/board/stxssa/u-boot.lds
new file mode 100644 (file)
index 0000000..95ecf66
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+ * (C) Copyright 2005 Embedded Alley Solutions, Inc.
+ * Dan Malek, <dan@embeddedalley.com>
+ * Copied from STx GP3.
+ * Updates for Silicon Tx GP3 SSA.
+ *
+ * (C) Copyright 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
+ */
+
+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/mpc85xx/start.o        (.bootpg)
+    board/stxssa/init.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      :
+  {
+    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)
+    cpu/mpc85xx/serial_scc.o (.text)
+    cpu/mpc85xx/ether_fcc.o (.text)
+    cpu/mpc85xx/cpu_init.o (.text)
+    cpu/mpc85xx/cpu.o (.text)
+    cpu/mpc85xx/speed.o (.text)
+    cpu/mpc85xx/spd_sdram.o (.text)
+    common/dlmalloc.o (.text)
+    lib_generic/crc32.o (.text)
+    lib_ppc/extable.o (.text)
+    lib_generic/zlib.o (.text)
+    *(.text)
+    *(.fixup)
+    *(.got1)
+   }
+    _etext = .;
+    PROVIDE (etext = .);
+    .rodata    :
+   {
+    *(.rodata)
+    *(.rodata1)
+    *(.rodata.str1.4)
+    *(.eh_frame)
+  }
+  .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       :
+  {
+   *(.sbss) *(.scommon)
+   *(.dynbss)
+   *(.bss)
+   *(COMMON)
+  }
+  _end = . ;
+  PROVIDE (end = .);
+}
index 807f169fa7f2787d8999544d1a9cbc8e90d88f30..c75daaf0b54cf58eb29ba299469c232ff84de28c 100644 (file)
@@ -25,7 +25,7 @@
 # Version: Xilinx EDK 6.3 EDK_Gmm.12.3
 #
 
-TEXT_BASE = 0x12000000
+TEXT_BASE = 0x29000000
 
 PLATFORM_CPPFLAGS += -mno-xl-soft-mul
 PLATFORM_CPPFLAGS += -mno-xl-soft-div
index b48103fdc028e522eba9f742b3026da2398e0e40..955936d907e507a900c14277d7a88f3199f0d705 100644 (file)
@@ -27,6 +27,8 @@
 
 #include <common.h>
 #include <config.h>
+#include <asm/microblaze_intc.h>
+#include <asm/asm.h>
 
 void do_reset (void)
 {
@@ -43,7 +45,25 @@ void do_reset (void)
 int gpio_init (void)
 {
 #ifdef CFG_GPIO_0
-       *((unsigned long *)(CFG_GPIO_0_ADDR)) = 0x0;
+       *((unsigned long *)(CFG_GPIO_0_ADDR)) = 0xFFFFFFFF;
 #endif
        return 0;
 }
+
+#ifdef CFG_FSL_2
+void fsl_isr2 (void *arg) {
+       volatile int num;
+       *((unsigned int *)(CFG_GPIO_0_ADDR + 0x4)) =
+           ++(*((unsigned int *)(CFG_GPIO_0_ADDR + 0x4)));
+       GET (num, 2);
+       NGET (num, 2);
+       puts("*");
+}
+
+void fsl_init2 (void) {
+       puts("fsl_init2\n");
+       install_interrupt_handler (FSL_INTR_2,\
+ fsl_isr2,\
+ NULL);
+}
+#endif
old mode 100644 (file)
new mode 100755 (executable)
index 18d24f9..1a116ea
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
  *
- *
  * CAUTION: This file is automatically generated by libgen.
- * Version: Xilinx EDK 6.3 EDK_Gmm.12.3
+ * Version: Xilinx EDK 8.2.02 EDK_Im_Sp2.4
  */
 
 /* System Clock Frequency */
-#define XILINX_CLOCK_FREQ      66666667
+#define XILINX_CLOCK_FREQ      100000000
+
+/* Microblaze is microblaze_0 */
+#define XILINX_USE_MSR_INSTR   1
+#define XILINX_FSL_NUMBER      3
 
-/* Interrupt controller is intc_0 */
-#define XILINX_INTC_BASEADDR   0xd1000fc0
-#define XILINX_INTC_NUM_INTR_INPUTS    12
+/* Interrupt controller is opb_intc_0 */
+#define XILINX_INTC_BASEADDR   0x41200000
+#define XILINX_INTC_NUM_INTR_INPUTS    6
 
-/* Timer pheriphery is opb_timer_0 */
-#define XILINX_TIMER_BASEADDR  0xa2000000
+/* Timer pheriphery is opb_timer_1 */
+#define XILINX_TIMER_BASEADDR  0x41c00000
 #define XILINX_TIMER_IRQ       0
 
-/* Uart pheriphery is console_uart */
-#define XILINX_UART_BASEADDR   0xa0000000
+/* Uart pheriphery is RS232_Uart */
+#define XILINX_UART_BASEADDR   0x40600000
 #define XILINX_UART_BAUDRATE   115200
 
-/* GPIO is opb_gpio_0*/
-#define XILINX_GPIO_BASEADDR   0x90000000
+/* IIC pheriphery is IIC_EEPROM */
+#define XILINX_IIC_0_BASEADDR  0x40800000
+#define XILINX_IIC_0_FREQ      100000
+#define XILINX_IIC_0_BIT       0
+
+/* GPIO is LEDs_4Bit*/
+#define XILINX_GPIO_BASEADDR   0x40000000
 
-/* Flash Memory is opb_emc_0 */
-#define XILINX_FLASH_START     0x28000000
+/* Flash Memory is FLASH_2Mx32 */
+#define XILINX_FLASH_START     0x2c000000
 #define XILINX_FLASH_SIZE      0x00800000
 
-/* Main Memory is plb_ddr_0 */
-#define XILINX_RAM_START       0x10000000
-#define XILINX_RAM_SIZE        0x10000000
+/* Main Memory is DDR_SDRAM_64Mx32 */
+#define XILINX_RAM_START       0x28000000
+#define XILINX_RAM_SIZE        0x04000000
 
-/* Sysace Controller is opb_sysace_0 */
-#define XILINX_SYSACE_BASEADDR 0xCF000000
-#define XILINX_SYSACE_HIGHADDR 0xCF0001FF
+/* Sysace Controller is SysACE_CompactFlash */
+#define XILINX_SYSACE_BASEADDR 0x41800000
+#define XILINX_SYSACE_HIGHADDR 0x4180ffff
 #define XILINX_SYSACE_MEM_WIDTH        16
 
-/* Ethernet controller is opb_ethernet_0 */
+/* Ethernet controller is Ethernet_MAC */
 #define XPAR_XEMAC_NUM_INSTANCES       1
 #define XPAR_OPB_ETHERNET_0_DEVICE_ID  0
-#define XPAR_OPB_ETHERNET_0_BASEADDR   0x60000000
-#define XPAR_OPB_ETHERNET_0_HIGHADDR   0x60003FFF
+#define XPAR_OPB_ETHERNET_0_BASEADDR   0x40c00000
+#define XPAR_OPB_ETHERNET_0_HIGHADDR   0x40c0ffff
 #define XPAR_OPB_ETHERNET_0_DMA_PRESENT        1
 #define XPAR_OPB_ETHERNET_0_ERR_COUNT_EXIST    1
 #define XPAR_OPB_ETHERNET_0_MII_EXIST  1
index 74a6af204e535de7580eeee46227b641f6d1f05e..bc1f7145056ef618e783a6f955b15922a2af9468 100644 (file)
@@ -45,12 +45,12 @@ COBJS       = main.o ACEX1K.o altera.o bedbug.o circbuf.o cmd_autoscript.o \
          env_nand.o env_dataflash.o env_flash.o env_eeprom.o \
          env_nvram.o env_nowhere.o \
          exports.o \
-         flash.o fpga.o ft_build.o \
+         fdt_support.o flash.o fpga.o ft_build.o \
          hush.o kgdb.o lcd.o lists.o lynxkdi.o \
          memsize.o miiphybb.o miiphyutil.o \
          s_record.o serial.o soft_i2c.o soft_spi.o spartan2.o spartan3.o \
          usb.o usb_kbd.o usb_storage.o \
-         virtex2.o xilinx.o crc16.o xyzModem.o cmd_mac.o
+         virtex2.o xilinx.o crc16.o xyzModem.o cmd_mac.o cmd_mfsl.o
 
 SRCS   := $(AOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(AOBJS) $(COBJS))
index 2721216bf35eba2418efa60874703c7214eb3e05..a6499e8dd9bc3fc853606567c847d0a064f02e55 100644 (file)
@@ -37,6 +37,7 @@
 #if defined(CONFIG_OF_LIBFDT)
 #include <fdt.h>
 #include <libfdt.h>
+#include <fdt_support.h>
 #endif
 #if defined(CONFIG_OF_FLAT_TREE)
 #include <ft_build.h>
@@ -748,7 +749,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
                of_flat_tree = (char *) simple_strtoul(argv[3], NULL, 16);
                hdr = (image_header_t *)of_flat_tree;
 #if defined(CONFIG_OF_LIBFDT)
-               if (be32_to_cpu(fdt_magic(of_flat_tree)) == FDT_MAGIC) {
+               if (fdt_check_header(of_flat_tree) == 0) {
 #else
                if (*(ulong *)of_flat_tree == OF_DT_HEADER) {
 #endif
@@ -778,9 +779,8 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
 
                        checksum = ntohl(hdr->ih_dcrc);
                        addr = (ulong)((uchar *)(hdr) + sizeof(image_header_t));
-                       len = ntohl(hdr->ih_size);
 
-                       if(checksum != crc32(0, (uchar *)addr, len)) {
+                       if(checksum != crc32(0, (uchar *)addr, ntohl(hdr->ih_size))) {
                                printf("ERROR: Flat Device Tree checksum is invalid\n");
                                return;
                        }
@@ -795,7 +795,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
                                return;
                        }
 #if defined(CONFIG_OF_LIBFDT)
-                       if (be32_to_cpu(fdt_magic(of_flat_tree + sizeof(image_header_t))) != FDT_MAGIC) {
+                       if (fdt_check_header(of_flat_tree + sizeof(image_header_t)) == 0) {
 #else
                        if (*((ulong *)(of_flat_tree + sizeof(image_header_t))) != OF_DT_HEADER) {
 #endif
@@ -836,7 +836,7 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
                }
 
 #if defined(CONFIG_OF_LIBFDT)
-               if (be32_to_cpu(fdt_magic(of_data)) != FDT_MAGIC) {
+               if (fdt_check_header((void *)of_data) != 0) {
 #else
                if (((struct boot_param_header *)of_data)->magic != OF_DT_HEADER) {
 #endif
@@ -937,23 +937,44 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
        if (of_data) {
                int err;
                ulong of_start, of_len;
+
                of_len = be32_to_cpu(fdt_totalsize(of_data));
-               /* provide extra 8k pad */
+               /* position on a 4K boundary before the initrd/kbd */
                if (initrd_start)
-                       of_start = initrd_start - of_len - 8192;
+                       of_start = initrd_start - of_len;
                else
-                       of_start  = (ulong)kbd - of_len - 8192;
+                       of_start  = (ulong)kbd - of_len;
                of_start &= ~(4096 - 1);        /* align on page */
                debug ("## device tree at 0x%08lX ... 0x%08lX (len=%ld=0x%lX)\n",
                        of_data, of_data + of_len - 1, of_len, of_len);
 
-
+               of_flat_tree = (char *)of_start;
                printf ("   Loading Device Tree to %08lx, end %08lx ... ",
                        of_start, of_start + of_len - 1);
-               err = fdt_open_into(of_start, of_data, of_len);
+               err = fdt_open_into((void *)of_start, (void *)of_data, of_len);
                if (err != 0) {
-                       printf ("libfdt: %s\n", fdt_strerror(err));
+                       printf ("libfdt: %s " __FILE__ " %d\n", fdt_strerror(err), __LINE__);
                }
+               /*
+                * Add the chosen node if it doesn't exist, add the env and bd_t
+                * if the user wants it (the logic is in the subroutines).
+                */
+               if (fdt_chosen(of_flat_tree, initrd_start, initrd_end, 0) < 0) {
+                               printf("Failed creating the /chosen node (0x%08X), aborting.\n", of_flat_tree);
+                               return;
+               }
+#ifdef CONFIG_OF_HAS_UBOOT_ENV
+               if (fdt_env(of_flat_tree) < 0) {
+                               printf("Failed creating the /u-boot-env node, aborting.\n");
+                               return;
+               }
+#endif
+#ifdef CONFIG_OF_HAS_BD_T
+               if (fdt_bd_t(of_flat_tree) < 0) {
+                               printf("Failed creating the /bd_t node, aborting.\n");
+                               return;
+               }
+#endif
        }
 #endif
 #if defined(CONFIG_OF_FLAT_TREE)
@@ -1004,6 +1025,24 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,
        ft_setup(of_flat_tree, kbd, initrd_start, initrd_end);
        /* ft_dump_blob(of_flat_tree); */
 #endif
+#if defined(CONFIG_OF_LIBFDT)
+       if (fdt_chosen(of_flat_tree, initrd_start, initrd_end, 0) < 0) {
+               printf("Failed creating the /chosen node (0x%08X), aborting.\n", of_flat_tree);
+               return;
+       }
+#ifdef CONFIG_OF_HAS_UBOOT_ENV
+       if (fdt_env(of_flat_tree) < 0) {
+               printf("Failed creating the /u-boot-env node, aborting.\n");
+               return;
+       }
+#endif
+#ifdef CONFIG_OF_HAS_BD_T
+       if (fdt_bd_t(of_flat_tree) < 0) {
+               printf("Failed creating the /bd_t node, aborting.\n");
+               return;
+       }
+#endif
+#endif /* if defined(CONFIG_OF_LIBFDT) */
 
        (*kernel) ((bd_t *)of_flat_tree, (ulong)kernel, 0, 0, 0);
 #endif
index 968bade626d6be43640e84460fe68acdf4f157b5..08fe3512d4fe6ff8f3a95c328413c4f352d8f4ae 100644 (file)
 #include <linux/types.h>
 
 #ifdef CONFIG_OF_LIBFDT
+
 #include <asm/global_data.h>
 #include <fdt.h>
 #include <libfdt.h>
+#include <fdt_support.h>
 
 #define MAX_LEVEL      32              /* how deeply nested we will go */
 #define SCRATCHPAD     1024    /* bytes of scratchpad memory */
@@ -53,9 +55,6 @@ static char data[SCRATCHPAD];
  */
 static int fdt_valid(void);
 static void print_data(const void *data, int len);
-static int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end);
-static int fdt_env(void *fdt);
-static int fdt_bd_t(void *fdt);
 
 
 /*
@@ -437,7 +436,7 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
         * Create a chosen node
         ********************************************************************/
        } else if (op == 'c') {
-               fdt_chosen(fdt, 0, 0);
+               fdt_chosen(fdt, 0, 0, 1);
 
        /********************************************************************
         * Create a u-boot-env node
@@ -466,25 +465,36 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 
 static int fdt_valid(void)
 {
+       int  err;
+
        if (fdt == NULL) {
-               printf ("The address of the fdt is invalid.\n");
-               return 0;
-       }
-       if (!fdt || (fdt_magic(fdt) != FDT_MAGIC)) {
-               fdt = NULL;
-               printf ("Unrecognized fdt: bad magic\n");
-               return 0;
-       }
-       if (fdt_version(fdt) < FDT_FIRST_SUPPORTED_VERSION) {
-               printf ("Unsupported fdt version: $d < %d\n",
-                       FDT_FIRST_SUPPORTED_VERSION, fdt_version(fdt));
-               fdt = NULL;
+               printf ("The address of the fdt is invalid (NULL).\n");
                return 0;
        }
-       if (fdt_last_comp_version(fdt) > FDT_LAST_SUPPORTED_VERSION) {
-               printf ("Unsupported fdt version: $d > %d\n",
-                       fdt_version(fdt), FDT_LAST_SUPPORTED_VERSION);
-               fdt = NULL;
+
+       err = fdt_check_header(fdt);
+       if (err == 0)
+               return 1;       /* valid */
+
+       if (err < 0) {
+               printf("libfdt: %s", fdt_strerror(err));
+               /*
+                * Be more informative on bad version.
+                */
+               if (err == -FDT_ERR_BADVERSION) {
+                       if (fdt_version(fdt) < FDT_FIRST_SUPPORTED_VERSION) {
+                               printf (" - too old, fdt $d < %d",
+                                       fdt_version(fdt), FDT_FIRST_SUPPORTED_VERSION);
+                               fdt = NULL;
+                       }
+                       if (fdt_last_comp_version(fdt) > FDT_LAST_SUPPORTED_VERSION) {
+                               printf (" - too new, fdt $d > %d",
+                                       fdt_version(fdt), FDT_LAST_SUPPORTED_VERSION);
+                               fdt = NULL;
+                       }
+                       return 0;
+               }
+               printf("\n");
                return 0;
        }
        return 1;
@@ -593,255 +603,6 @@ static void print_data(const void *data, int len)
 
 /********************************************************************/
 
-static int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end)
-{
-       bd_t *bd = gd->bd;
-       int   nodeoffset;
-       int   err;
-       u32   tmp;                      /* used to set 32 bit integer properties */
-       char  *str;                     /* used to set string properties */
-       ulong clock;
-
-       if (initrd_start && initrd_end) {
-               err = fdt_add_reservemap_entry(fdt,
-                       initrd_start, initrd_end - initrd_start + 1);
-               if (err < 0) {
-                       printf("libfdt: %s\n", fdt_strerror(err));
-                       return err;
-               }
-       }
-
-       /*
-        * See if we already have a "chosen" node, create it if not.
-        */
-       nodeoffset = fdt_path_offset (fdt, "/chosen");
-       if (nodeoffset < 0) {
-               /*
-                * Create a new node "/chosen" (offset 0 is root level)
-                */
-               nodeoffset = fdt_add_subnode(fdt, 0, "chosen");
-               if (nodeoffset < 0) {
-                       printf("libfdt: %s\n", fdt_strerror(nodeoffset));
-                       return nodeoffset;
-               }
-       }
-
-       str = getenv("bootargs");
-       if (str != NULL) {
-               err = fdt_setprop(fdt, nodeoffset, "bootargs", str, strlen(str)+1);
-               if (err < 0)
-                       printf("libfdt: %s\n", fdt_strerror(err));
-       }
-       if (initrd_start && initrd_end) {
-               tmp = __cpu_to_be32(initrd_start);
-               err = fdt_setprop(fdt, nodeoffset, "linux,initrd-start", &tmp, sizeof(tmp));
-               if (err < 0)
-                       printf("libfdt: %s\n", fdt_strerror(err));
-               tmp = __cpu_to_be32(initrd_end);
-               err = fdt_setprop(fdt, nodeoffset, "linux,initrd-end", &tmp, sizeof(tmp));
-               if (err < 0)
-                       printf("libfdt: %s\n", fdt_strerror(err));
-       }
-#ifdef OF_STDOUT_PATH
-       err = fdt_setprop(fdt, nodeoffset, "linux,stdout-path", OF_STDOUT_PATH, strlen(OF_STDOUT_PATH)+1);
-       if (err < 0)
-               printf("libfdt: %s\n", fdt_strerror(err));
-#endif
-
-       nodeoffset = fdt_path_offset (fdt, "/cpus");
-       if (nodeoffset >= 0) {
-               clock = cpu_to_be32(bd->bi_intfreq);
-               err = fdt_setprop(fdt, nodeoffset, "clock-frequency", &clock, 4);
-               if (err < 0)
-                       printf("libfdt: %s\n", fdt_strerror(err));
-       }
-#ifdef OF_TBCLK
-       nodeoffset = fdt_path_offset (fdt, "/cpus/" OF_CPU "/timebase-frequency");
-       if (nodeoffset >= 0) {
-               clock = cpu_to_be32(OF_TBCLK);
-               err = fdt_setprop(fdt, nodeoffset, "clock-frequency", &clock, 4);
-               if (err < 0)
-                       printf("libfdt: %s\n", fdt_strerror(err));
-       }
-#endif
-}
-
-/********************************************************************/
-
-#ifdef CONFIG_OF_HAS_BD_T
-
-/* Function that returns a character from the environment */
-extern uchar(*env_get_char) (int);
-
-#define BDM(x) {       .name = #x, .offset = offsetof(bd_t, bi_ ##x ) }
-
-static const struct {
-       const char *name;
-       int offset;
-} bd_map[] = {
-       BDM(memstart),
-       BDM(memsize),
-       BDM(flashstart),
-       BDM(flashsize),
-       BDM(flashoffset),
-       BDM(sramstart),
-       BDM(sramsize),
-#if defined(CONFIG_5xx) || defined(CONFIG_8xx) || defined(CONFIG_8260) \
-       || defined(CONFIG_E500)
-       BDM(immr_base),
-#endif
-#if defined(CONFIG_MPC5xxx)
-       BDM(mbar_base),
-#endif
-#if defined(CONFIG_MPC83XX)
-       BDM(immrbar),
-#endif
-#if defined(CONFIG_MPC8220)
-       BDM(mbar_base),
-       BDM(inpfreq),
-       BDM(pcifreq),
-       BDM(pevfreq),
-       BDM(flbfreq),
-       BDM(vcofreq),
-#endif
-       BDM(bootflags),
-       BDM(ip_addr),
-       BDM(intfreq),
-       BDM(busfreq),
-#ifdef CONFIG_CPM2
-       BDM(cpmfreq),
-       BDM(brgfreq),
-       BDM(sccfreq),
-       BDM(vco),
-#endif
-#if defined(CONFIG_MPC5xxx)
-       BDM(ipbfreq),
-       BDM(pcifreq),
-#endif
-       BDM(baudrate),
-};
-
-static int fdt_env(void *fdt)
-{
-       int   nodeoffset;
-       int   err;
-       int   k, nxt;
-       int i;
-       static char tmpenv[256];
-
-       /*
-        * See if we already have a "u-boot-env" node, delete it if so.
-        * Then create a new empty node.
-        */
-       nodeoffset = fdt_path_offset (fdt, "/u-boot-env");
-       if (nodeoffset >= 0) {
-               err = fdt_del_node(fdt, nodeoffset);
-               if (err < 0) {
-                       printf("libfdt: %s\n", fdt_strerror(err));
-                       return err;
-               }
-       }
-       /*
-        * Create a new node "/u-boot-env" (offset 0 is root level)
-        */
-       nodeoffset = fdt_add_subnode(fdt, 0, "u-boot-env");
-       if (nodeoffset < 0) {
-               printf("libfdt: %s\n", fdt_strerror(nodeoffset));
-               return nodeoffset;
-       }
-
-       for (i = 0; env_get_char(i) != '\0'; i = nxt + 1) {
-               char *s, *lval, *rval;
-
-               /*
-                * Find the end of the name=definition
-                */
-               for (nxt = i; env_get_char(nxt) != '\0'; ++nxt)
-                       ;
-               s = tmpenv;
-               for (k = i; k < nxt && s < &tmpenv[sizeof(tmpenv) - 1]; ++k)
-                       *s++ = env_get_char(k);
-               *s++ = '\0';
-               lval = tmpenv;
-               /*
-                * Find the first '=': it separates the name from the value
-                */
-               s = strchr(tmpenv, '=');
-               if (s != NULL) {
-                       *s++ = '\0';
-                       rval = s;
-               } else
-                       continue;
-               err = fdt_setprop(fdt, nodeoffset, lval, rval, strlen(rval)+1);
-               if (err < 0) {
-                       printf("\"%s\" - libfdt: %s\n", lval, fdt_strerror(err));
-                       return err;
-               }
-       }
-       return 0;
-}
-#endif /* CONFIG_OF_HAS_UBOOT_ENV */
-
-/********************************************************************/
-
-#ifdef CONFIG_OF_HAS_BD_T
-static int fdt_bd_t(void *fdt)
-{
-       bd_t *bd = gd->bd;
-       int   nodeoffset;
-       int   err;
-       u32   tmp;                      /* used to set 32 bit integer properties */
-       int i;
-
-       /*
-        * See if we already have a "bd_t" node, delete it if so.
-        * Then create a new empty node.
-        */
-       nodeoffset = fdt_path_offset (fdt, "/bd_t");
-       if (nodeoffset >= 0) {
-               err = fdt_del_node(fdt, nodeoffset);
-               if (err < 0) {
-                       printf("libfdt: %s\n", fdt_strerror(err));
-                       return err;
-               }
-       }
-       /*
-        * Create a new node "/bd_t" (offset 0 is root level)
-        */
-       nodeoffset = fdt_add_subnode(fdt, 0, "bd_t");
-       if (nodeoffset < 0) {
-               printf("libfdt: %s\n", fdt_strerror(nodeoffset));
-               return nodeoffset;
-       }
-       /*
-        * Use the string/pointer structure to create the entries...
-        */
-       for (i = 0; i < sizeof(bd_map)/sizeof(bd_map[0]); i++) {
-               tmp = cpu_to_be32(getenv("bootargs"));
-               err = fdt_setprop(fdt, nodeoffset, bd_map[i].name, &tmp, sizeof(tmp));
-               if (err < 0)
-                       printf("libfdt: %s\n", fdt_strerror(err));
-       }
-       /*
-        * Add a couple of oddball entries...
-        */
-       err = fdt_setprop(fdt, nodeoffset, "enetaddr", &bd->bi_enetaddr, 6);
-       if (err < 0)
-               printf("libfdt: %s\n", fdt_strerror(err));
-       err = fdt_setprop(fdt, nodeoffset, "ethspeed", &bd->bi_ethspeed, 4);
-       if (err < 0)
-               printf("libfdt: %s\n", fdt_strerror(err));
-
-#ifdef CONFIG_OF_BOARD_SETUP
-       ft_board_setup(fdt, bd);
-#endif
-
-       return 0;
-}
-#endif /* CONFIG_OF_HAS_BD_T */
-
-/********************************************************************/
-
 U_BOOT_CMD(
        fdt,    5,      0,      do_fdt,
        "fdt     - flattened device tree utility commands\n",
@@ -871,4 +632,4 @@ U_BOOT_CMD(
        "          fdt set   /cpus \"#address-cells\" \"[00 00 00 01]\"\n"
 );
 
-#endif /* CONFIG_OF_FLAT_TREE */
+#endif /* CONFIG_OF_LIBFDT */
diff --git a/common/cmd_mfsl.c b/common/cmd_mfsl.c
new file mode 100644 (file)
index 0000000..ffa2666
--- /dev/null
@@ -0,0 +1,417 @@
+/*
+ * (C) Copyright 2007 Michal Simek
+ *
+ * Michal  SIMEK <monstr@monstr.eu>
+ *
+ * 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
+ */
+
+/*
+ * Microblaze FSL support
+ */
+
+#include <common.h>
+#include <config.h>
+#include <command.h>
+
+#if (CONFIG_COMMANDS & CFG_CMD_MFSL)
+#include <asm/asm.h>
+
+int do_frd (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned int fslnum;
+       unsigned int num;
+       unsigned int blocking;
+
+       if (argc < 2) {
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+
+       fslnum = (unsigned int)simple_strtoul (argv[1], NULL, 16);
+       blocking = (unsigned int)simple_strtoul (argv[2], NULL, 16);
+       if (fslnum < 0 || fslnum >= XILINX_FSL_NUMBER) {
+               puts ("Bad number of FSL\n");
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+
+       switch (fslnum) {
+#if (XILINX_FSL_NUMBER > 0)
+       case 0:
+               switch (blocking) {
+               case 0: NGET (num, 0);
+                       break;
+               case 1: NCGET (num, 0);
+                       break;
+               case 2: GET (num, 0);
+                       break;
+               case 3: CGET (num, 0);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 1)
+       case 1:
+               switch (blocking) {
+               case 0: NGET (num, 1);
+                       break;
+               case 1: NCGET (num, 1);
+                       break;
+               case 2: GET (num, 1);
+                       break;
+               case 3: CGET (num, 1);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 2)
+       case 2:
+               switch (blocking) {
+               case 0: NGET (num, 2);
+                       break;
+               case 1: NCGET (num, 2);
+                       break;
+               case 2: GET (num, 2);
+                       break;
+               case 3: CGET (num, 2);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 3)
+       case 3:
+               switch (blocking) {
+               case 0: NGET (num, 3);
+                       break;
+               case 1: NCGET (num, 3);
+                       break;
+               case 2: GET (num, 3);
+                       break;
+               case 3: CGET (num, 3);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 4)
+       case 4:
+               switch (blocking) {
+               case 0: NGET (num, 4);
+                       break;
+               case 1: NCGET (num, 4);
+                       break;
+               case 2: GET (num, 4);
+                       break;
+               case 3: CGET (num, 4);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 5)
+       case 5:
+               switch (blocking) {
+               case 0: NGET (num, 5);
+                       break;
+               case 1: NCGET (num, 5);
+                       break;
+               case 2: GET (num, 5);
+                       break;
+               case 3: CGET (num, 5);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 6)
+       case 6:
+               switch (blocking) {
+               case 0: NGET (num, 6);
+                       break;
+               case 1: NCGET (num, 6);
+                       break;
+               case 2: GET (num, 6);
+                       break;
+               case 3: CGET (num, 6);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 7)
+       case 7:
+               switch (blocking) {
+               case 0: NGET (num, 7);
+                       break;
+               case 1: NCGET (num, 7);
+                       break;
+               case 2: GET (num, 7);
+                       break;
+               case 3: CGET (num, 7);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+       default:
+               return 1;
+       }
+
+       printf ("%01x: 0x%08lx - %s %s read\n", fslnum, num,
+               blocking < 2  ? "non blocking" : "blocking",
+               ((blocking == 1) || (blocking == 3)) ? "control" : "data" );
+       return 0;
+}
+
+int do_fwr (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned int fslnum;
+       unsigned int num;
+       unsigned int blocking;
+
+       if (argc < 3) {
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+
+       fslnum = (unsigned int)simple_strtoul (argv[1], NULL, 16);
+       num = (unsigned int)simple_strtoul (argv[2], NULL, 16);
+       blocking = (unsigned int)simple_strtoul (argv[3], NULL, 16);
+       if (fslnum < 0 || fslnum >= XILINX_FSL_NUMBER) {
+               printf ("Bad number of FSL\nUsage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+
+       switch (fslnum) {
+#if (XILINX_FSL_NUMBER > 0)
+       case 0:
+               switch (blocking) {
+               case 0: NPUT (num, 0);
+                       break;
+               case 1: NCPUT (num, 0);
+                       break;
+               case 2: PUT (num, 0);
+                       break;
+               case 3: CPUT (num, 0);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 1)
+       case 1:
+               switch (blocking) {
+               case 0: NPUT (num, 1);
+                       break;
+               case 1: NCPUT (num, 1);
+                       break;
+               case 2: PUT (num, 1);
+                       break;
+               case 3: CPUT (num, 1);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 2)
+       case 2:
+               switch (blocking) {
+               case 0: NPUT (num, 2);
+                       break;
+               case 1: NCPUT (num, 2);
+                       break;
+               case 2: PUT (num, 2);
+                       break;
+               case 3: CPUT (num, 2);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 3)
+       case 3:
+               switch (blocking) {
+               case 0: NPUT (num, 3);
+                       break;
+               case 1: NCPUT (num, 3);
+                       break;
+               case 2: PUT (num, 3);
+                       break;
+               case 3: CPUT (num, 3);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 4)
+       case 4:
+               switch (blocking) {
+               case 0: NPUT (num, 4);
+                       break;
+               case 1: NCPUT (num, 4);
+                       break;
+               case 2: PUT (num, 4);
+                       break;
+               case 3: CPUT (num, 4);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 5)
+       case 5:
+               switch (blocking) {
+               case 0: NPUT (num, 5);
+                       break;
+               case 1: NCPUT (num, 5);
+                       break;
+               case 2: PUT (num, 5);
+                       break;
+               case 3: CPUT (num, 5);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 6)
+       case 6:
+               switch (blocking) {
+               case 0: NPUT (num, 6);
+                       break;
+               case 1: NCPUT (num, 6);
+                       break;
+               case 2: PUT (num, 6);
+                       break;
+               case 3: CPUT (num, 6);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+#if (XILINX_FSL_NUMBER > 7)
+       case 7:
+               switch (blocking) {
+               case 0: NPUT (num, 7);
+                       break;
+               case 1: NCPUT (num, 7);
+                       break;
+               case 2: PUT (num, 7);
+                       break;
+               case 3: CPUT (num, 7);
+                       break;
+               default:
+                       return 2;
+               }
+               break;
+#endif
+       default:
+               return 1;
+       }
+
+       printf ("%01x: 0x%08lx - %s %s write\n", fslnum, num,
+               blocking < 2  ? "non blocking" : "blocking",
+               ((blocking == 1) || (blocking == 3)) ? "control" : "data" );
+       return 0;
+
+}
+
+int do_rspr (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+       unsigned int reg = 0;
+       unsigned int val = 0;
+
+       reg = (unsigned int)simple_strtoul (argv[1], NULL, 16);
+       val = (unsigned int)simple_strtoul (argv[2], NULL, 16);
+       if (argc < 1) {
+               printf ("Usage:\n%s\n", cmdtp->usage);
+               return 1;
+       }
+       switch (reg) {
+       case 0x1:
+               if (argc > 2) {
+                       MTS (val, rmsr);
+                       NOP;
+                       MFS (val, rmsr);
+
+               } else {
+                       MFS (val, rmsr);
+               }
+               puts ("MSR");
+               break;
+       case 0x3:
+               MFS (val, rear);
+               puts ("EAR");
+               break;
+       case 0x5:
+               MFS (val, resr);
+               puts ("ESR");
+               break;
+       default:
+               return 1;
+       }
+       printf (": 0x%08lx\n", val);
+       return 0;
+}
+
+/***************************************************/
+
+U_BOOT_CMD (frd, 3, 1, do_frd,
+               "frd     - read data from FSL\n",
+               "- [fslnum [0|1|2|3]]\n"
+               " 0 - non blocking data read\n"
+               " 1 - non blocking control read\n"
+               " 2 - blocking data read\n"
+               " 3 - blocking control read\n");
+
+
+U_BOOT_CMD (fwr, 4, 1, do_fwr,
+               "fwr     - write data to FSL\n",
+               "- [fslnum [0|1|2|3]]\n"
+               " 0 - non blocking data write\n"
+               " 1 - non blocking control write\n"
+               " 2 - blocking data write\n"
+               " 3 - blocking control write\n");
+
+U_BOOT_CMD (rspr, 3, 1, do_rspr,
+               "rmsr    - read/write special purpose register\n",
+               "- reg_num [write value] read/write special purpose register\n"
+               " 0 - MSR - Machine status register\n"
+               " 1 - EAR - Exception address register\n"
+               " 2 - ESR - Exception status register\n");
+
+#endif                         /* CONFIG_MICROBLAZE & CFG_CMD_MFSL */
index 9834ba65b7daa687d60128544a95dbb4136a1c3d..977ec5bae96153c390b37867546e6d5cb7b1c796 100644 (file)
@@ -391,7 +391,10 @@ int _do_setenv (int flag, int argc, char *argv[])
 void setenv (char *varname, char *varvalue)
 {
        char *argv[4] = { "setenv", varname, varvalue, NULL };
-       _do_setenv (0, 3, argv);
+       if (varvalue == NULL)
+               _do_setenv (0, 2, argv);
+       else
+               _do_setenv (0, 3, argv);
 }
 
 int do_setenv ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
index e9f23bec1820f178e3f4a67e3241182a0c65dc9d..d8a0cb6c7e8a1d43e43ad066514e23a72f88327e 100644 (file)
@@ -494,13 +494,7 @@ int console_init_r (void)
        /* suppress all output if splash screen is enabled and we have
           a bmp to display                                            */
        if (getenv("splashimage") != NULL)
-               outputdev = search_device (DEV_FLAGS_OUTPUT, "nulldev");
-#endif
-
-#ifdef CONFIG_SILENT_CONSOLE
-       /* Suppress all output if "silent" mode requested               */
-       if (gd->flags & GD_FLG_SILENT)
-               outputdev = search_device (DEV_FLAGS_OUTPUT, "nulldev");
+               gd->flags |= GD_FLG_SILENT;
 #endif
 
        /* Scan devices looking for input and output devices */
diff --git a/common/fdt_support.c b/common/fdt_support.c
new file mode 100644 (file)
index 0000000..69099c4
--- /dev/null
@@ -0,0 +1,347 @@
+/*
+ * (C) Copyright 2007
+ * Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <linux/ctype.h>
+#include <linux/types.h>
+
+#ifdef CONFIG_OF_LIBFDT
+
+#include <asm/global_data.h>
+#include <fdt.h>
+#include <libfdt.h>
+#include <fdt_support.h>
+
+/*
+ * Global data (for the gd->bd)
+ */
+DECLARE_GLOBAL_DATA_PTR;
+
+
+/********************************************************************/
+
+int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end, int force)
+{
+       bd_t *bd = gd->bd;
+       int   nodeoffset;
+       int   err;
+       u32   tmp;                      /* used to set 32 bit integer properties */
+       char  *str;                     /* used to set string properties */
+       ulong clock;
+
+       err = fdt_check_header(fdt);
+       if (err < 0) {
+               printf("libfdt: %s\n", fdt_strerror(err));
+               return err;
+       }
+
+       if (initrd_start && initrd_end) {
+               struct fdt_reserve_entry re;
+               int  used;
+               int  total;
+               int  j;
+
+               err = fdt_num_reservemap(fdt, &used, &total);
+               if (err < 0) {
+                       printf("libfdt: %s\n", fdt_strerror(err));
+                       return err;
+               }
+               if (used >= total) {
+                       printf("fdt_chosen: no room in the reserved map (%d of %d)\n",
+                               used, total);
+                       return -1;
+               }
+               /*
+                * Look for an existing entry and update it.  If we don't find
+                * the entry, we will j be the next available slot.
+                */
+               for (j = 0; j < used; j++) {
+                       err = fdt_get_reservemap(fdt, j, &re);
+                       if (re.address == initrd_start) {
+                               break;
+                       }
+               }
+               err = fdt_replace_reservemap_entry(fdt, j,
+                       initrd_start, initrd_end - initrd_start + 1);
+               if (err < 0) {
+                       printf("libfdt: %s\n", fdt_strerror(err));
+                       return err;
+               }
+       }
+
+       /*
+        * Find the "chosen" node.
+        */
+       nodeoffset = fdt_path_offset (fdt, "/chosen");
+
+       /*
+        * If we have a "chosen" node already the "force the writing"
+        * is not set, our job is done.
+        */
+       if ((nodeoffset >= 0) && !force)
+               return 0;
+
+       /*
+        * No "chosen" node in the blob: create it.
+        */
+       if (nodeoffset < 0) {
+               /*
+                * Create a new node "/chosen" (offset 0 is root level)
+                */
+               nodeoffset = fdt_add_subnode(fdt, 0, "chosen");
+               if (nodeoffset < 0) {
+                       printf("libfdt: %s\n", fdt_strerror(nodeoffset));
+                       return nodeoffset;
+               }
+       }
+
+       /*
+        * Update pre-existing properties, create them if non-existant.
+        */
+       str = getenv("bootargs");
+       if (str != NULL) {
+               err = fdt_setprop(fdt, nodeoffset, "bootargs", str, strlen(str)+1);
+               if (err < 0)
+                       printf("libfdt: %s\n", fdt_strerror(err));
+       }
+       if (initrd_start && initrd_end) {
+               tmp = __cpu_to_be32(initrd_start);
+               err = fdt_setprop(fdt, nodeoffset, "linux,initrd-start", &tmp, sizeof(tmp));
+               if (err < 0)
+                       printf("libfdt: %s\n", fdt_strerror(err));
+               tmp = __cpu_to_be32(initrd_end);
+               err = fdt_setprop(fdt, nodeoffset, "linux,initrd-end", &tmp, sizeof(tmp));
+               if (err < 0)
+                       printf("libfdt: %s\n", fdt_strerror(err));
+       }
+#ifdef OF_STDOUT_PATH
+       err = fdt_setprop(fdt, nodeoffset, "linux,stdout-path", OF_STDOUT_PATH, strlen(OF_STDOUT_PATH)+1);
+       if (err < 0)
+               printf("libfdt: %s\n", fdt_strerror(err));
+#endif
+
+       nodeoffset = fdt_path_offset (fdt, "/cpus");
+       if (nodeoffset >= 0) {
+               clock = cpu_to_be32(bd->bi_intfreq);
+               err = fdt_setprop(fdt, nodeoffset, "clock-frequency", &clock, 4);
+               if (err < 0)
+                       printf("libfdt: %s\n", fdt_strerror(err));
+       }
+#ifdef OF_TBCLK
+       nodeoffset = fdt_path_offset (fdt, "/cpus/" OF_CPU "/timebase-frequency");
+       if (nodeoffset >= 0) {
+               clock = cpu_to_be32(OF_TBCLK);
+               err = fdt_setprop(fdt, nodeoffset, "clock-frequency", &clock, 4);
+               if (err < 0)
+                       printf("libfdt: %s\n", fdt_strerror(err));
+       }
+#endif
+       return err;
+}
+
+/********************************************************************/
+
+#ifdef CONFIG_OF_HAS_UBOOT_ENV
+
+/* Function that returns a character from the environment */
+extern uchar(*env_get_char) (int);
+
+
+int fdt_env(void *fdt)
+{
+       int   nodeoffset;
+       int   err;
+       int   k, nxt;
+       int i;
+       static char tmpenv[256];
+
+       err = fdt_check_header(fdt);
+       if (err < 0) {
+               printf("libfdt: %s\n", fdt_strerror(err));
+               return err;
+       }
+
+       /*
+        * See if we already have a "u-boot-env" node, delete it if so.
+        * Then create a new empty node.
+        */
+       nodeoffset = fdt_path_offset (fdt, "/u-boot-env");
+       if (nodeoffset >= 0) {
+               err = fdt_del_node(fdt, nodeoffset);
+               if (err < 0) {
+                       printf("libfdt: %s\n", fdt_strerror(err));
+                       return err;
+               }
+       }
+       /*
+        * Create a new node "/u-boot-env" (offset 0 is root level)
+        */
+       nodeoffset = fdt_add_subnode(fdt, 0, "u-boot-env");
+       if (nodeoffset < 0) {
+               printf("libfdt: %s\n", fdt_strerror(nodeoffset));
+               return nodeoffset;
+       }
+
+       for (i = 0; env_get_char(i) != '\0'; i = nxt + 1) {
+               char *s, *lval, *rval;
+
+               /*
+                * Find the end of the name=definition
+                */
+               for (nxt = i; env_get_char(nxt) != '\0'; ++nxt)
+                       ;
+               s = tmpenv;
+               for (k = i; k < nxt && s < &tmpenv[sizeof(tmpenv) - 1]; ++k)
+                       *s++ = env_get_char(k);
+               *s++ = '\0';
+               lval = tmpenv;
+               /*
+                * Find the first '=': it separates the name from the value
+                */
+               s = strchr(tmpenv, '=');
+               if (s != NULL) {
+                       *s++ = '\0';
+                       rval = s;
+               } else
+                       continue;
+               err = fdt_setprop(fdt, nodeoffset, lval, rval, strlen(rval)+1);
+               if (err < 0) {
+                       printf("libfdt: %s\n", fdt_strerror(err));
+                       return err;
+               }
+       }
+       return 0;
+}
+#endif /* ifdef CONFIG_OF_HAS_UBOOT_ENV */
+
+/********************************************************************/
+
+#ifdef CONFIG_OF_HAS_BD_T
+
+#define BDM(x) {       .name = #x, .offset = offsetof(bd_t, bi_ ##x ) }
+
+static const struct {
+       const char *name;
+       int offset;
+} bd_map[] = {
+       BDM(memstart),
+       BDM(memsize),
+       BDM(flashstart),
+       BDM(flashsize),
+       BDM(flashoffset),
+       BDM(sramstart),
+       BDM(sramsize),
+#if defined(CONFIG_5xx) || defined(CONFIG_8xx) || defined(CONFIG_8260) \
+       || defined(CONFIG_E500)
+       BDM(immr_base),
+#endif
+#if defined(CONFIG_MPC5xxx)
+       BDM(mbar_base),
+#endif
+#if defined(CONFIG_MPC83XX)
+       BDM(immrbar),
+#endif
+#if defined(CONFIG_MPC8220)
+       BDM(mbar_base),
+       BDM(inpfreq),
+       BDM(pcifreq),
+       BDM(pevfreq),
+       BDM(flbfreq),
+       BDM(vcofreq),
+#endif
+       BDM(bootflags),
+       BDM(ip_addr),
+       BDM(intfreq),
+       BDM(busfreq),
+#ifdef CONFIG_CPM2
+       BDM(cpmfreq),
+       BDM(brgfreq),
+       BDM(sccfreq),
+       BDM(vco),
+#endif
+#if defined(CONFIG_MPC5xxx)
+       BDM(ipbfreq),
+       BDM(pcifreq),
+#endif
+       BDM(baudrate),
+};
+
+
+int fdt_bd_t(void *fdt)
+{
+       bd_t *bd = gd->bd;
+       int   nodeoffset;
+       int   err;
+       u32   tmp;                      /* used to set 32 bit integer properties */
+       int i;
+
+       err = fdt_check_header(fdt);
+       if (err < 0) {
+               printf("libfdt: %s\n", fdt_strerror(err));
+               return err;
+       }
+
+       /*
+        * See if we already have a "bd_t" node, delete it if so.
+        * Then create a new empty node.
+        */
+       nodeoffset = fdt_path_offset (fdt, "/bd_t");
+       if (nodeoffset >= 0) {
+               err = fdt_del_node(fdt, nodeoffset);
+               if (err < 0) {
+                       printf("libfdt: %s\n", fdt_strerror(err));
+                       return err;
+               }
+       }
+       /*
+        * Create a new node "/bd_t" (offset 0 is root level)
+        */
+       nodeoffset = fdt_add_subnode(fdt, 0, "bd_t");
+       if (nodeoffset < 0) {
+               printf("libfdt: %s\n", fdt_strerror(nodeoffset));
+               return nodeoffset;
+       }
+       /*
+        * Use the string/pointer structure to create the entries...
+        */
+       for (i = 0; i < sizeof(bd_map)/sizeof(bd_map[0]); i++) {
+               tmp = cpu_to_be32(getenv("bootargs"));
+               err = fdt_setprop(fdt, nodeoffset, bd_map[i].name, &tmp, sizeof(tmp));
+               if (err < 0)
+                       printf("libfdt: %s\n", fdt_strerror(err));
+       }
+       /*
+        * Add a couple of oddball entries...
+        */
+       err = fdt_setprop(fdt, nodeoffset, "enetaddr", &bd->bi_enetaddr, 6);
+       if (err < 0)
+               printf("libfdt: %s\n", fdt_strerror(err));
+       err = fdt_setprop(fdt, nodeoffset, "ethspeed", &bd->bi_ethspeed, 4);
+       if (err < 0)
+               printf("libfdt: %s\n", fdt_strerror(err));
+
+       return 0;
+}
+#endif /* ifdef CONFIG_OF_HAS_BD_T */
+
+#endif /* CONFIG_OF_LIBFDT */
index cc4b50f615ab070c806773cfa57661f1dd889bbe..09ee64b81318f4e970a725a4b13b75ba3ea818ea 100644 (file)
@@ -112,14 +112,6 @@ static __inline__ int abortboot(int bootdelay)
        u_int presskey_max = 0;
        u_int i;
 
-#ifdef CONFIG_SILENT_CONSOLE
-       if (gd->flags & GD_FLG_SILENT) {
-               /* Restore serial console */
-               console_assign (stdout, "serial");
-               console_assign (stderr, "serial");
-       }
-#endif
-
 #  ifdef CONFIG_AUTOBOOT_PROMPT
        printf (CONFIG_AUTOBOOT_PROMPT, bootdelay);
 #  endif
@@ -199,14 +191,8 @@ static __inline__ int abortboot(int bootdelay)
 #  endif
 
 #ifdef CONFIG_SILENT_CONSOLE
-       if (abort) {
-               /* permanently enable normal console output */
-               gd->flags &= ~(GD_FLG_SILENT);
-       } else if (gd->flags & GD_FLG_SILENT) {
-               /* Restore silent console */
-               console_assign (stdout, "nulldev");
-               console_assign (stderr, "nulldev");
-       }
+       if (abort)
+               gd->flags &= ~GD_FLG_SILENT;
 #endif
 
        return abort;
@@ -222,14 +208,6 @@ static __inline__ int abortboot(int bootdelay)
 {
        int abort = 0;
 
-#ifdef CONFIG_SILENT_CONSOLE
-       if (gd->flags & GD_FLG_SILENT) {
-               /* Restore serial console */
-               console_assign (stdout, "serial");
-               console_assign (stderr, "serial");
-       }
-#endif
-
 #ifdef CONFIG_MENUPROMPT
        printf(CONFIG_MENUPROMPT, bootdelay);
 #else
@@ -245,7 +223,7 @@ static __inline__ int abortboot(int bootdelay)
                if (tstc()) {   /* we got a key press   */
                        (void) getc();  /* consume input        */
                        puts ("\b\b\b 0");
-                       abort = 1;      /* don't auto boot      */
+                       abort = 1;      /* don't auto boot      */
                }
        }
 #endif
@@ -275,14 +253,8 @@ static __inline__ int abortboot(int bootdelay)
        putc ('\n');
 
 #ifdef CONFIG_SILENT_CONSOLE
-       if (abort) {
-               /* permanently enable normal console output */
-               gd->flags &= ~(GD_FLG_SILENT);
-       } else if (gd->flags & GD_FLG_SILENT) {
-               /* Restore silent console */
-               console_assign (stdout, "nulldev");
-               console_assign (stderr, "nulldev");
-       }
+       if (abort)
+               gd->flags &= ~GD_FLG_SILENT;
 #endif
 
        return abort;
@@ -1219,6 +1191,8 @@ static void process_macros (const char *input, char *output)
 
        if (outputcnt)
                *output = 0;
+       else
+               *(output - 1) = 0;
 
 #ifdef DEBUG_PARSER
        printf ("[PROCESS_MACROS] OUTPUT len %d: \"%s\"\n",
index f4e5fc504b3479f214944e0de6a07b697d5fc191..9c8998b604e1404469574f420bc514ecffdf0555 100644 (file)
 #include <74xx_7xx.h>
 #include <asm/cache.h>
 
+#if defined(CONFIG_OF_FLAT_TREE)
+#include <ft_build.h>
+#endif
+
 #ifdef CONFIG_AMIGAONEG3SE
 #include "../board/MAI/AmigaOneG3SE/via686.h"
 #include "../board/MAI/AmigaOneG3SE/memio.h"
@@ -101,6 +105,10 @@ get_cpu_type(void)
                type = CPU_7457;
                break;
 
+       case 0x8003:
+               type = CPU_7447A;
+               break;
+
        case 0x8004:
                type = CPU_7448;
                break;
@@ -156,6 +164,10 @@ int checkcpu (void)
                str = "MPC7410";
                break;
 
+       case CPU_7447A:
+               str = "MPC7447A";
+               break;
+
        case CPU_7448:
                str = "MPC7448";
                break;
@@ -264,20 +276,19 @@ do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 /*
  * For the 7400 the TB clock runs at 1/4 the cpu bus speed.
  */
-#ifdef CONFIG_AMIGAONEG3SE
+#if defined(CONFIG_AMIGAONEG3SE) || defined(CFG_CONFIG_BUS_CLK)
 unsigned long get_tbclk(void)
 {
        return (gd->bus_clk / 4);
 }
-#else  /* ! CONFIG_AMIGAONEG3SE */
+#else  /* ! CONFIG_AMIGAONEG3SE and !CFG_CONFIG_BUS_CLK*/
 
 unsigned long get_tbclk (void)
 {
        return CFG_BUS_HZ / 4;
 }
-#endif /* CONFIG_AMIGAONEG3SE */
+#endif /* CONFIG_AMIGAONEG3SE or CFG_CONFIG_BUS_CLK*/
 /* ------------------------------------------------------------------------- */
-
 #if defined(CONFIG_WATCHDOG)
 #if !defined(CONFIG_PCIPPC2) && !defined(CONFIG_BAB7xx)
 void
@@ -289,3 +300,30 @@ watchdog_reset(void)
 #endif /* CONFIG_WATCHDOG */
 
 /* ------------------------------------------------------------------------- */
+
+#ifdef CONFIG_OF_FLAT_TREE
+void
+ft_cpu_setup (void *blob, bd_t *bd)
+{
+       u32 *p;
+       ulong clock;
+       int len;
+
+       clock = bd->bi_busfreq;
+
+       p = ft_get_prop (blob, "/cpus/" OF_CPU "/bus-frequency", &len);
+       if (p != NULL)
+               *p = cpu_to_be32 (clock);
+
+#if defined(CONFIG_TSI108_ETH)
+       p = ft_get_prop (blob, "/" OF_TSI "/ethernet@6200/address", &len);
+               memcpy (p, bd->bi_enetaddr, 6);
+#endif
+
+#if defined(CONFIG_HAS_ETH1)
+       p = ft_get_prop (blob, "/" OF_TSI "/ethernet@6600/address", &len);
+               memcpy (p, bd->bi_enet1addr, 6);
+#endif
+}
+#endif
+/* ------------------------------------------------------------------------- */
index e02a4cc21cbc4484b92764c64601b8b2e0ed33a4..1dd1b2cd8426017b92aa47e2e08dd983f77f1ee7 100644 (file)
@@ -43,6 +43,7 @@ cpu_init_f (void)
        case CPU_7450:
        case CPU_7455:
        case CPU_7457:
+       case CPU_7447A:
        case CPU_7448:
                /* enable the timebase bit in HID0 */
                set_hid0(get_hid0() | 0x4000000);
index d1800ede05653803f57eeafb152d3a83bbfb428f..d8c40cea01ccb7f4675570515492dcd0574d85c2 100644 (file)
@@ -31,6 +31,8 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
+extern unsigned long get_board_bus_clk (void);
+
 static const int hid1_multipliers_x_10[] = {
        25,     /* 0000 - 2.5x */
        75,     /* 0001 - 7.5x */
@@ -50,6 +52,42 @@ static const int hid1_multipliers_x_10[] = {
        0       /* 1111 - off */
 };
 
+/* PLL_CFG[0:4] table for cpu 7448/7447A/7455/7457 */
+static const int hid1_74xx_multipliers_x_10[] = {
+       115,    /* 00000 - 11.5x  */
+       170,    /* 00001 - 17x    */
+       75,     /* 00010 -  7.5x  */
+       150,    /* 00011 - 15x    */
+       70,     /* 00100 -  7x    */
+       180,    /* 00101 - 18x    */
+       10,     /* 00110 - bypass */
+       200,    /* 00111 - 20x    */
+       20,     /* 01000 -  2x    */
+       210,    /* 01001 - 21x    */
+       65,     /* 01010 -  6.5x  */
+       130,    /* 01011 - 13x    */
+       85,     /* 01100 -  8.5x  */
+       240,    /* 01101 - 24x    */
+       95,     /* 01110 -  9.5x  */
+       90,     /* 01111 -  9x    */
+       30,     /* 10000 -  3x    */
+       105,    /* 10001 - 10.5x  */
+       55,     /* 10010 -  5.5x  */
+       110,    /* 10011 - 11x    */
+       40,     /* 10100 -  4x    */
+       100,    /* 10101 - 10x    */
+       50,     /* 10110 -  5x    */
+       120,    /* 10111 - 12x    */
+       80,     /* 11000 -  8x    */
+       140,    /* 11001 - 14x    */
+       60,     /* 11010 -  6x    */
+       160,    /* 11011 - 16x    */
+       135,    /* 11100 - 13.5x  */
+       280,    /* 11101 - 28x    */
+       0,      /* 11110 - off    */
+       125     /* 11111 - 12.5x  */
+};
+
 static const int hid1_fx_multipliers_x_10[] = {
        00,     /* 0000 - off */
        00,     /* 0001 - off */
@@ -89,22 +127,30 @@ int get_clocks (void)
 {
        ulong clock = 0;
 
+#ifdef CFG_BUS_CLK
+       gd->bus_clk = CFG_BUS_CLK;      /* bus clock is a fixed frequency */
+#else
+       gd->bus_clk = get_board_bus_clk ();     /* bus clock is configurable */
+#endif
+
        /* calculate the clock frequency based upon the CPU type */
        switch (get_cpu_type()) {
+       case CPU_7447A:
        case CPU_7448:
        case CPU_7455:
        case CPU_7457:
                /*
-                * It is assumed that the PLL_EXT line is zero.
                 * Make sure division is done before multiplication to prevent 32-bit
                 * arithmetic overflows which will cause a negative number
                 */
-               clock = (CFG_BUS_CLK / 10) * hid1_multipliers_x_10[(get_hid1 () >> 13) & 0xF];
+               clock = (gd->bus_clk / 10) *
+                       hid1_74xx_multipliers_x_10[(get_hid1 () >> 12) & 0x1F];
                break;
 
        case CPU_750GX:
        case CPU_750FX:
-               clock = CFG_BUS_CLK * hid1_fx_multipliers_x_10[get_hid1 () >> 27] / 10;
+               clock = gd->bus_clk *
+                       hid1_fx_multipliers_x_10[get_hid1 () >> 27] / 10;
                break;
 
        case CPU_7450:
@@ -121,7 +167,8 @@ int get_clocks (void)
                 * Make sure division is done before multiplication to prevent 32-bit
                 * arithmetic overflows which will cause a negative number
                 */
-               clock = (CFG_BUS_CLK / 10) * hid1_multipliers_x_10[get_hid1 () >> 28];
+               clock = (gd->bus_clk / 10) *
+                       hid1_multipliers_x_10[get_hid1 () >> 28];
                break;
 
        case CPU_UNKNOWN:
@@ -131,7 +178,6 @@ int get_clocks (void)
        }
 
        gd->cpu_clk = clock;
-       gd->bus_clk = CFG_BUS_CLK;
 
        return (0);
 }
index f62ec8bc9b2627d8cff712c2ffb51c01da7ec6a5..f69b1f3854665226d669a8b2a4aabcc98e73c78b 100644 (file)
@@ -30,7 +30,7 @@ LIB   := $(obj)lib$(CPU).a
 START  := start.o
 SOBJS  := entry.o
 COBJS  := cpu.o hsdramc.o exception.o cache.o
-COBJS  += interrupts.o device.o pm.o pio.o
+COBJS  += interrupts.o pio.o atmel_mci.o
 SRCS   := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
 START  := $(addprefix $(obj),$(START))
index 2ed74d2508cd8f508f5bd839e3d193e4b7ce7e55..d2767121184acbe3b48127452e20695299065a40 100644 (file)
@@ -24,7 +24,7 @@ include $(TOPDIR)/config.mk
 
 LIB    := $(obj)lib$(SOC).a
 
-COBJS  := hebi.o devices.o
+COBJS  := gpio.o
 SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
 
diff --git a/cpu/at32ap/at32ap7000/devices.c b/cpu/at32ap/at32ap7000/devices.c
deleted file mode 100644 (file)
index 8b216e9..0000000
+++ /dev/null
@@ -1,448 +0,0 @@
-/*
- * 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/arch/memory-map.h>
-#include <asm/arch/platform.h>
-
-#include "../sm.h"
-
-#define ARRAY_SIZE(x)  (sizeof(x) / sizeof((x)[0]))
-
-const struct clock_domain chip_clock[] = {
-       [CLOCK_CPU] = {
-               .reg    = SM_PM_CPU_MASK,
-               .id     = CLOCK_CPU,
-               .bridge = NO_DEVICE,
-       },
-       [CLOCK_HSB] = {
-               .reg    = SM_PM_HSB_MASK,
-               .id     = CLOCK_HSB,
-               .bridge = NO_DEVICE,
-       },
-       [CLOCK_PBA] = {
-               .reg    = SM_PM_PBA_MASK,
-               .id     = CLOCK_PBA,
-               .bridge = DEVICE_PBA_BRIDGE,
-       },
-       [CLOCK_PBB] = {
-               .reg    = SM_PM_PBB_MASK,
-               .id     = CLOCK_PBB,
-               .bridge = DEVICE_PBB_BRIDGE,
-       },
-};
-
-static const struct resource hebi_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_HSB, 0 },
-               },
-       }, {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBB, 13 },
-               },
-       }, {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBB, 14 },
-               },
-       }, {
-               .type   = RESOURCE_GPIO,
-               .u      = {
-                       .gpio   = { 27, DEVICE_PIOE, GPIO_FUNC_A, 0 },
-               },
-       },
-};
-static const struct resource pba_bridge_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_HSB, 1 },
-               }
-       }, {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       /* HSB-HSB Bridge */
-                       .clock  = { CLOCK_HSB, 4 },
-               },
-       },
-};
-static const struct resource pbb_bridge_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_HSB, 2 },
-               },
-       },
-};
-static const struct resource hramc_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_HSB, 3 },
-               },
-       },
-};
-static const struct resource pioa_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBA, 10 },
-               },
-       },
-};
-static const struct resource piob_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBA, 11 },
-               },
-       },
-};
-static const struct resource pioc_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBA, 12 },
-               },
-       },
-};
-static const struct resource piod_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBA, 13 },
-               },
-       },
-};
-static const struct resource pioe_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBA, 14 },
-               },
-       },
-};
-static const struct resource sm_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBB, 0 },
-               },
-       },
-};
-static const struct resource intc_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock = { CLOCK_PBB, 1 },
-               },
-       },
-};
-static const struct resource hmatrix_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock = { CLOCK_PBB, 2 },
-               },
-       },
-};
-#if defined(CFG_HPDC)
-static const struct resource hpdc_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBA, 16 },
-               },
-       },
-};
-#endif
-#if defined(CFG_MACB0)
-static const struct resource macb0_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_HSB, 8 },
-               },
-       }, {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBB, 6 },
-               },
-       }, {
-               .type   = RESOURCE_GPIO,
-               .u      = {
-                       .gpio   = { 19, DEVICE_PIOC, GPIO_FUNC_A, 0 },
-               },
-       },
-};
-#endif
-#if defined(CFG_MACB1)
-static const struct resource macb1_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_HSB, 9 },
-               },
-       }, {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBB, 7 },
-               },
-       }, {
-               .type   = RESOURCE_GPIO,
-               .u      = {
-                       .gpio   = { 12, DEVICE_PIOC, GPIO_FUNC_B, 19 },
-               },
-       }, {
-               .type   = RESOURCE_GPIO,
-               .u      = {
-                       .gpio   = { 14, DEVICE_PIOD, GPIO_FUNC_B, 2 },
-               },
-       },
-};
-#endif
-#if defined(CFG_LCDC)
-static const struct resource lcdc_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_HSB, 7 },
-               },
-       },
-};
-#endif
-#if defined(CFG_USART0)
-static const struct resource usart0_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBA, 3 },
-               },
-       }, {
-               .type   = RESOURCE_GPIO,
-               .u      = {
-                       .gpio = { 2, DEVICE_PIOA, GPIO_FUNC_B, 8 },
-               },
-       },
-};
-#endif
-#if defined(CFG_USART1)
-static const struct resource usart1_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBA, 4 },
-               },
-       }, {
-               .type   = RESOURCE_GPIO,
-               .u      = {
-                       .gpio = { 2, DEVICE_PIOA, GPIO_FUNC_A, 17 },
-               },
-       },
-};
-#endif
-#if defined(CFG_USART2)
-static const struct resource usart2_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBA, 5 },
-               },
-       }, {
-               .type   = RESOURCE_GPIO,
-               .u      = {
-                       .gpio = { 2, DEVICE_PIOB, GPIO_FUNC_B, 26 },
-               },
-       },
-};
-#endif
-#if defined(CFG_USART3)
-static const struct resource usart3_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBA, 6 },
-               },
-       }, {
-               .type   = RESOURCE_GPIO,
-               .u      = {
-                       .gpio = { 2, DEVICE_PIOB, GPIO_FUNC_B, 17 },
-               },
-       },
-};
-#endif
-#if defined(CFG_MMCI)
-static const struct resource mmci_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_PBB, 9 },
-               },
-       }, {
-               .type   = RESOURCE_GPIO,
-               .u      = {
-                       .gpio = { 6, DEVICE_PIOA, GPIO_FUNC_A, 10 },
-               },
-       },
-};
-#endif
-#if defined(CFG_DMAC)
-static const struct resource dmac_resource[] = {
-       {
-               .type   = RESOURCE_CLOCK,
-               .u      = {
-                       .clock  = { CLOCK_HSB, 10 },
-               },
-       },
-};
-#endif
-
-const struct device chip_device[] = {
-       [DEVICE_HEBI] = {
-               .regs           = (void *)HSMC_BASE,
-               .nr_resources   = ARRAY_SIZE(hebi_resource),
-               .resource       = hebi_resource,
-       },
-       [DEVICE_PBA_BRIDGE] = {
-               .nr_resources   = ARRAY_SIZE(pba_bridge_resource),
-               .resource       = pba_bridge_resource,
-       },
-       [DEVICE_PBB_BRIDGE] = {
-               .nr_resources   = ARRAY_SIZE(pbb_bridge_resource),
-               .resource       = pbb_bridge_resource,
-       },
-       [DEVICE_HRAMC] = {
-               .nr_resources   = ARRAY_SIZE(hramc_resource),
-               .resource       = hramc_resource,
-       },
-       [DEVICE_PIOA] = {
-               .regs           = (void *)PIOA_BASE,
-               .nr_resources   = ARRAY_SIZE(pioa_resource),
-               .resource       = pioa_resource,
-       },
-       [DEVICE_PIOB] = {
-               .regs           = (void *)PIOB_BASE,
-               .nr_resources   = ARRAY_SIZE(piob_resource),
-               .resource       = piob_resource,
-       },
-       [DEVICE_PIOC] = {
-               .regs           = (void *)PIOC_BASE,
-               .nr_resources   = ARRAY_SIZE(pioc_resource),
-               .resource       = pioc_resource,
-       },
-       [DEVICE_PIOD] = {
-               .regs           = (void *)PIOD_BASE,
-               .nr_resources   = ARRAY_SIZE(piod_resource),
-               .resource       = piod_resource,
-       },
-       [DEVICE_PIOE] = {
-               .regs           = (void *)PIOE_BASE,
-               .nr_resources   = ARRAY_SIZE(pioe_resource),
-               .resource       = pioe_resource,
-       },
-       [DEVICE_SM] = {
-               .regs           = (void *)SM_BASE,
-               .nr_resources   = ARRAY_SIZE(sm_resource),
-               .resource       = sm_resource,
-       },
-       [DEVICE_INTC] = {
-               .regs           = (void *)INTC_BASE,
-               .nr_resources   = ARRAY_SIZE(intc_resource),
-               .resource       = intc_resource,
-       },
-       [DEVICE_HMATRIX] = {
-               .regs           = (void *)HMATRIX_BASE,
-               .nr_resources   = ARRAY_SIZE(hmatrix_resource),
-               .resource       = hmatrix_resource,
-       },
-#if defined(CFG_HPDC)
-       [DEVICE_HPDC] = {
-               .nr_resources   = ARRAY_SIZE(hpdc_resource),
-               .resource       = hpdc_resource,
-       },
-#endif
-#if defined(CFG_MACB0)
-       [DEVICE_MACB0] = {
-               .regs           = (void *)MACB0_BASE,
-               .nr_resources   = ARRAY_SIZE(macb0_resource),
-               .resource       = macb0_resource,
-       },
-#endif
-#if defined(CFG_MACB1)
-       [DEVICE_MACB1] = {
-               .regs           = (void *)MACB1_BASE,
-               .nr_resources   = ARRAY_SIZE(macb1_resource),
-               .resource       = macb1_resource,
-       },
-#endif
-#if defined(CFG_LCDC)
-       [DEVICE_LCDC] = {
-               .nr_resources   = ARRAY_SIZE(lcdc_resource),
-               .resource       = lcdc_resource,
-       },
-#endif
-#if defined(CFG_USART0)
-       [DEVICE_USART0] = {
-               .regs           = (void *)USART0_BASE,
-               .nr_resources   = ARRAY_SIZE(usart0_resource),
-               .resource       = usart0_resource,
-       },
-#endif
-#if defined(CFG_USART1)
-       [DEVICE_USART1] = {
-               .regs           = (void *)USART1_BASE,
-               .nr_resources   = ARRAY_SIZE(usart1_resource),
-               .resource       = usart1_resource,
-       },
-#endif
-#if defined(CFG_USART2)
-       [DEVICE_USART2] = {
-               .regs           = (void *)USART2_BASE,
-               .nr_resources   = ARRAY_SIZE(usart2_resource),
-               .resource       = usart2_resource,
-       },
-#endif
-#if defined(CFG_USART3)
-       [DEVICE_USART3] = {
-               .regs           = (void *)USART3_BASE,
-               .nr_resources   = ARRAY_SIZE(usart3_resource),
-               .resource       = usart3_resource,
-       },
-#endif
-#if defined(CFG_MMCI)
-       [DEVICE_MMCI] = {
-               .regs           = (void *)MMCI_BASE,
-               .nr_resources   = ARRAY_SIZE(mmci_resource),
-               .resource       = mmci_resource,
-       },
-#endif
-#if defined(CFG_DMAC)
-       [DEVICE_DMAC] = {
-               .regs           = (void *)DMAC_BASE,
-               .nr_resources   = ARRAY_SIZE(dmac_resource),
-               .resource       = dmac_resource,
-       },
-#endif
-};
diff --git a/cpu/at32ap/at32ap7000/gpio.c b/cpu/at32ap/at32ap7000/gpio.c
new file mode 100644 (file)
index 0000000..52f5372
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * 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/arch/gpio.h>
+
+/*
+ * Lots of small functions here. We depend on --gc-sections getting
+ * rid of the ones we don't need.
+ */
+void gpio_enable_ebi(void)
+{
+#ifdef CFG_HSDRAMC
+#ifndef CFG_SDRAM_16BIT
+       gpio_select_periph_A(GPIO_PIN_PE0, 0);
+       gpio_select_periph_A(GPIO_PIN_PE1, 0);
+       gpio_select_periph_A(GPIO_PIN_PE2, 0);
+       gpio_select_periph_A(GPIO_PIN_PE3, 0);
+       gpio_select_periph_A(GPIO_PIN_PE4, 0);
+       gpio_select_periph_A(GPIO_PIN_PE5, 0);
+       gpio_select_periph_A(GPIO_PIN_PE6, 0);
+       gpio_select_periph_A(GPIO_PIN_PE7, 0);
+       gpio_select_periph_A(GPIO_PIN_PE8, 0);
+       gpio_select_periph_A(GPIO_PIN_PE9, 0);
+       gpio_select_periph_A(GPIO_PIN_PE10, 0);
+       gpio_select_periph_A(GPIO_PIN_PE11, 0);
+       gpio_select_periph_A(GPIO_PIN_PE12, 0);
+       gpio_select_periph_A(GPIO_PIN_PE13, 0);
+       gpio_select_periph_A(GPIO_PIN_PE14, 0);
+       gpio_select_periph_A(GPIO_PIN_PE15, 0);
+#endif
+       gpio_select_periph_A(GPIO_PIN_PE26, 0);
+#endif
+}
+
+void gpio_enable_usart0(void)
+{
+       gpio_select_periph_B(GPIO_PIN_PA8, 0);
+       gpio_select_periph_B(GPIO_PIN_PA9, 0);
+}
+
+void gpio_enable_usart1(void)
+{
+       gpio_select_periph_A(GPIO_PIN_PA17, 0);
+       gpio_select_periph_A(GPIO_PIN_PA18, 0);
+}
+
+void gpio_enable_usart2(void)
+{
+       gpio_select_periph_B(GPIO_PIN_PB26, 0);
+       gpio_select_periph_B(GPIO_PIN_PB27, 0);
+}
+
+void gpio_enable_usart3(void)
+{
+       gpio_select_periph_B(GPIO_PIN_PB18, 0);
+       gpio_select_periph_B(GPIO_PIN_PB19, 0);
+}
+
+void gpio_enable_macb0(void)
+{
+       gpio_select_periph_A(GPIO_PIN_PC3,  0); /* TXD0 */
+       gpio_select_periph_A(GPIO_PIN_PC4,  0); /* TXD1 */
+       gpio_select_periph_A(GPIO_PIN_PC7,  0); /* TXEN */
+       gpio_select_periph_A(GPIO_PIN_PC8,  0); /* TXCK */
+       gpio_select_periph_A(GPIO_PIN_PC9,  0); /* RXD0 */
+       gpio_select_periph_A(GPIO_PIN_PC10, 0); /* RXD1 */
+       gpio_select_periph_A(GPIO_PIN_PC13, 0); /* RXER */
+       gpio_select_periph_A(GPIO_PIN_PC15, 0); /* RXDV */
+       gpio_select_periph_A(GPIO_PIN_PC16, 0); /* MDC  */
+       gpio_select_periph_A(GPIO_PIN_PC17, 0); /* MDIO */
+#if !defined(CONFIG_RMII)
+       gpio_select_periph_A(GPIO_PIN_PC0,  0); /* COL  */
+       gpio_select_periph_A(GPIO_PIN_PC1,  0); /* CRS  */
+       gpio_select_periph_A(GPIO_PIN_PC2,  0); /* TXER */
+       gpio_select_periph_A(GPIO_PIN_PC5,  0); /* TXD2 */
+       gpio_select_periph_A(GPIO_PIN_PC6,  0); /* TXD3 */
+       gpio_select_periph_A(GPIO_PIN_PC11, 0); /* RXD2 */
+       gpio_select_periph_A(GPIO_PIN_PC12, 0); /* RXD3 */
+       gpio_select_periph_A(GPIO_PIN_PC14, 0); /* RXCK */
+       gpio_select_periph_A(GPIO_PIN_PC18, 0); /* SPD  */
+#endif
+}
+
+void gpio_enable_macb1(void)
+{
+       gpio_select_periph_B(GPIO_PIN_PD13, 0); /* TXD0 */
+       gpio_select_periph_B(GPIO_PIN_PD14, 0); /* TXD1 */
+       gpio_select_periph_B(GPIO_PIN_PD11, 0); /* TXEN */
+       gpio_select_periph_B(GPIO_PIN_PD12, 0); /* TXCK */
+       gpio_select_periph_B(GPIO_PIN_PD10, 0); /* RXD0 */
+       gpio_select_periph_B(GPIO_PIN_PD6,  0); /* RXD1 */
+       gpio_select_periph_B(GPIO_PIN_PD5,  0); /* RXER */
+       gpio_select_periph_B(GPIO_PIN_PD4,  0); /* RXDV */
+       gpio_select_periph_B(GPIO_PIN_PD3,  0); /* MDC  */
+       gpio_select_periph_B(GPIO_PIN_PD2,  0); /* MDIO */
+#if !defined(CONFIG_RMII)
+       gpio_select_periph_B(GPIO_PIN_PC19, 0); /* COL  */
+       gpio_select_periph_B(GPIO_PIN_PC23, 0); /* CRS  */
+       gpio_select_periph_B(GPIO_PIN_PC26, 0); /* TXER */
+       gpio_select_periph_B(GPIO_PIN_PC27, 0); /* TXD2 */
+       gpio_select_periph_B(GPIO_PIN_PC28, 0); /* TXD3 */
+       gpio_select_periph_B(GPIO_PIN_PC29, 0); /* RXD2 */
+       gpio_select_periph_B(GPIO_PIN_PC30, 0); /* RXD3 */
+       gpio_select_periph_B(GPIO_PIN_PC24, 0); /* RXCK */
+       gpio_select_periph_B(GPIO_PIN_PD15, 0); /* SPD  */
+#endif
+}
+
+void gpio_enable_mmci(void)
+{
+       gpio_select_periph_A(GPIO_PIN_PA10, 0); /* CLK   */
+       gpio_select_periph_A(GPIO_PIN_PA11, 0); /* CMD   */
+       gpio_select_periph_A(GPIO_PIN_PA12, 0); /* DATA0 */
+       gpio_select_periph_A(GPIO_PIN_PA13, 0); /* DATA1 */
+       gpio_select_periph_A(GPIO_PIN_PA14, 0); /* DATA2 */
+       gpio_select_periph_A(GPIO_PIN_PA15, 0); /* DATA3 */
+}
diff --git a/cpu/at32ap/atmel_mci.c b/cpu/at32ap/atmel_mci.c
new file mode 100644 (file)
index 0000000..9f62c0f
--- /dev/null
@@ -0,0 +1,477 @@
+/*
+ * Copyright (C) 2004-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>
+
+#ifdef CONFIG_MMC
+
+#include <part.h>
+#include <mmc.h>
+
+#include <asm/io.h>
+#include <asm/errno.h>
+#include <asm/byteorder.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/memory-map.h>
+
+#include "atmel_mci.h"
+
+#ifdef DEBUG
+#define pr_debug(fmt, args...) printf(fmt, ##args)
+#else
+#define pr_debug(...) do { } while(0)
+#endif
+
+#ifndef CFG_MMC_CLK_OD
+#define CFG_MMC_CLK_OD         150000
+#endif
+
+#ifndef CFG_MMC_CLK_PP
+#define CFG_MMC_CLK_PP         5000000
+#endif
+
+#ifndef CFG_MMC_OP_COND
+#define CFG_MMC_OP_COND                0x00100000
+#endif
+
+#define MMC_DEFAULT_BLKLEN     512
+#define MMC_DEFAULT_RCA                1
+
+static unsigned int mmc_rca;
+static block_dev_desc_t mmc_blkdev;
+
+block_dev_desc_t *mmc_get_dev(int dev)
+{
+       return &mmc_blkdev;
+}
+
+static void mci_set_mode(unsigned long hz, unsigned long blklen)
+{
+       unsigned long bus_hz;
+       unsigned long clkdiv;
+
+       bus_hz = get_mci_clk_rate();
+       clkdiv = (bus_hz / hz) / 2 - 1;
+
+       pr_debug("mmc: setting clock %lu Hz, block size %lu\n",
+                hz, blklen);
+
+       if (clkdiv & ~255UL) {
+               clkdiv = 255;
+               printf("mmc: clock %lu too low; setting CLKDIV to 255\n",
+                       hz);
+       }
+
+       blklen &= 0xfffc;
+       mmci_writel(MR, (MMCI_BF(CLKDIV, clkdiv)
+                        | MMCI_BF(BLKLEN, blklen)));
+}
+
+#define RESP_NO_CRC    1
+#define R1             MMCI_BF(RSPTYP, 1)
+#define R2             MMCI_BF(RSPTYP, 2)
+#define R3             (R1 | RESP_NO_CRC)
+#define R6             R1
+#define NID            MMCI_BF(MAXLAT, 0)
+#define NCR            MMCI_BF(MAXLAT, 1)
+#define TRCMD_START    MMCI_BF(TRCMD, 1)
+#define TRDIR_READ     MMCI_BF(TRDIR, 1)
+#define TRTYP_BLOCK    MMCI_BF(TRTYP, 0)
+#define INIT_CMD       MMCI_BF(SPCMD, 1)
+#define OPEN_DRAIN     MMCI_BF(OPDCMD, 1)
+
+#define ERROR_FLAGS    (MMCI_BIT(DTOE)                 \
+                        | MMCI_BIT(RDIRE)              \
+                        | MMCI_BIT(RENDE)              \
+                        | MMCI_BIT(RINDE)              \
+                        | MMCI_BIT(RTOE))
+
+static int
+mmc_cmd(unsigned long cmd, unsigned long arg,
+       void *resp, unsigned long flags)
+{
+       unsigned long *response = resp;
+       int i, response_words = 0;
+       unsigned long error_flags;
+       u32 status;
+
+       pr_debug("mmc: CMD%lu 0x%lx (flags 0x%lx)\n",
+                cmd, arg, flags);
+
+       error_flags = ERROR_FLAGS;
+       if (!(flags & RESP_NO_CRC))
+               error_flags |= MMCI_BIT(RCRCE);
+
+       flags &= ~MMCI_BF(CMDNB, ~0UL);
+
+       if (MMCI_BFEXT(RSPTYP, flags) == MMCI_RSPTYP_48_BIT_RESP)
+               response_words = 1;
+       else if (MMCI_BFEXT(RSPTYP, flags) == MMCI_RSPTYP_136_BIT_RESP)
+               response_words = 4;
+
+       mmci_writel(ARGR, arg);
+       mmci_writel(CMDR, cmd | flags);
+       do {
+               udelay(40);
+               status = mmci_readl(SR);
+       } while (!(status & MMCI_BIT(CMDRDY)));
+
+       pr_debug("mmc: status 0x%08lx\n", status);
+
+       if (status & ERROR_FLAGS) {
+               printf("mmc: command %lu failed (status: 0x%08lx)\n",
+                      cmd, status);
+               return -EIO;
+       }
+
+       if (response_words)
+               pr_debug("mmc: response:");
+
+       for (i = 0; i < response_words; i++) {
+               response[i] = mmci_readl(RSPR);
+               pr_debug(" %08lx", response[i]);
+       }
+       pr_debug("\n");
+
+       return 0;
+}
+
+static int mmc_acmd(unsigned long cmd, unsigned long arg,
+                   void *resp, unsigned long flags)
+{
+       unsigned long aresp[4];
+       int ret;
+
+       /*
+        * Seems like the APP_CMD part of an ACMD has 64 cycles max
+        * latency even though the ACMD part doesn't. This isn't
+        * entirely clear in the SD Card spec, but some cards refuse
+        * to work if we attempt to use 5 cycles max latency here...
+        */
+       ret = mmc_cmd(MMC_CMD_APP_CMD, 0, aresp,
+                     R1 | NCR | (flags & OPEN_DRAIN));
+       if (ret)
+               return ret;
+       if ((aresp[0] & (R1_ILLEGAL_COMMAND | R1_APP_CMD)) != R1_APP_CMD)
+               return -ENODEV;
+
+       ret = mmc_cmd(cmd, arg, resp, flags);
+       return ret;
+}
+
+static unsigned long
+mmc_bread(int dev, unsigned long start, lbaint_t blkcnt,
+         unsigned long *buffer)
+{
+       int ret, i = 0;
+       unsigned long resp[4];
+       unsigned long card_status, data;
+       unsigned long wordcount;
+       u32 status;
+
+       if (blkcnt == 0)
+               return 0;
+
+       pr_debug("mmc_bread: dev %d, start %lx, blkcnt %lx\n",
+                dev, start, blkcnt);
+
+       /* Put the device into Transfer state */
+       ret = mmc_cmd(MMC_CMD_SELECT_CARD, mmc_rca << 16, resp, R1 | NCR);
+       if (ret) goto fail;
+
+       /* Set block length */
+       ret = mmc_cmd(MMC_CMD_SET_BLOCKLEN, mmc_blkdev.blksz, resp, R1 | NCR);
+       if (ret) goto fail;
+
+       pr_debug("MCI_DTOR = %08lx\n", mmci_readl(DTOR));
+
+       for (i = 0; i < blkcnt; i++, start++) {
+               ret = mmc_cmd(MMC_CMD_READ_SINGLE_BLOCK,
+                             start * mmc_blkdev.blksz, resp,
+                             (R1 | NCR | TRCMD_START | TRDIR_READ
+                              | TRTYP_BLOCK));
+               if (ret) goto fail;
+
+               ret = -EIO;
+               wordcount = 0;
+               do {
+                       do {
+                               status = mmci_readl(SR);
+                               if (status & (ERROR_FLAGS | MMCI_BIT(OVRE)))
+                                       goto fail;
+                       } while (!(status & MMCI_BIT(RXRDY)));
+
+                       if (status & MMCI_BIT(RXRDY)) {
+                               data = mmci_readl(RDR);
+                               /* pr_debug("%x\n", data); */
+                               *buffer++ = data;
+                               wordcount++;
+                       }
+               } while(wordcount < (512 / 4));
+
+               pr_debug("mmc: read %u words, waiting for BLKE\n", wordcount);
+
+               do {
+                       status = mmci_readl(SR);
+               } while (!(status & MMCI_BIT(BLKE)));
+
+               putc('.');
+       }
+
+out:
+       /* Put the device back into Standby state */
+       mmc_cmd(MMC_CMD_SELECT_CARD, 0, resp, NCR);
+       return i;
+
+fail:
+       mmc_cmd(MMC_CMD_SEND_STATUS, mmc_rca << 16, &card_status, R1 | NCR);
+       printf("mmc: bread failed, card status = ", card_status);
+       goto out;
+}
+
+static void mmc_parse_cid(struct mmc_cid *cid, unsigned long *resp)
+{
+       cid->mid = resp[0] >> 24;
+       cid->oid = (resp[0] >> 8) & 0xffff;
+       cid->pnm[0] = resp[0];
+       cid->pnm[1] = resp[1] >> 24;
+       cid->pnm[2] = resp[1] >> 16;
+       cid->pnm[3] = resp[1] >> 8;
+       cid->pnm[4] = resp[1];
+       cid->pnm[5] = resp[2] >> 24;
+       cid->pnm[6] = 0;
+       cid->prv = resp[2] >> 16;
+       cid->psn = (resp[2] << 16) | (resp[3] >> 16);
+       cid->mdt = resp[3] >> 8;
+}
+
+static void sd_parse_cid(struct mmc_cid *cid, unsigned long *resp)
+{
+       cid->mid = resp[0] >> 24;
+       cid->oid = (resp[0] >> 8) & 0xffff;
+       cid->pnm[0] = resp[0];
+       cid->pnm[1] = resp[1] >> 24;
+       cid->pnm[2] = resp[1] >> 16;
+       cid->pnm[3] = resp[1] >> 8;
+       cid->pnm[4] = resp[1];
+       cid->pnm[5] = 0;
+       cid->pnm[6] = 0;
+       cid->prv = resp[2] >> 24;
+       cid->psn = (resp[2] << 8) | (resp[3] >> 24);
+       cid->mdt = (resp[3] >> 8) & 0x0fff;
+}
+
+static void mmc_dump_cid(const struct mmc_cid *cid)
+{
+       printf("Manufacturer ID:       %02lX\n", cid->mid);
+       printf("OEM/Application ID:    %04lX\n", cid->oid);
+       printf("Product name:          %s\n", cid->pnm);
+       printf("Product Revision:      %lu.%lu\n",
+              cid->prv >> 4, cid->prv & 0x0f);
+       printf("Product Serial Number: %lu\n", cid->psn);
+       printf("Manufacturing Date:    %02lu/%02lu\n",
+              cid->mdt >> 4, cid->mdt & 0x0f);
+}
+
+static void mmc_dump_csd(const struct mmc_csd *csd)
+{
+       unsigned long *csd_raw = (unsigned long *)csd;
+       printf("CSD data: %08lx %08lx %08lx %08lx\n",
+              csd_raw[0], csd_raw[1], csd_raw[2], csd_raw[3]);
+       printf("CSD structure version:   1.%u\n", csd->csd_structure);
+       printf("MMC System Spec version: %u\n", csd->spec_vers);
+       printf("Card command classes:    %03x\n", csd->ccc);
+       printf("Read block length:       %u\n", 1 << csd->read_bl_len);
+       if (csd->read_bl_partial)
+               puts("Supports partial reads\n");
+       else
+               puts("Does not support partial reads\n");
+       printf("Write block length:      %u\n", 1 << csd->write_bl_len);
+       if (csd->write_bl_partial)
+               puts("Supports partial writes\n");
+       else
+               puts("Does not support partial writes\n");
+       if (csd->wp_grp_enable)
+               printf("Supports group WP:      %u\n", csd->wp_grp_size + 1);
+       else
+               puts("Does not support group WP\n");
+       printf("Card capacity:          %u bytes\n",
+              (csd->c_size + 1) * (1 << (csd->c_size_mult + 2)) *
+              (1 << csd->read_bl_len));
+       printf("File format:            %u/%u\n",
+              csd->file_format_grp, csd->file_format);
+       puts("Write protection:        ");
+       if (csd->perm_write_protect)
+               puts(" permanent");
+       if (csd->tmp_write_protect)
+               puts(" temporary");
+       putc('\n');
+}
+
+static int mmc_idle_cards(void)
+{
+       int ret;
+
+       /* Reset and initialize all cards */
+       ret = mmc_cmd(MMC_CMD_GO_IDLE_STATE, 0, NULL, 0);
+       if (ret)
+               return ret;
+
+       /* Keep the bus idle for 74 clock cycles */
+       return mmc_cmd(0, 0, NULL, INIT_CMD);
+}
+
+static int sd_init_card(struct mmc_cid *cid, int verbose)
+{
+       unsigned long resp[4];
+       int i, ret = 0;
+
+       mmc_idle_cards();
+       for (i = 0; i < 1000; i++) {
+               ret = mmc_acmd(MMC_ACMD_SD_SEND_OP_COND, CFG_MMC_OP_COND,
+                              resp, R3 | NID);
+               if (ret || (resp[0] & 0x80000000))
+                       break;
+               ret = -ETIMEDOUT;
+       }
+
+       if (ret)
+               return ret;
+
+       ret = mmc_cmd(MMC_CMD_ALL_SEND_CID, 0, resp, R2 | NID);
+       if (ret)
+               return ret;
+       sd_parse_cid(cid, resp);
+       if (verbose)
+               mmc_dump_cid(cid);
+
+       /* Get RCA of the card that responded */
+       ret = mmc_cmd(MMC_CMD_SD_SEND_RELATIVE_ADDR, 0, resp, R6 | NCR);
+       if (ret)
+               return ret;
+
+       mmc_rca = resp[0] >> 16;
+       if (verbose)
+               printf("SD Card detected (RCA %u)\n", mmc_rca);
+       return 0;
+}
+
+static int mmc_init_card(struct mmc_cid *cid, int verbose)
+{
+       unsigned long resp[4];
+       int i, ret = 0;
+
+       mmc_idle_cards();
+       for (i = 0; i < 1000; i++) {
+               ret = mmc_cmd(MMC_CMD_SEND_OP_COND, CFG_MMC_OP_COND, resp,
+                             R3 | NID | OPEN_DRAIN);
+               if (ret || (resp[0] & 0x80000000))
+                       break;
+               ret = -ETIMEDOUT;
+       }
+
+       if (ret)
+               return ret;
+
+       /* Get CID of all cards. FIXME: Support more than one card */
+       ret = mmc_cmd(MMC_CMD_ALL_SEND_CID, 0, resp, R2 | NID | OPEN_DRAIN);
+       if (ret)
+               return ret;
+       mmc_parse_cid(cid, resp);
+       if (verbose)
+               mmc_dump_cid(cid);
+
+       /* Set Relative Address of the card that responded */
+       ret = mmc_cmd(MMC_CMD_SET_RELATIVE_ADDR, mmc_rca << 16, resp,
+                     R1 | NCR | OPEN_DRAIN);
+       return ret;
+}
+
+int mmc_init(int verbose)
+{
+       struct mmc_cid cid;
+       struct mmc_csd csd;
+       int ret;
+
+       /* Initialize controller */
+       mmci_writel(CR, MMCI_BIT(SWRST));
+       mmci_writel(CR, MMCI_BIT(MCIEN));
+       mmci_writel(DTOR, 0x5f);
+       mmci_writel(IDR, ~0UL);
+       mci_set_mode(CFG_MMC_CLK_OD, MMC_DEFAULT_BLKLEN);
+
+       ret = sd_init_card(&cid, verbose);
+       if (ret) {
+               mmc_rca = MMC_DEFAULT_RCA;
+               ret = mmc_init_card(&cid, verbose);
+       }
+       if (ret)
+               return ret;
+
+       /* Get CSD from the card */
+       ret = mmc_cmd(MMC_CMD_SEND_CSD, mmc_rca << 16, &csd, R2 | NCR);
+       if (ret)
+               return ret;
+       if (verbose)
+               mmc_dump_csd(&csd);
+
+       /* Initialize the blockdev structure */
+       mmc_blkdev.if_type = IF_TYPE_MMC;
+       mmc_blkdev.part_type = PART_TYPE_DOS;
+       mmc_blkdev.block_read = mmc_bread;
+       sprintf((char *)mmc_blkdev.vendor,
+               "Man %02x%04x Snr %08x",
+               cid.mid, cid.oid, cid.psn);
+       strncpy((char *)mmc_blkdev.product, cid.pnm,
+               sizeof(mmc_blkdev.product));
+       sprintf((char *)mmc_blkdev.revision, "%x %x",
+               cid.prv >> 4, cid.prv & 0x0f);
+       mmc_blkdev.blksz = 1 << csd.read_bl_len;
+       mmc_blkdev.lba = (csd.c_size + 1) * (1 << (csd.c_size_mult + 2));
+
+       mci_set_mode(CFG_MMC_CLK_PP, mmc_blkdev.blksz);
+
+#if 0
+       if (fat_register_device(&mmc_blkdev, 1))
+               printf("Could not register MMC fat device\n");
+#else
+       init_part(&mmc_blkdev);
+#endif
+
+       return 0;
+}
+
+int mmc_read(ulong src, uchar *dst, int size)
+{
+       return -ENOSYS;
+}
+
+int mmc_write(uchar *src, ulong dst, int size)
+{
+       return -ENOSYS;
+}
+
+int mmc2info(ulong addr)
+{
+       return 0;
+}
+
+#endif /* CONFIG_MMC */
diff --git a/cpu/at32ap/atmel_mci.h b/cpu/at32ap/atmel_mci.h
new file mode 100644 (file)
index 0000000..0ffbc4f
--- /dev/null
@@ -0,0 +1,197 @@
+/*
+ * 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
+ */
+#ifndef __CPU_AT32AP_ATMEL_MCI_H__
+#define __CPU_AT32AP_ATMEL_MCI_H__
+
+/* Atmel MultiMedia Card Interface (MCI) registers */
+#define MMCI_CR                                        0x0000
+#define MMCI_MR                                        0x0004
+#define MMCI_DTOR                              0x0008
+#define MMCI_SDCR                              0x000c
+#define MMCI_ARGR                              0x0010
+#define MMCI_CMDR                              0x0014
+#define MMCI_RSPR                              0x0020
+#define MMCI_RSPR1                             0x0024
+#define MMCI_RSPR2                             0x0028
+#define MMCI_RSPR3                             0x002c
+#define MMCI_RDR                               0x0030
+#define MMCI_TDR                               0x0034
+#define MMCI_SR                                        0x0040
+#define MMCI_IER                               0x0044
+#define MMCI_IDR                               0x0048
+#define MMCI_IMR                               0x004c
+
+/* Bitfields in CR */
+#define MMCI_MCIEN_OFFSET                      0
+#define MMCI_MCIEN_SIZE                                1
+#define MMCI_MCIDIS_OFFSET                     1
+#define MMCI_MCIDIS_SIZE                       1
+#define MMCI_PWSEN_OFFSET                      2
+#define MMCI_PWSEN_SIZE                                1
+#define MMCI_PWSDIS_OFFSET                     3
+#define MMCI_PWSDIS_SIZE                       1
+#define MMCI_SWRST_OFFSET                      7
+#define MMCI_SWRST_SIZE                                1
+
+/* Bitfields in MR */
+#define MMCI_CLKDIV_OFFSET                     0
+#define MMCI_CLKDIV_SIZE                       8
+#define MMCI_PWSDIV_OFFSET                     8
+#define MMCI_PWSDIV_SIZE                       3
+#define MMCI_PDCPADV_OFFSET                    14
+#define MMCI_PDCPADV_SIZE                      1
+#define MMCI_PDCMODE_OFFSET                    15
+#define MMCI_PDCMODE_SIZE                      1
+#define MMCI_BLKLEN_OFFSET                     16
+#define MMCI_BLKLEN_SIZE                       16
+
+/* Bitfields in DTOR */
+#define MMCI_DTOCYC_OFFSET                     0
+#define MMCI_DTOCYC_SIZE                       4
+#define MMCI_DTOMUL_OFFSET                     4
+#define MMCI_DTOMUL_SIZE                       3
+
+/* Bitfields in SDCR */
+#define MMCI_SCDSEL_OFFSET                     0
+#define MMCI_SCDSEL_SIZE                       4
+#define MMCI_SCDBUS_OFFSET                     7
+#define MMCI_SCDBUS_SIZE                       1
+
+/* Bitfields in ARGR */
+#define MMCI_ARG_OFFSET                                0
+#define MMCI_ARG_SIZE                          32
+
+/* Bitfields in CMDR */
+#define MMCI_CMDNB_OFFSET                      0
+#define MMCI_CMDNB_SIZE                                6
+#define MMCI_RSPTYP_OFFSET                     6
+#define MMCI_RSPTYP_SIZE                       2
+#define MMCI_SPCMD_OFFSET                      8
+#define MMCI_SPCMD_SIZE                                3
+#define MMCI_OPDCMD_OFFSET                     11
+#define MMCI_OPDCMD_SIZE                       1
+#define MMCI_MAXLAT_OFFSET                     12
+#define MMCI_MAXLAT_SIZE                       1
+#define MMCI_TRCMD_OFFSET                      16
+#define MMCI_TRCMD_SIZE                                2
+#define MMCI_TRDIR_OFFSET                      18
+#define MMCI_TRDIR_SIZE                                1
+#define MMCI_TRTYP_OFFSET                      19
+#define MMCI_TRTYP_SIZE                                2
+
+/* Bitfields in RSPRx */
+#define MMCI_RSP_OFFSET                                0
+#define MMCI_RSP_SIZE                          32
+
+/* Bitfields in SR/IER/IDR/IMR */
+#define MMCI_CMDRDY_OFFSET                     0
+#define MMCI_CMDRDY_SIZE                       1
+#define MMCI_RXRDY_OFFSET                      1
+#define MMCI_RXRDY_SIZE                                1
+#define MMCI_TXRDY_OFFSET                      2
+#define MMCI_TXRDY_SIZE                                1
+#define MMCI_BLKE_OFFSET                       3
+#define MMCI_BLKE_SIZE                         1
+#define MMCI_DTIP_OFFSET                       4
+#define MMCI_DTIP_SIZE                         1
+#define MMCI_NOTBUSY_OFFSET                    5
+#define MMCI_NOTBUSY_SIZE                      1
+#define MMCI_ENDRX_OFFSET                      6
+#define MMCI_ENDRX_SIZE                                1
+#define MMCI_ENDTX_OFFSET                      7
+#define MMCI_ENDTX_SIZE                                1
+#define MMCI_RXBUFF_OFFSET                     14
+#define MMCI_RXBUFF_SIZE                       1
+#define MMCI_TXBUFE_OFFSET                     15
+#define MMCI_TXBUFE_SIZE                       1
+#define MMCI_RINDE_OFFSET                      16
+#define MMCI_RINDE_SIZE                                1
+#define MMCI_RDIRE_OFFSET                      17
+#define MMCI_RDIRE_SIZE                                1
+#define MMCI_RCRCE_OFFSET                      18
+#define MMCI_RCRCE_SIZE                                1
+#define MMCI_RENDE_OFFSET                      19
+#define MMCI_RENDE_SIZE                                1
+#define MMCI_RTOE_OFFSET                       20
+#define MMCI_RTOE_SIZE                         1
+#define MMCI_DCRCE_OFFSET                      21
+#define MMCI_DCRCE_SIZE                                1
+#define MMCI_DTOE_OFFSET                       22
+#define MMCI_DTOE_SIZE                         1
+#define MMCI_OVRE_OFFSET                       30
+#define MMCI_OVRE_SIZE                         1
+#define MMCI_UNRE_OFFSET                       31
+#define MMCI_UNRE_SIZE                         1
+
+/* Constants for DTOMUL */
+#define MMCI_DTOMUL_1_CYCLE                    0
+#define MMCI_DTOMUL_16_CYCLES                  1
+#define MMCI_DTOMUL_128_CYCLES                 2
+#define MMCI_DTOMUL_256_CYCLES                 3
+#define MMCI_DTOMUL_1024_CYCLES                        4
+#define MMCI_DTOMUL_4096_CYCLES                        5
+#define MMCI_DTOMUL_65536_CYCLES               6
+#define MMCI_DTOMUL_1048576_CYCLES             7
+
+/* Constants for RSPTYP */
+#define MMCI_RSPTYP_NO_RESP                    0
+#define MMCI_RSPTYP_48_BIT_RESP                        1
+#define MMCI_RSPTYP_136_BIT_RESP               2
+
+/* Constants for SPCMD */
+#define MMCI_SPCMD_NO_SPEC_CMD                 0
+#define MMCI_SPCMD_INIT_CMD                    1
+#define MMCI_SPCMD_SYNC_CMD                    2
+#define MMCI_SPCMD_INT_CMD                     4
+#define MMCI_SPCMD_INT_RESP                    5
+
+/* Constants for TRCMD */
+#define MMCI_TRCMD_NO_TRANS                    0
+#define MMCI_TRCMD_START_TRANS                 1
+#define MMCI_TRCMD_STOP_TRANS                  2
+
+/* Constants for TRTYP */
+#define MMCI_TRTYP_BLOCK                       0
+#define MMCI_TRTYP_MULTI_BLOCK                 1
+#define MMCI_TRTYP_STREAM                      2
+
+/* Bit manipulation macros */
+#define MMCI_BIT(name)                                 \
+       (1 << MMCI_##name##_OFFSET)
+#define MMCI_BF(name,value)                            \
+       (((value) & ((1 << MMCI_##name##_SIZE) - 1))    \
+        << MMCI_##name##_OFFSET)
+#define MMCI_BFEXT(name,value)                         \
+       (((value) >> MMCI_##name##_OFFSET)\
+        & ((1 << MMCI_##name##_SIZE) - 1))
+#define MMCI_BFINS(name,value,old)                     \
+       (((old) & ~(((1 << MMCI_##name##_SIZE) - 1)     \
+                   << MMCI_##name##_OFFSET))           \
+        | MMCI_BF(name,value))
+
+/* Register access macros */
+#define mmci_readl(reg)                                        \
+       readl((void *)MMCI_BASE + MMCI_##reg)
+#define mmci_writel(reg,value)                         \
+       writel((value), (void *)MMCI_BASE + MMCI_##reg)
+
+#endif /* __CPU_AT32AP_ATMEL_MCI_H__ */
index 37e3ea040be6a5e898801aefc2e7db3bf95da3e5..311466b781465ac45347bc5abb22f72a5b260c6c 100644 (file)
 #include <asm/sections.h>
 #include <asm/sysreg.h>
 
+#include <asm/arch/clk.h>
 #include <asm/arch/memory-map.h>
-#include <asm/arch/platform.h>
 
 #include "hsmc3.h"
+#include "sm.h"
+
+/* Sanity checks */
+#if (CFG_CLKDIV_CPU > CFG_CLKDIV_HSB)          \
+       || (CFG_CLKDIV_HSB > CFG_CLKDIV_PBA)    \
+       || (CFG_CLKDIV_HSB > CFG_CLKDIV_PBB)
+# error Constraint fCPU >= fHSB >= fPB{A,B} violated
+#endif
+#if defined(CONFIG_PLL) && ((CFG_PLL0_MUL < 1) || (CFG_PLL0_DIV < 1))
+# error Invalid PLL multiplier and/or divider
+#endif
 
 DECLARE_GLOBAL_DATA_PTR;
 
+static void pm_init(void)
+{
+       uint32_t cksel;
+
+#ifdef CONFIG_PLL
+       /* Initialize the PLL */
+       sm_writel(PM_PLL0, (SM_BF(PLLCOUNT, CFG_PLL0_SUPPRESS_CYCLES)
+                           | SM_BF(PLLMUL, CFG_PLL0_MUL - 1)
+                           | SM_BF(PLLDIV, CFG_PLL0_DIV - 1)
+                           | SM_BF(PLLOPT, CFG_PLL0_OPT)
+                           | SM_BF(PLLOSC, 0)
+                           | SM_BIT(PLLEN)));
+
+       /* Wait for lock */
+       while (!(sm_readl(PM_ISR) & SM_BIT(LOCK0))) ;
+#endif
+
+       /* Set up clocks for the CPU and all peripheral buses */
+       cksel = 0;
+       if (CFG_CLKDIV_CPU)
+               cksel |= SM_BIT(CPUDIV) | SM_BF(CPUSEL, CFG_CLKDIV_CPU - 1);
+       if (CFG_CLKDIV_HSB)
+               cksel |= SM_BIT(HSBDIV) | SM_BF(HSBSEL, CFG_CLKDIV_HSB - 1);
+       if (CFG_CLKDIV_PBA)
+               cksel |= SM_BIT(PBADIV) | SM_BF(PBASEL, CFG_CLKDIV_PBA - 1);
+       if (CFG_CLKDIV_PBB)
+               cksel |= SM_BIT(PBBDIV) | SM_BF(PBBSEL, CFG_CLKDIV_PBB - 1);
+       sm_writel(PM_CKSEL, cksel);
+
+       gd->cpu_hz = get_cpu_clk_rate();
+
+#ifdef CONFIG_PLL
+       /* Use PLL0 as main clock */
+       sm_writel(PM_MCCTRL, SM_BIT(PLLSEL));
+#endif
+}
+
 int cpu_init(void)
 {
-       const struct device *hebi;
        extern void _evba(void);
        char *p;
 
        gd->cpu_hz = CFG_OSC0_HZ;
 
-       /* fff03400: 00010001 04030402 00050005 10011103 */
-       hebi = get_device(DEVICE_HEBI);
-       hsmc3_writel(hebi, MODE0, 0x00031103);
-       hsmc3_writel(hebi, CYCLE0, 0x000c000d);
-       hsmc3_writel(hebi, PULSE0, 0x0b0a0906);
-       hsmc3_writel(hebi, SETUP0, 0x00010002);
+       /* TODO: Move somewhere else, but needs to be run before we
+        * increase the clock frequency. */
+       hsmc3_writel(MODE0, 0x00031103);
+       hsmc3_writel(CYCLE0, 0x000c000d);
+       hsmc3_writel(PULSE0, 0x0b0a0906);
+       hsmc3_writel(SETUP0, 0x00010002);
 
        pm_init();
 
        sysreg_write(EVBA, (unsigned long)&_evba);
        asm volatile("csrf      %0" : : "i"(SYSREG_EM_OFFSET));
-       gd->console_uart = get_device(CFG_CONSOLE_UART_DEV);
 
        /* Lock everything that mess with the flash in the icache */
        for (p = __flashprog_start; p <= (__flashprog_end + CFG_ICACHE_LINESZ);
diff --git a/cpu/at32ap/device.c b/cpu/at32ap/device.c
deleted file mode 100644 (file)
index 89914b6..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * 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/arch/platform.h>
-
-#include "sm.h"
-
-struct device_state {
-       int refcount;
-};
-
-static struct device_state device_state[NR_DEVICES];
-
-static int claim_resource(const struct resource *res)
-{
-       int ret = 0;
-
-       switch (res->type) {
-       case RESOURCE_GPIO:
-               ret = gpio_set_func(res->u.gpio.gpio_dev,
-                                   res->u.gpio.start,
-                                   res->u.gpio.nr_pins,
-                                   res->u.gpio.func);
-               break;
-       case RESOURCE_CLOCK:
-               ret = pm_enable_clock(res->u.clock.id, res->u.clock.index);
-               break;
-       }
-
-       return ret;
-}
-
-static void free_resource(const struct resource *res)
-{
-       switch (res->type) {
-       case RESOURCE_GPIO:
-               gpio_free(res->u.gpio.gpio_dev, res->u.gpio.start,
-                         res->u.gpio.nr_pins);
-               break;
-       case RESOURCE_CLOCK:
-               pm_disable_clock(res->u.clock.id, res->u.clock.index);
-               break;
-       }
-}
-
-static int init_dev(const struct device *dev)
-{
-       unsigned int i;
-       int ret = 0;
-
-       for (i = 0; i < dev->nr_resources; i++) {
-               ret = claim_resource(&dev->resource[i]);
-               if (ret)
-                       goto cleanup;
-       }
-
-       return 0;
-
-cleanup:
-       while (i--)
-               free_resource(&dev->resource[i]);
-
-       return ret;
-}
-
-const struct device *get_device(enum device_id devid)
-{
-       struct device_state *devstate;
-       const struct device *dev;
-       unsigned long flags;
-       int initialized = 0;
-       int ret = 0;
-
-       devstate = &device_state[devid];
-       dev = &chip_device[devid];
-
-       flags = disable_interrupts();
-       if (devstate->refcount++)
-               initialized = 1;
-       if (flags)
-               enable_interrupts();
-
-       if (!initialized)
-               ret = init_dev(dev);
-
-       return ret ? NULL : dev;
-}
-
-void put_device(const struct device *dev)
-{
-       struct device_state *devstate;
-       unsigned long devid, flags;
-
-       devid = (unsigned long)(dev - chip_device) / sizeof(struct device);
-       devstate = &device_state[devid];
-
-       flags = disable_interrupts();
-       devstate--;
-       if (!devstate) {
-               unsigned int i;
-               for (i = 0; i < dev->nr_resources; i++)
-                       free_resource(&dev->resource[i]);
-       }
-       if (flags)
-               enable_interrupts();
-}
index b52d798be3d7eecaf35c0800ac5cb5620d538b42..a6fc68867a8c04d764e3221bc971106f1245d770 100644 (file)
@@ -42,8 +42,7 @@ timer_interrupt_handler:
         * We're running at interrupt level 3, so we don't need to save
         * r8-r12 or lr to the stack.
         */
-       mov     r8, lo(timer_overflow)
-       orh     r8, hi(timer_overflow)
+       lda.w   r8, timer_overflow
        ld.w    r9, r8[0]
        mov     r10, -1
        mtsr    SYSREG_COMPARE, r10
index 4123c446167ad4bc93523445fb570ac3cea306ac..0672685cd024ba80e470dcd930b85b0d6f56e54f 100644 (file)
@@ -24,6 +24,8 @@
 #include <asm/sysreg.h>
 #include <asm/ptrace.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 static const char * const cpu_modes[8] = {
        "Application", "Supervisor", "Interrupt level 0", "Interrupt level 1",
        "Interrupt level 2", "Interrupt level 3", "Exception", "NMI"
@@ -109,11 +111,10 @@ void do_unknown_exception(unsigned int ecr, struct pt_regs *regs)
        printf("CPU Mode: %s\n", cpu_modes[mode]);
 
        /* Avoid exception loops */
-       if (regs->sp >= CFG_INIT_SP_ADDR
-           || regs->sp < (CFG_INIT_SP_ADDR - CONFIG_STACKSIZE))
+       if (regs->sp < CFG_SDRAM_BASE || regs->sp >= gd->stack_end)
                printf("\nStack pointer seems bogus, won't do stack dump\n");
        else
-               dump_mem("\nStack: ", regs->sp, CFG_INIT_SP_ADDR);
+               dump_mem("\nStack: ", regs->sp, gd->stack_end);
 
        panic("Unhandled exception\n");
 }
index f36da354528daaa6fae939341cecc3126898105b..a936e03166c1d81de52c760962b642c933ee92f5 100644 (file)
 #include <asm/io.h>
 #include <asm/sdram.h>
 
-#include <asm/arch/platform.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/memory-map.h>
 
 #include "hsdramc1.h"
 
-struct hsdramc {
-       const struct device *hebi;
-       void *regs;
-};
-
-static struct hsdramc hsdramc;
-
 unsigned long sdram_init(const struct sdram_info *info)
 {
        unsigned long *sdram = (unsigned long *)uncached(info->phys_addr);
@@ -44,16 +38,6 @@ unsigned long sdram_init(const struct sdram_info *info)
        unsigned long bus_hz;
        unsigned int i;
 
-       hsdramc.hebi = get_device(DEVICE_HEBI);
-       if (!hsdramc.hebi)
-               return 0;
-
-       /* FIXME: Both of these lines are complete hacks */
-       hsdramc.regs = hsdramc.hebi->regs + 0x400;
-       bus_hz = pm_get_clock_freq(hsdramc.hebi->resource[0].u.clock.id);
-
-       cpu_enable_sdram();
-
        tmp = (HSDRAMC1_BF(NC, info->col_bits - 8)
               | HSDRAMC1_BF(NR, info->row_bits - 11)
               | HSDRAMC1_BF(NB, info->bank_bits - 1)
@@ -74,7 +58,7 @@ unsigned long sdram_init(const struct sdram_info *info)
                           + info->bank_bits + 2);
 #endif
 
-       hsdramc1_writel(&hsdramc, CR, tmp);
+       hsdramc1_writel(CR, tmp);
 
        /*
         * Initialization sequence for SDRAM, from the data sheet:
@@ -87,15 +71,15 @@ unsigned long sdram_init(const struct sdram_info *info)
        /*
         * 2. A Precharge All command is issued to the SDRAM
         */
-       hsdramc1_writel(&hsdramc, MR, HSDRAMC1_MODE_BANKS_PRECHARGE);
-       hsdramc1_readl(&hsdramc, MR);
+       hsdramc1_writel(MR, HSDRAMC1_MODE_BANKS_PRECHARGE);
+       hsdramc1_readl(MR);
        writel(0, sdram);
 
        /*
         * 3. Eight auto-refresh (CBR) cycles are provided
         */
-       hsdramc1_writel(&hsdramc, MR, HSDRAMC1_MODE_AUTO_REFRESH);
-       hsdramc1_readl(&hsdramc, MR);
+       hsdramc1_writel(MR, HSDRAMC1_MODE_AUTO_REFRESH);
+       hsdramc1_readl(MR);
        for (i = 0; i < 8; i++)
                writel(0, sdram);
 
@@ -106,8 +90,8 @@ unsigned long sdram_init(const struct sdram_info *info)
         *
         * CAS from info struct, burst length 1, serial burst type
         */
-       hsdramc1_writel(&hsdramc, MR, HSDRAMC1_MODE_LOAD_MODE);
-       hsdramc1_readl(&hsdramc, MR);
+       hsdramc1_writel(MR, HSDRAMC1_MODE_LOAD_MODE);
+       hsdramc1_readl(MR);
        writel(0, sdram + (info->cas << 4));
 
        /*
@@ -117,9 +101,9 @@ unsigned long sdram_init(const struct sdram_info *info)
         * From the timing diagram, it looks like tMRD is 3
         * cycles...try a dummy read from the peripheral bus.
         */
-       hsdramc1_readl(&hsdramc, MR);
-       hsdramc1_writel(&hsdramc, MR, HSDRAMC1_MODE_NORMAL);
-       hsdramc1_readl(&hsdramc, MR);
+       hsdramc1_readl(MR);
+       hsdramc1_writel(MR, HSDRAMC1_MODE_NORMAL);
+       hsdramc1_readl(MR);
        writel(0, sdram);
 
        /*
@@ -128,7 +112,8 @@ unsigned long sdram_init(const struct sdram_info *info)
         *
         * 15.6 us is a typical value for a burst of length one
         */
-       hsdramc1_writel(&hsdramc, TR, (156 * (bus_hz / 1000)) / 10000);
+       bus_hz = get_sdram_clk_rate();
+       hsdramc1_writel(TR, (156 * (bus_hz / 1000)) / 10000);
 
        printf("SDRAM: %u MB at address 0x%08lx\n",
               sdram_size >> 20, info->phys_addr);
index ce229bca1fbb834748734058d571d8c353611980..305d2cb5d39a6b9ebd9ccb1923636a1f533cdb00 100644 (file)
         | HSDRAMC1_BF(name,value))
 
 /* Register access macros */
-#define hsdramc1_readl(port,reg)                               \
-       readl((port)->regs + HSDRAMC1_##reg)
-#define hsdramc1_writel(port,reg,value)                                \
-       writel((value), (port)->regs + HSDRAMC1_##reg)
+#define hsdramc1_readl(reg)                                    \
+       readl((void *)HSDRAMC_BASE + HSDRAMC1_##reg)
+#define hsdramc1_writel(reg,value)                             \
+       writel((value), (void *)HSDRAMC_BASE + HSDRAMC1_##reg)
 
 #endif /* __ASM_AVR32_HSDRAMC1_H__ */
index ec78cee7147a571aa38935dc5eed2405a09da9a0..ca533b922edaa22e4d5bafd3a82f3dfa96d7115e 100644 (file)
         | HSMC3_BF(name,value))
 
 /* Register access macros */
-#define hsmc3_readl(port,reg)                                  \
-       readl((port)->regs + HSMC3_##reg)
-#define hsmc3_writel(port,reg,value)                           \
-       writel((value), (port)->regs + HSMC3_##reg)
+#define hsmc3_readl(reg)                                       \
+       readl((void *)HSMC_BASE + HSMC3_##reg)
+#define hsmc3_writel(reg,value)                                        \
+       writel((value), (void *)HSMC_BASE + HSMC3_##reg)
 
 #endif /* __CPU_AT32AP_HSMC3_H__ */
index d720cfa942b32edc9622326aa7ae5fa8421de009..c9e04993c777a1344147acf2d108ca5e02d2604a 100644 (file)
@@ -27,7 +27,7 @@
 #include <asm/processor.h>
 #include <asm/sysreg.h>
 
-#include <asm/arch/platform.h>
+#include <asm/arch/memory-map.h>
 
 #define HANDLER_MASK   0x00ffffff
 #define INTLEV_SHIFT   30
@@ -44,8 +44,6 @@ volatile unsigned long timer_overflow;
  */
 static unsigned long tb_factor;
 
-static const struct device *intc_dev;
-
 unsigned long get_tbclk(void)
 {
        return gd->cpu_hz;
@@ -117,16 +115,19 @@ void udelay(unsigned long usec)
 static int set_interrupt_handler(unsigned int nr, void (*handler)(void),
                                 unsigned int priority)
 {
+       extern void _evba(void);
        unsigned long intpr;
        unsigned long handler_addr = (unsigned long)handler;
 
+       handler_addr -= (unsigned long)&_evba;
+
        if ((handler_addr & HANDLER_MASK) != handler_addr
            || (priority & INTLEV_MASK) != priority)
                return -EINVAL;
 
        intpr = (handler_addr & HANDLER_MASK);
        intpr |= (priority & INTLEV_MASK) << INTLEV_SHIFT;
-       writel(intpr, intc_dev->regs + 4 * nr);
+       writel(intpr, (void *)INTC_BASE + 4 * nr);
 
        return 0;
 }
@@ -143,10 +144,7 @@ void timer_init(void)
        do_div(tmp, gd->cpu_hz);
        tb_factor = (u32)tmp;
 
-       intc_dev = get_device(DEVICE_INTC);
-
-       if (!intc_dev
-           || set_interrupt_handler(0, &timer_interrupt_handler, 3))
+       if (set_interrupt_handler(0, &timer_interrupt_handler, 3))
                return;
 
        /* For all practical purposes, this gives us an overflow interrupt */
index 8b6c3a35df505a6510d85445e1bbc74798cee318..9ba0b8ea8b26f189d1c39042908a7939dc570905 100644 (file)
  */
 #include <common.h>
 
-#include <asm/errno.h>
 #include <asm/io.h>
-#include <asm/arch/platform.h>
+#include <asm/arch/gpio.h>
+#include <asm/arch/memory-map.h>
 
 #include "pio2.h"
 
-struct pio_state {
-       const struct device *dev;
-       u32 alloc_mask;
-};
-
-static struct pio_state pio_state[CFG_NR_PIOS];
-
-int gpio_set_func(enum device_id gpio_devid, unsigned int start,
-                 unsigned int nr_pins, enum gpio_func func)
+void gpio_select_periph_A(unsigned int pin, int use_pullup)
 {
-       const struct device *gpio;
-       struct pio_state *state;
-       u32 mask;
-
-       state = &pio_state[gpio_devid - DEVICE_PIOA];
-
-       gpio = get_device(gpio_devid);
-       if (!gpio)
-               return -EBUSY;
-
-       state->dev = gpio;
-       mask = ((1 << nr_pins) - 1) << start;
-
-       if (mask & state->alloc_mask) {
-               put_device(gpio);
-               return -EBUSY;
-       }
-       state->alloc_mask |= mask;
-
-       switch (func) {
-       case GPIO_FUNC_GPIO:
-               /* TODO */
-               return -EINVAL;
-       case GPIO_FUNC_A:
-               pio2_writel(gpio, ASR, mask);
-               pio2_writel(gpio, PDR, mask);
-               pio2_writel(gpio, PUDR, mask);
-               break;
-       case GPIO_FUNC_B:
-               pio2_writel(gpio, BSR, mask);
-               pio2_writel(gpio, PDR, mask);
-               pio2_writel(gpio, PUDR, mask);
-               break;
-       }
-
-       return 0;
+       void *base = gpio_pin_to_addr(pin);
+       uint32_t mask = 1 << (pin & 0x1f);
+
+       if (!base)
+               panic("Invalid GPIO pin %u\n", pin);
+
+       pio2_writel(base, ASR, mask);
+       pio2_writel(base, PDR, mask);
+       if (use_pullup)
+               pio2_writel(base, PUER, mask);
+       else
+               pio2_writel(base, PUDR, mask);
 }
 
-void gpio_free(enum device_id gpio_devid, unsigned int start,
-              unsigned int nr_pins)
+void gpio_select_periph_B(unsigned int pin, int use_pullup)
 {
-       const struct device *gpio;
-       struct pio_state *state;
-       u32 mask;
-
-       state = &pio_state[gpio_devid - DEVICE_PIOA];
-       gpio = state->dev;
-       mask = ((1 << nr_pins) - 1) << start;
-
-       pio2_writel(gpio, ODR, mask);
-       pio2_writel(gpio, PER, mask);
-
-       state->alloc_mask &= ~mask;
-       put_device(gpio);
+       void *base = gpio_pin_to_addr(pin);
+       uint32_t mask = 1 << (pin & 0x1f);
+
+       if (!base)
+               panic("Invalid GPIO pin %u\n", pin);
+
+       pio2_writel(base, BSR, mask);
+       pio2_writel(base, PDR, mask);
+       if (use_pullup)
+               pio2_writel(base, PUER, mask);
+       else
+               pio2_writel(base, PUDR, mask);
 }
index 6b79de3c72bec3fa71f8bbd6599921aff3bff694..9719ea8c433557cb16c9096d4c3fb91912b008e1 100644 (file)
@@ -36,9 +36,9 @@
 #define PIO2_OWSR                              0x00a8
 
 /* Register access macros */
-#define pio2_readl(port,reg)                           \
-       readl((port)->regs + PIO2_##reg)
-#define pio2_writel(port,reg,value)                    \
-       writel((value), (port)->regs + PIO2_##reg)
+#define pio2_readl(base,reg)                           \
+       readl((void *)base + PIO2_##reg)
+#define pio2_writel(base,reg,value)                    \
+       writel((value), (void *)base + PIO2_##reg)
 
 #endif /* __CPU_AT32AP_PIO2_H__ */
index 01ac325ee8f60c372e87eacf24b927e7efa607e0..c78d547f85e00d06758dbdd7a5a819f141bf66b5 100644 (file)
 #include <asm/io.h>
 
 #include <asm/arch/memory-map.h>
-#include <asm/arch/platform.h>
 
 #include "sm.h"
 
-/* Sanity checks */
-#if (CFG_CLKDIV_CPU > CFG_CLKDIV_HSB)          \
-       || (CFG_CLKDIV_HSB > CFG_CLKDIV_PBA)    \
-       || (CFG_CLKDIV_HSB > CFG_CLKDIV_PBB)
-# error Constraint fCPU >= fHSB >= fPB{A,B} violated
-#endif
-#if defined(CONFIG_PLL) && ((CFG_PLL0_MUL < 1) || (CFG_PLL0_DIV < 1))
-# error Invalid PLL multiplier and/or divider
-#endif
-
-DECLARE_GLOBAL_DATA_PTR;
-
-struct clock_domain_state {
-       const struct device *bridge;
-       unsigned long freq;
-       u32 mask;
-};
-static struct clock_domain_state ckd_state[NR_CLOCK_DOMAINS];
-
-int pm_enable_clock(enum clock_domain_id id, unsigned int index)
-{
-       const struct clock_domain *ckd = &chip_clock[id];
-       struct clock_domain_state *state = &ckd_state[id];
-
-       if (ckd->bridge != NO_DEVICE) {
-               state->bridge = get_device(ckd->bridge);
-               if (!state->bridge)
-                       return -EBUSY;
-       }
-
-       state->mask |= 1 << index;
-       if (gd->sm)
-               writel(state->mask, gd->sm->regs + ckd->reg);
-
-       return 0;
-}
-
-void pm_disable_clock(enum clock_domain_id id, unsigned int index)
-{
-       const struct clock_domain *ckd = &chip_clock[id];
-       struct clock_domain_state *state = &ckd_state[id];
-
-       state->mask &= ~(1 << index);
-       if (gd->sm)
-               writel(state->mask, gd->sm->regs + ckd->reg);
-
-       if (ckd->bridge)
-               put_device(state->bridge);
-}
-
-unsigned long pm_get_clock_freq(enum clock_domain_id domain)
-{
-       return ckd_state[domain].freq;
-}
-
-void pm_init(void)
-{
-       uint32_t cksel = 0;
-       unsigned long main_clock;
-
-       /* Make sure we don't disable any device we're already using */
-       get_device(DEVICE_HRAMC);
-       get_device(DEVICE_HEBI);
-
-       /* Enable the PICO as well */
-       ckd_state[CLOCK_CPU].mask |= 1;
-
-       gd->sm = get_device(DEVICE_SM);
-       if (!gd->sm)
-               panic("Unable to claim system manager device!\n");
-
-       /* Disable any devices that haven't been explicitly claimed */
-       sm_writel(gd->sm, PM_PBB_MASK, ckd_state[CLOCK_PBB].mask);
-       sm_writel(gd->sm, PM_PBA_MASK, ckd_state[CLOCK_PBA].mask);
-       sm_writel(gd->sm, PM_HSB_MASK, ckd_state[CLOCK_HSB].mask);
-       sm_writel(gd->sm, PM_CPU_MASK, ckd_state[CLOCK_CPU].mask);
 
 #ifdef CONFIG_PLL
-       /* Initialize the PLL */
-       main_clock = (CFG_OSC0_HZ / CFG_PLL0_DIV) * CFG_PLL0_MUL;
-
-       sm_writel(gd->sm, PM_PLL0, (SM_BF(PLLCOUNT, CFG_PLL0_SUPPRESS_CYCLES)
-                                   | SM_BF(PLLMUL, CFG_PLL0_MUL - 1)
-                                   | SM_BF(PLLDIV, CFG_PLL0_DIV - 1)
-                                   | SM_BF(PLLOPT, CFG_PLL0_OPT)
-                                   | SM_BF(PLLOSC, 0)
-                                   | SM_BIT(PLLEN)));
-
-       /* Wait for lock */
-       while (!(sm_readl(gd->sm, PM_ISR) & SM_BIT(LOCK0))) ;
+#define MAIN_CLK_RATE ((CFG_OSC0_HZ / CFG_PLL0_DIV) * CFG_PLL0_MUL)
 #else
-       main_clock = CFG_OSC0_HZ;
+#define MAIN_CLK_RATE (CFG_OSC0_HZ)
 #endif
 
-       /* Set up clocks for the CPU and all peripheral buses */
-       if (CFG_CLKDIV_CPU) {
-               cksel |= SM_BIT(CPUDIV) | SM_BF(CPUSEL, CFG_CLKDIV_CPU - 1);
-               ckd_state[CLOCK_CPU].freq = main_clock / (1 << CFG_CLKDIV_CPU);
-       } else {
-               ckd_state[CLOCK_CPU].freq = main_clock;
-       }
-       if (CFG_CLKDIV_HSB) {
-               cksel |= SM_BIT(HSBDIV) | SM_BF(HSBSEL, CFG_CLKDIV_HSB - 1);
-               ckd_state[CLOCK_HSB].freq = main_clock / (1 << CFG_CLKDIV_HSB);
-       } else {
-               ckd_state[CLOCK_HSB].freq = main_clock;
-       }
-       if (CFG_CLKDIV_PBA) {
-               cksel |= SM_BIT(PBADIV) | SM_BF(PBASEL, CFG_CLKDIV_PBA - 1);
-               ckd_state[CLOCK_PBA].freq = main_clock / (1 << CFG_CLKDIV_PBA);
-       } else {
-               ckd_state[CLOCK_PBA].freq = main_clock;
-       }
-       if (CFG_CLKDIV_PBB) {
-               cksel |= SM_BIT(PBBDIV) | SM_BF(PBBSEL, CFG_CLKDIV_PBB - 1);
-               ckd_state[CLOCK_PBB].freq = main_clock / (1 << CFG_CLKDIV_PBB);
-       } else {
-               ckd_state[CLOCK_PBB].freq = main_clock;
-       }
-       sm_writel(gd->sm, PM_CKSEL, cksel);
-
-       /* CFG_HZ currently depends on cpu_hz */
-       gd->cpu_hz = ckd_state[CLOCK_CPU].freq;
+DECLARE_GLOBAL_DATA_PTR;
 
-#ifdef CONFIG_PLL
-       /* Use PLL0 as main clock */
-       sm_writel(gd->sm, PM_MCCTRL, SM_BIT(PLLSEL));
-#endif
-}
 
 #endif /* CFG_POWER_MANAGER */
index ce81ef0a4631b0bfc438852d5682f5d3439b96fc..6492c8e81d256c52443ab526fa41476bdd9c5222 100644 (file)
         | SM_BF(name,value))
 
 /* Register access macros */
-#define sm_readl(port,reg)                             \
-       readl((port)->regs + SM_##reg)
-#define sm_writel(port,reg,value)                      \
-       writel((value), (port)->regs + SM_##reg)
+#define sm_readl(reg)                                  \
+       readl((void *)SM_BASE + SM_##reg)
+#define sm_writel(reg,value)                           \
+       writel((value), (void *)SM_BASE + SM_##reg)
 
 #endif /* __CPU_AT32AP_SM_H__ */
index 79ee33b1fac0d028eabd118ad831d4cbbacd9e7d..ab8c2b73d8933737f67000119ee4f3412aa5a346 100644 (file)
@@ -70,32 +70,12 @@ _start:
 
 2:     lddpc   sp, sp_init
 
-       /*
-        * Relocate the data section and initialize .bss.  Everything
-        * is guaranteed to be at least doubleword aligned by the
-        * linker script.
-        */
-       lddpc   r12, .Ldata_vma
-       lddpc   r11, .Ldata_lma
-       lddpc   r10, .Ldata_end
-       sub     r10, r12
-4:     ld.d    r8, r11++
-       sub     r10, 8
-       st.d    r12++, r8
-       brne    4b
-
-       mov     r8, 0
-       mov     r9, 0
-       lddpc   r10, .Lbss_end
-       sub     r10, r12
-4:     sub     r10, 8
-       st.d    r12++, r8
-       brne    4b
-
        /* Initialize the GOT pointer */
        lddpc   r6, got_init
 3:     rsub    r6, pc
-       ld.w    pc, r6[start_u_boot@got]
+
+       /* Let's go */
+       rjmp    board_init_f
 
        .align  2
        .type   sp_init,@object
@@ -103,11 +83,82 @@ sp_init:
        .long   CFG_INIT_SP_ADDR
 got_init:
        .long   3b - _GLOBAL_OFFSET_TABLE_
-.Ldata_lma:
-       .long   __data_lma
-.Ldata_vma:
-       .long   _data
-.Ldata_end:
-       .long   _edata
-.Lbss_end:
-       .long   _end
+
+       /*
+        * void relocate_code(new_sp, new_gd, monitor_addr)
+        *
+        * Relocate the u-boot image into RAM and continue from there.
+        * Does not return.
+        */
+       .global relocate_code
+       .type   relocate_code,@function
+relocate_code:
+       mov     sp, r12         /* use new stack */
+       mov     r12, r11        /* save new_gd */
+       mov     r11, r10        /* save destination address */
+
+       /* copy .text section and flush the cache along the way */
+       lda.w   r8, _text
+       lda.w   r9, _etext
+       sub     lr, r10, r8     /* relocation offset */
+
+1:     ldm     r8++, r0-r3
+       stm     r10, r0-r3
+       sub     r10, -16
+       ldm     r8++, r0-r3
+       stm     r10, r0-r3
+       sub     r10, -16
+       cp.w    r8, r9
+       cache   r10[-4], 0x0d   /* dcache clean/invalidate */
+       cache   r10[-4], 0x01   /* icache invalidate */
+       brlt    1b
+
+       /* flush write buffer */
+       sync    0
+
+       /* copy data sections */
+       lda.w   r9, _edata
+1:     ld.d    r0, r8++
+       st.d    r10++, r0
+       cp.w    r8, r9
+       brlt    1b
+
+       /* zero out .bss */
+       mov     r0, 0
+       mov     r1, 0
+       lda.w   r9, _end
+       sub     r9, r8
+1:     st.d    r10++, r0
+       sub     r9, 8
+       brgt    1b
+
+       /* jump to RAM */
+       sub     r0, pc, . - in_ram
+       add     pc, r0, lr
+
+       .align  2
+in_ram:
+       /* find the new GOT and relocate it */
+       lddpc   r6, got_init_reloc
+3:     rsub    r6, pc
+       mov     r8, r6
+       lda.w   r9, _egot
+       lda.w   r10, _got
+       sub     r9, r10
+1:     ld.w    r0, r8[0]
+       add     r0, lr
+       st.w    r8++, r0
+       sub     r9, 4
+       brgt    1b
+
+       /* Move the exception handlers */
+       mfsr    r2, SYSREG_EVBA
+       add     r2, lr
+       mtsr    SYSREG_EVBA, r2
+
+       /* Do the rest of the initialization sequence */
+       call    board_init_r
+
+       .align  2
+got_init_reloc:
+       .long   3b - _GLOBAL_OFFSET_TABLE_
index 90018f3f52021905e0164ba87d0bdcbfecacd6d1..dd4f299acd01d3483267264681d67112c1b920cc 100644 (file)
@@ -1,6 +1,6 @@
 # U-boot - Makefile
 #
-# Copyright (c) 2005 blackfin.uclinux.org
+# Copyright (c) 2005-2007 Analog Devices Inc.
 #
 # (C) Copyright 2000-2006
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -20,8 +20,8 @@
 #
 # 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
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301 USA
 #
 
 include $(TOPDIR)/config.mk
index 0a04f3e8cef2bdf104162150b210b565dfa796b9..25b96a9f69338e7e509d7e9e27d41fedbf818e58 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - bf533_serial.h Serial Driver defines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * bf533_serial.h: Definitions for the BlackFin BF533 DSP serial driver.
@@ -38,8 +38,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _Bf533_SERIAL_H
index 10817d9ea9a397f0786f1caece5389fd7fb1be1a..6a713c3f51faaef9d60a859ecc9eb257cc87e66f 100644 (file)
@@ -1,6 +1,6 @@
 # U-boot - config.mk
 #
-# Copyright (c) 2005 blackfin.uclinux.org
+# Copyright (c) 2005-2007 Analog Devices Inc.
 #
 # (C) Copyright 2000-2004
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -20,8 +20,8 @@
 #
 # 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
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301 USA
 #
 
 PLATFORM_RELFLAGS += -mcpu=bf533 -ffixed-P5
index ac8ec517ff63c1145b838234d379c38a8316f2e0..8118861f8d86fe4b9f0421f67ccaede04b6663ba 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - cpu.c CPU specific functions
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
@@ -93,7 +93,7 @@ void icache_enable(void)
 
        /* Fill the rest with invalid entry */
        if (j <= 15) {
-               for (; j <= 16; j++) {
+               for (; j < 16; j++) {
                        debug("filling %i with 0", j);
                        *I1++ = 0x0;
                }
@@ -169,7 +169,7 @@ void dcache_enable(void)
 
        /* Fill the rest with invalid entry */
        if (j <= 15) {
-               for (; j <= 16; j++) {
+               for (; j < 16; j++) {
                        debug("filling %i with 0", j);
                        *I1++ = 0x0;
                }
index 821363e764b4376fe610f6b02b6fc3573a25e991..b6b73b1d8f9c0e8fd4bbc494d2a64b958bc05615 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  U-boot - cpu.h
  *
- *  Copyright (c) 2005 blackfin.uclinux.org
+ *  Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _CPU_H_
index 0512f3bf92c4fa29239a872c12e183139ad535dc..62e3d65ae7f20c6240f0597235a8a42b32fb5cf8 100644 (file)
@@ -1,9 +1,9 @@
-/* Copyright (C) 2003 Analog Devices, Inc. All Rights Reserved.
- * Copyright (C) 2004 LG SOft India. All Rights Reserved.
+/* Copyright (C) 2003-2007 Analog Devices Inc.
  *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.
  */
+
 #define ASSEMBLY
 
 #include <asm/linkage.h>
index 524da8f511ce1157c887f594ef5d0ef6a41657ca..c356d53aa6122d37949ad2d07b842aa9fd7eb26d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - interrupt.S Processing of interrupts and exception handling
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -35,8 +35,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #define ASSEMBLY
index 9317f26d9843bb654e840adf1e7e00db9ce6d50a..14d06cf8dfa54c0740d8a99ab4ac07f8ef3c9d47 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - interrupts.c Interrupt related routines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on interrupts.c
  * Copyright 1996 Roman Zippel
@@ -30,8 +30,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index f476f14342acf58296c7e0cbab9f71d1986f1645..55866896a033ab863742ec51960c2996b7b69339 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - ints.c Interrupt related routines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on ints.c
  *
@@ -32,8 +32,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index 11a46be9647b6e7157b2a57ad0e6f8c2a514b0b5..6cab5daac79bdf9dcb5339bc21645b12c105539d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - serial.c Serial driver for BF533
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * bf533_serial.c: Serial driver for BlackFin BF533 DSP internal UART.
@@ -38,8 +38,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index 94556d681f84c10b7830fa9931e32a1854377638..67a60cf21e00f41c085a37ae5643af5b893bae51 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - start.S Startup file of u-boot for BF533/BF561
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on head.S
  * Copyright (c) 2003  Metrowerks/Motorola
@@ -26,8 +26,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 /*
index 72cfafb5e97020749b28a2b0f0bf106bba72c1c7..6d4731b6962939230d7effaec1ad768f3dd0e99f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - start1.S Code running out of RAM after relocation
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #define ASSEMBLY
index 248e34f3f5b0636b6380075f9e3ec9353d841d41..19b1fde41d3f8675df85ed7a0f7c99d5876ee256 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - traps.c Routines related to interrupts and exceptions
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * No original Copyright holder listed,
@@ -29,8 +29,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
@@ -39,7 +39,6 @@
 #include <asm/irq.h>
 #include <asm/system.h>
 #include <asm/traps.h>
-#include <asm/page.h>
 #include <asm/machdep.h>
 #include "cpu.h"
 #include <asm/arch/anomaly.h>
index 61c733886b4d4ffb21de09909477b725af5c7b48..8b0f9c0e93138a5498fea2ac9f1aaddefa57e4d5 100644 (file)
@@ -1,6 +1,6 @@
 # U-boot - Makefile
 #
-# Copyright (c) 2005 blackfin.uclinux.org
+# Copyright (c) 2005-2007 Analog Devices Inc.
 #
 # (C) Copyright 2000-2004
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -20,8 +20,8 @@
 #
 # 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
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301 USA
 #
 
 include $(TOPDIR)/config.mk
index 4d57d9c9ad152f19a653a8161bf3ad80ed29c3a7..8a35789f13cc16ee619d281650c30e623d9e597d 100644 (file)
@@ -1,6 +1,6 @@
 # U-boot - config.mk
 #
-# Copyright (c) 2005 blackfin.uclinux.org
+# Copyright (c) 2005-2007 Analog Devices Inc.
 #
 # (C) Copyright 2000-2004
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -20,8 +20,8 @@
 #
 # 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
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301 USA
 #
 
 PLATFORM_RELFLAGS += -mcpu=bf537 -ffixed-P5
index cb8dc3cd1688ddce66f7cb3c817e8d1edc4f58ed..62f603bdb0f5dea2ad6b10f6db56390070f334a5 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - cpu.c CPU specific functions
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index 821363e764b4376fe610f6b02b6fc3573a25e991..b6b73b1d8f9c0e8fd4bbc494d2a64b958bc05615 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  U-boot - cpu.h
  *
- *  Copyright (c) 2005 blackfin.uclinux.org
+ *  Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _CPU_H_
index c260a8f963cde5c27b7149c9e2c6b771dd141c17..fbd26cc92b0590e852d8787dde6bd2ca90093e10 100644 (file)
@@ -1,9 +1,9 @@
-/* Copyright (C) 2003 Analog Devices, Inc. All Rights Reserved.
- * Copyright (C) 2004 LG SOft India. All Rights Reserved.
+/* Copyright (C) 2003-2007 Analog Devices Inc.
  *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.
  */
+
 #define ASSEMBLY
 
 #include <asm/linkage.h>
index a8be34f027f58aff56aab79f0f94669a68c88274..a71df55a938eb15333718695c2973d668a4ba3cb 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - interrupt.S Processing of interrupts and exception handling
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -35,8 +35,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #define ASSEMBLY
index 2ca76ecb3c85dbb911bcd84033142f9aedda3497..d2213b115683f4c3ba33cf2ffab1121bfd694992 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - interrupts.c Interrupt related routines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on interrupts.c
  * Copyright 1996 Roman Zippel
@@ -30,8 +30,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index f476f14342acf58296c7e0cbab9f71d1986f1645..55866896a033ab863742ec51960c2996b7b69339 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - ints.c Interrupt related routines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on ints.c
  *
@@ -32,8 +32,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index dd4f916d501098140562a31dbb499d5f8f456b4e..e04d08a0e773daea930d33cfb1f5f605536e69d0 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - serial.c Serial driver for BF537
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * bf537_serial.c: Serial driver for BlackFin BF537 internal UART.
@@ -38,8 +38,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index c9ee3dc068d887fe73facef7997320aec7ca0f85..76555c279dbbc28e096766ce4d3fb8a65c07ba6b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - bf537_serial.h Serial Driver defines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * bf533_serial.h: Definitions for the BlackFin BF533 DSP serial driver.
@@ -38,8 +38,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _Bf537_SERIAL_H
index 264e9b6080034371e92643284d30008231e6e6d5..4e02bcb9e524346afcc7d63b3a70cee545095e7e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - start.S Startup file of u-boot for BF537
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on head.S
  * Copyright (c) 2003  Metrowerks/Motorola
@@ -26,8 +26,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 /*
index 72cfafb5e97020749b28a2b0f0bf106bba72c1c7..6d4731b6962939230d7effaec1ad768f3dd0e99f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - start1.S Code running out of RAM after relocation
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #define ASSEMBLY
index 994ece8f64c8aff4c3c1ef6997c5b980fbe48bbd..4e18e27df44e9de9c02eff948c8d73190a2b2e04 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - traps.c Routines related to interrupts and exceptions
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * No original Copyright holder listed,
@@ -29,8 +29,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
@@ -39,7 +39,6 @@
 #include <asm/irq.h>
 #include <asm/system.h>
 #include <asm/traps.h>
-#include <asm/page.h>
 #include <asm/machdep.h>
 #include "cpu.h"
 #include <asm/arch/anomaly.h>
index ee7842a5d3de4b1b6ae2840d2b714eb08b3b657d..29471694d9550f7eba19f4c923d380bd5845a073 100644 (file)
@@ -1,6 +1,6 @@
 # U-boot - Makefile
 #
-# Copyright (c) 2005 blackfin.uclinux.org
+# Copyright (c) 2005-2007 Analog Devices Inc.
 #
 # (C) Copyright 2000-2004
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -20,8 +20,8 @@
 #
 # 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
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301 USA
 #
 
 include $(TOPDIR)/config.mk
index c49a0ba5fef929204d5e5b2cbd7515ac5e8e94d9..f4dc04bfc92452e4b027ae6e95ea11fb283d6945 100644 (file)
@@ -1,6 +1,6 @@
 # U-boot - config.mk
 #
-# Copyright (c) 2005 blackfin.uclinux.org
+# Copyright (c) 2005-2007 Analog Devices Inc.
 #
 # (C) Copyright 2000-2004
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -20,8 +20,8 @@
 #
 # 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
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301 USA
 #
 
 PLATFORM_RELFLAGS += -mcpu=bf561 -ffixed-P5
index a7b53d8a2d73ce1b525f1d5ed43a433b670b471c..5b907cd1ef2a24188d6160548b4541c72a271d39 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - cpu.c CPU specific functions
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index 821363e764b4376fe610f6b02b6fc3573a25e991..b6b73b1d8f9c0e8fd4bbc494d2a64b958bc05615 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *  U-boot - cpu.h
  *
- *  Copyright (c) 2005 blackfin.uclinux.org
+ *  Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _CPU_H_
index 7e12c8305c6a92bce5b0820711b5892e554990aa..0140a60c4949bee1486f5acd363420602795fa47 100644 (file)
@@ -1,9 +1,9 @@
-/* Copyright (C) 2003 Analog Devices, Inc. All Rights Reserved.
- * Copyright (C) 2004 LG SOft India. All Rights Reserved.
+/* Copyright (C) 2003-2007 Analog Devices Inc.
  *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.
  */
+
 #define ASSEMBLY
 
 #include <asm/linkage.h>
index f82fd9b82442e8e9833dc8e91005a26d20069de1..21839ce7de8714a6d7927443268f05b273648115 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - interrupt.S Processing of interrupts and exception handling
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -35,8 +35,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #define ASSEMBLY
index e314f60d2de0798832aa963892e2347a78baac20..ecbc6addfc777f8b50252fa75d5863da18132847 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - interrupts.c Interrupt related routines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on interrupts.c
  * Copyright 1996 Roman Zippel
@@ -30,8 +30,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index 328e5d8ef694a85b61b12e8351ec9e72aa4ad594..27a38a3493a07407f220616e80ba41f23cc77b59 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - ints.c Interrupt related routines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on ints.c
  *
@@ -32,8 +32,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index baec1d3e4de0e0a62705daccec7363c24e5caf05..7f5c6953618577bd01c8d7f2e61fc07ce83b45ab 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - serial.c Serial driver for BF561
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * bf533_serial.c: Serial driver for BlackFin BF533 DSP internal UART.
@@ -38,8 +38,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index 98c1242a325ccc164b5eef2f010b923c443dc11f..c1cbf36acf15163594ebe2b76468d003dc288600 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - bf561_serial.h Serial Driver defines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * bf533_serial.h: Definitions for the BlackFin BF533 DSP serial driver.
@@ -38,8 +38,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _Bf561_SERIAL_H
index 93336480486c37debe76ea517149103e352cdae2..bd26cf32f6465fa9a2c25224eaaf3095b3507a2a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - start.S Startup file of u-boot for BF533/BF561
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on head.S
  * Copyright (c) 2003  Metrowerks/Motorola
@@ -26,8 +26,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 /*
index 72cfafb5e97020749b28a2b0f0bf106bba72c1c7..6d4731b6962939230d7effaec1ad768f3dd0e99f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - start1.S Code running out of RAM after relocation
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #define ASSEMBLY
index f5ff3a8079e81ac4af01855ff47d8de3875b1183..7e2dcd17add74b01d54d9a5c7ee89ed5453d86b2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - traps.c Routines related to interrupts and exceptions
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * No original Copyright holder listed,
@@ -29,8 +29,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
index 4de34fd5b9e395d87c5120ffd9bbaece005c8043..7f020b5d576d42c504af9782c3fa75c7d9621d29 100644 (file)
@@ -87,7 +87,7 @@ START := $(addprefix $(obj),$(START))
 
 all:   $(LIB)
 
-$(LIB):        $(obj).depend $(OBJS)
+$(LIB):        $(OBJS)
        $(AR) $(ARFLAGS) $@ $(OBJS)
 
 #########################################################################
index db1afa553ddecc4b40782a6c16670deca48a9b03..9d542013ccc3660551451b37c1b1b875d439be9c 100644 (file)
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB    = $(obj)lib$(CPU).a
 
 START  = start.o
-SOBJS  = dcache.o icache.o irq.o disable_int.o enable_int.o
+SOBJS  = irq.o
 COBJS  = cpu.o interrupts.o cache.o exception.o timer.o
 
 SRCS   := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
old mode 100644 (file)
new mode 100755 (executable)
index fc388eb..4f36a84
@@ -23,6 +23,7 @@
  */
 
 #include <common.h>
+#include <asm/asm.h>
 
 #if (CONFIG_COMMANDS & CFG_CMD_CACHE)
 
@@ -45,4 +46,20 @@ int icache_status (void)
        __asm__ __volatile__ ("and %0,%0,%1"::"r" (i), "r" (mask):"memory");
        return i;
 }
+
+void   icache_enable (void) {
+       MSRSET(0x20);
+}
+
+void   icache_disable(void) {
+       MSRCLR(0x20);
+}
+
+void   dcache_enable (void) {
+       MSRSET(0x80);
+}
+
+void   dcache_disable(void) {
+       MSRCLR(0x80);
+}
 #endif
diff --git a/cpu/microblaze/dcache.S b/cpu/microblaze/dcache.S
deleted file mode 100644 (file)
index eaf9671..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * (C) Copyright 2007 Michal Simek
- *
- * Michal  SIMEK <monstr@monstr.eu>
- *
- * 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
-       .globl  dcache_enable
-       .ent    dcache_enable
-       .align  2
-dcache_enable:
-       /* Make space on stack for a temporary */
-       addi    r1, r1, -4
-       /* Save register r12 */
-       swi     r12, r1, 0
-       /* Read the MSR register */
-       mfs     r12, rmsr
-       /* Set the instruction enable bit */
-       ori     r12, r12, 0x80
-       /* Save the MSR register */
-       mts     rmsr, r12
-       /* Load register r12 */
-       lwi     r12, r1, 0
-       /* Return */
-       rtsd    r15, 8
-       /* Update stack in the delay slot */
-       addi    r1, r1, 4
-       .end    dcache_enable
-
-       .text
-       .globl  dcache_disable
-       .ent    dcache_disable
-       .align  2
-dcache_disable:
-       /* Make space on stack for a temporary */
-       addi    r1, r1, -4
-       /* Save register r12 */
-       swi     r12, r1, 0
-       /* Read the MSR register */
-       mfs     r12, rmsr
-       /* Clear the data cache enable bit */
-       andi    r12, r12, ~0x80
-       /* Save the MSR register */
-       mts     rmsr, r12
-       /* Load register r12 */
-       lwi     r12, r1, 0
-       /* Return */
-       rtsd    r15, 8
-       /* Update stack in the delay slot */
-       addi    r1, r1, 4
-       .end    dcache_disable
index b135acbad9ddbe60a3ef858dfec3212607be3639..d76b05a526291e8670d4274a4d8dd66b31de782f 100644 (file)
  */
 
 #include <common.h>
+#include <asm/asm.h>
 
 void _hw_exception_handler (void)
 {
        int address = 0;
        int state = 0;
        /* loading address of exception EAR */
-       __asm__ __volatile ("mfs %0,rear"::"r" (address):"memory");
+       MFS (address, rear);
        /* loading excetpion state register ESR */
-       __asm__ __volatile ("mfs %0,resr"::"r" (state):"memory");
+       MFS (state, resr);
        printf ("Hardware exception at 0x%x address\n", address);
        switch (state & 0x1f) { /* mask on exception cause */
        case 0x1:
@@ -49,6 +50,11 @@ void _hw_exception_handler (void)
        case 0x5:
                puts ("Divide by zero exception\n");
                break;
+#ifdef MICROBLAZE_V5
+       case 0x1000:
+               puts ("Exception in delay slot\n");
+               break;
+#endif
        default:
                puts ("Undefined cause\n");
                break;
diff --git a/cpu/microblaze/icache.S b/cpu/microblaze/icache.S
deleted file mode 100644 (file)
index 25940d1..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * (C) Copyright 2007 Michal Simek
- *
- * Michal  SIMEK <monstr@monstr.eu>
- *
- * 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
-       .globl  icache_enable
-       .ent    icache_enable
-       .align  2
-icache_enable:
-       /* Make space on stack for a temporary */
-       addi    r1, r1, -4
-       /* Save register r12 */
-       swi     r12, r1, 0
-       /* Read the MSR register */
-       mfs     r12, rmsr
-       /* Set the instruction enable bit */
-       ori     r12, r12, 0x20
-       /* Save the MSR register */
-       mts     rmsr, r12
-       /* Load register r12 */
-       lwi     r12, r1, 0
-       /* Return */
-       rtsd    r15, 8
-       /* Update stack in the delay slot */
-       addi    r1, r1, 4
-       .end    icache_enable
-
-       .text
-       .globl  icache_disable
-       .ent    icache_disable
-       .align  2
-icache_disable:
-       /* Make space on stack for a temporary */
-       addi    r1, r1, -4
-       /* Save register r12 */
-       swi     r12, r1, 0
-       /* Read the MSR register */
-       mfs     r12, rmsr
-       /* Clear the instruction enable bit */
-       andi    r12, r12, ~0x20
-       /* Save the MSR register */
-       mts     rmsr, r12
-       /* Load register r12 */
-       lwi     r12, r1, 0
-       /* Return */
-       rtsd    r15, 8
-       /* Update stack in the delay slot */
-       addi    r1, r1, 4
-       .end    icache_disable
old mode 100644 (file)
new mode 100755 (executable)
index 2db847c..b61153f
@@ -27,6 +27,7 @@
 #include <common.h>
 #include <command.h>
 #include <asm/microblaze_intc.h>
+#include <asm/asm.h>
 
 #undef DEBUG_INT
 
@@ -35,12 +36,12 @@ extern void microblaze_enable_interrupts (void);
 
 void enable_interrupts (void)
 {
-       microblaze_enable_interrupts ();
+       MSRSET(0x2);
 }
 
 int disable_interrupts (void)
 {
-       microblaze_disable_interrupts ();
+       MSRCLR(0x2);
        return 0;
 }
 
@@ -48,6 +49,10 @@ int disable_interrupts (void)
 #ifdef CFG_TIMER_0
 extern void timer_init (void);
 #endif
+#ifdef CFG_FSL_2
+extern void fsl_init2 (void);
+#endif
+
 
 static struct irq_action vecs[CFG_INTC_0_NUM];
 
@@ -106,7 +111,6 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)
                act->count = 0;
                enable_one_interrupt (irq);
        } else {                /* disable */
-
                act->handler = (interrupt_handler_t *) def_hdlr;
                act->arg = (void *)irq;
                disable_one_interrupt (irq);
@@ -140,6 +144,9 @@ int interrupts_init (void)
        intc_init ();
 #ifdef CFG_TIMER_0
        timer_init ();
+#endif
+#ifdef CFG_FSL_2
+       fsl_init2 ();
 #endif
        enable_interrupts ();
        return 0;
@@ -147,12 +154,13 @@ int interrupts_init (void)
 
 void interrupt_handler (void)
 {
-       int irqs;
-       irqs = (intc->isr & intc->ier); /* find active interrupt */
-
+       int irqs = (intc->isr & intc->ier);     /* find active interrupt */
+       int i = 1;
 #ifdef DEBUG_INT
+       int value;
        printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,
                intc->iar, intc->mer);
+       R14(value);
        printf ("Interrupt handler on %x line, r14 %x\n", irqs, value);
 #endif
        struct irq_action *act = vecs;
@@ -165,15 +173,19 @@ void interrupt_handler (void)
 #endif
                        act->handler (act->arg);
                        act->count++;
+                       intc->iar = i;
+                       return;
                }
                irqs >>= 1;
                act++;
+               i <<= 1;
        }
-       intc->iar = 0xFFFFFFFF; /* erase all events */
-#ifdef DEBUG
+
+#ifdef DEBUG_INT
        printf ("Dump INTC reg, isr %x, ier %x, iar %x, mer %x\n", intc->isr,
                intc->ier, intc->iar, intc->mer);
-       printf ("Interrupt handler on %x line, r14\n", irqs);
+       R14(value);
+       printf ("Interrupt handler on %x line, r14 %x\n", irqs, value);
 #endif
 }
 #endif
old mode 100644 (file)
new mode 100755 (executable)
index a4e3fbf..e1fc190
@@ -23,6 +23,7 @@
  */
 
 #include <config.h>
+#include <asm/asm.h>
        .text
        .global _interrupt_handler
 _interrupt_handler:
@@ -151,6 +152,11 @@ _interrupt_handler:
        addi    r1, r1, 4
 
        /* enable_interrupt */
+#ifdef XILINX_USE_MSR_INSTR
+       msrset  r0, 2
+#else
+       /* FIXME unstable in stressed mode - two irqs */
+       nop
        addi    r1, r1, -4
        swi     r12, r1, 0
        mfs     r12, rmsr
@@ -159,6 +165,7 @@ _interrupt_handler:
        lwi     r12, r1, 0
        addi    r1, r1, 4
        nop
+#endif
        bra     r14
        nop
        nop
index ca3befc24e8ef868432bcf72b5f6b9064dd118d5..3c027ff9bb1c21eced03fa62e606d5c1f624ba70 100644 (file)
@@ -117,3 +117,36 @@ clear_bss:
 3:     /* jumping to board_init */
        brai    board_init
 1:     bri     1b
+
+/*
+ * Read 16bit little endian
+ */
+       .text
+       .global in16
+       .ent    in16
+       .align  2
+in16:  lhu     r3, r0, r5
+       bslli   r4, r3, 8
+       bsrli   r3, r3, 8
+       andi    r4, r4, 0xffff
+       or      r3, r3, r4
+       rtsd    r15, 8
+       sext16  r3, r3
+       .end    in16
+
+/*
+ * Write 16bit little endian
+ * first parameter(r5) - address, second(r6) - short value
+ */
+       .text
+       .global out16
+       .ent    out16
+       .align  2
+out16: bslli   r3, r6, 8
+       bsrli   r6, r6, 8
+       andi    r3, r3, 0xffff
+       or      r3, r3, r6
+       sh      r3, r0, r5
+       rtsd    r15, 8
+       or      r0, r0, r0
+       .end    out16
index be4fd57cc49dd3b76041071ba4d3332426af7021..ab1cb127492b0c18dff5eb7d3884ae0af117bf3f 100644 (file)
@@ -24,6 +24,7 @@
 
 #include <common.h>
 #include <asm/microblaze_timer.h>
+#include <asm/microblaze_intc.h>
 
 volatile int timestamp = 0;
 
@@ -44,9 +45,6 @@ void set_timer (ulong t)
 
 #ifdef CFG_INTC_0
 #ifdef CFG_TIMER_0
-extern void install_interrupt_handler (int irq, interrupt_handler_t * hdlr,
-                                      void *arg);
-
 microblaze_timer_t *tmr = (microblaze_timer_t *) (CFG_TIMER_0_ADDR);
 
 void timer_isr (void *arg)
index 813aa7935d168f78203bf0a01fe670e9df4e47c1..1eac2bbfbe10a2f1e64c4d5f0bb959630c366258 100644 (file)
@@ -53,12 +53,16 @@ int checkcpu (void)
 #else
        svr = get_svr();
        pvr = get_pvr();
-       switch (SVR_VER (svr)) {
-       case SVR_MPC5200:
-               printf ("MPC5200");
+
+       switch (pvr) {
+       case PVR_5200:
+               printf("MPC5200");
+               break;
+       case PVR_5200B:
+               printf("MPC5200B");
                break;
        default:
-               printf ("MPC52??  (SVR %08x)", svr);
+               printf("Unknown MPC5xxx");
                break;
        }
 
@@ -127,5 +131,9 @@ ft_cpu_setup(void *blob, bd_t *bd)
        p = ft_get_prop(blob, "/" OF_SOC "/ethernet@3000/mac-address", &len);
        if (p != NULL)
                memcpy(p, bd->bi_enetaddr, 6);
+
+       p = ft_get_prop(blob, "/" OF_SOC "/ethernet@3000/local-mac-address", &len);
+       if (p != NULL)
+               memcpy(p, bd->bi_enetaddr, 6);
 }
 #endif
index 7e6582185257e5d873ca359a01bf2216e1dd1790..d7440308a45802bbb879c9141ce835c46eb0314a 100644 (file)
@@ -156,21 +156,21 @@ void cpu_init_f (void)
        *(vu_long *)(MPC5XXX_XLBARB + 0x40) |= (1 << 15);
        *(vu_long *)(MPC5XXX_XLBARB + 0x70) = CFG_SDRAM_BASE | 0x1d;
 
-# if defined(CFG_IPBSPEED_133)
+# if defined(CFG_IPBCLK_EQUALS_XLBCLK)
        /* Motorola reports IPB should better run at 133 MHz. */
        *(vu_long *)MPC5XXX_ADDECR |= 1;
        /* pci_clk_sel = 0x02, ipb_clk_sel = 0x00; */
        addecr = *(vu_long *)MPC5XXX_CDM_CFG;
        addecr &= ~0x103;
-#  if defined(CFG_PCISPEED_66)
+#  if defined(CFG_PCICLK_EQUALS_IPBCLK_DIV2)
        /* pci_clk_sel = 0x01 -> IPB_CLK/2 */
        addecr |= 0x01;
 #  else
        /* pci_clk_sel = 0x02 -> XLB_CLK/4 = IPB_CLK/4 */
        addecr |= 0x02;
-#  endif /* CFG_PCISPEED_66 */
+#  endif /* CFG_PCICLK_EQUALS_IPBCLK_DIV2 */
        *(vu_long *)MPC5XXX_CDM_CFG = addecr;
-# endif        /* CFG_IPBSPEED_133 */
+# endif        /* CFG_IPBCLK_EQUALS_XLBCLK */
        /* Configure the XLB Arbiter */
        *(vu_long *)MPC5XXX_XLBARB_MPRIEN = 0xff;
        *(vu_long *)MPC5XXX_XLBARB_MPRIVAL = 0x11111111;
index e59bd85e1b5dff47fbf414c06bcde0bf25747cc2..813636655b2d10c607bdbaf1fdeadc4001c9cd54 100644 (file)
@@ -428,6 +428,13 @@ static int mpc5xxx_fec_init_phy(struct eth_device *dev, bd_t * bis)
         */
        fec->eth->imask = 0x00000000;
 
+/*
+ * In original Promess-provided code PHY initialization is disabled with the
+ * following comment: "Phy initialization is DISABLED for now.  There was a
+ * problem with running 100 Mbps on PRO board". Thus we temporarily disable
+ * PHY initialization for the Motion-PRO board, until a proper fix is found.
+ */
+
        if (fec->xcv_type != SEVENWIRE) {
                /*
                 * Set MII_SPEED = (1/(mii_speed * 2)) * System Clock
index 4b9dcc8180f240a1c4c9afd49eee2051a1df65ec..bb96f774fe4e3cc795c6aa1bd0742a458fd028a5 100644 (file)
@@ -29,7 +29,7 @@ LIB   = $(obj)lib$(CPU).a
 
 START  = start.o
 COBJS  = traps.o cpu.o cpu_init.o speed.o interrupts.o \
-         spd_sdram.o qe_io.o
+         spd_sdram.o qe_io.o pci.o
 
 SRCS   := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS   := $(addprefix $(obj),$(SOBJS) $(COBJS))
index 21b16463cd7429574795b7893daa0332ef0ce63a..e078f27a23d56e91dd8d8f59cf9e2b1552a8405a 100644 (file)
@@ -52,13 +52,26 @@ int checkcpu(void)
 
        immr = (immap_t *)CFG_IMMR;
 
-       if ((pvr & 0xFFFF0000) != PVR_83xx) {
-               puts("Not MPC83xx Family!!!\n");
-               return -1;
+       puts("CPU:   ");
+
+       switch (pvr & 0xffff0000) {
+               case PVR_E300C1:
+                       printf("e300c1, ");
+                       break;
+
+               case PVR_E300C2:
+                       printf("e300c2, ");
+                       break;
+
+               case PVR_E300C3:
+                       printf("e300c3, ");
+                       break;
+
+               default:
+                       printf("Unknown core, ");
        }
 
        spridr = immr->sysconf.spridr;
-       puts("CPU: ");
        switch(spridr) {
        case SPR_8349E_REV10:
        case SPR_8349E_REV11:
@@ -124,6 +137,18 @@ int checkcpu(void)
        case SPR_8321_REV11:
                puts("MPC8321, ");
                break;
+       case SPR_8311_REV10:
+               puts("MPC8311, ");
+               break;
+       case SPR_8311E_REV10:
+               puts("MPC8311E, ");
+               break;
+       case SPR_8313_REV10:
+               puts("MPC8313, ");
+               break;
+       case SPR_8313E_REV10:
+               puts("MPC8313E, ");
+               break;
        default:
                puts("Rev: Unknown revision number.\nWarning: Unsupported cpu revision!\n");
                return 0;
@@ -133,10 +158,12 @@ int checkcpu(void)
        /* Multiple revisons of 834x processors may have the same SPRIDR value.
         * So use PVR to identify the revision number.
         */
-       printf("Rev: %02x at %s MHz\n", PVR_MAJ(pvr)<<4 | PVR_MIN(pvr), strmhz(buf, clock));
+       printf("Rev: %02x at %s MHz", PVR_MAJ(pvr)<<4 | PVR_MIN(pvr), strmhz(buf, clock));
 #else
-       printf("Rev: %02x at %s MHz\n", spridr & 0x0000FFFF, strmhz(buf, clock));
+       printf("Rev: %02x at %s MHz", spridr & 0x0000FFFF, strmhz(buf, clock));
 #endif
+       printf(", CSB: %4d MHz\n", gd->csb_clk / 1000000);
+
        return 0;
 }
 
@@ -299,93 +326,175 @@ void watchdog_reset (void)
 
 #if defined(CONFIG_OF_LIBFDT)
 
+/*
+ * "Setter" functions used to add/modify FDT entries.
+ */
+static int fdt_set_eth0(void *fdt, int nodeoffset, const char *name, bd_t *bd)
+{
+       /*
+        * Fix it up if it exists, don't create it if it doesn't exist.
+        */
+       if (fdt_get_property(fdt, nodeoffset, name, 0)) {
+               return fdt_setprop(fdt, nodeoffset, name, bd->bi_enetaddr, 6);
+       }
+       return -FDT_ERR_NOTFOUND;
+}
+#ifdef CONFIG_HAS_ETH1
+/* second onboard ethernet port */
+static int fdt_set_eth1(void *fdt, int nodeoffset, const char *name, bd_t *bd)
+{
+       /*
+        * Fix it up if it exists, don't create it if it doesn't exist.
+        */
+       if (fdt_get_property(fdt, nodeoffset, name, 0)) {
+               return fdt_setprop(fdt, nodeoffset, name, bd->bi_enet1addr, 6);
+       }
+       return -FDT_ERR_NOTFOUND;
+}
+#endif
+#ifdef CONFIG_HAS_ETH2
+/* third onboard ethernet port */
+static int fdt_set_eth2(void *fdt, int nodeoffset, const char *name, bd_t *bd)
+{
+       /*
+        * Fix it up if it exists, don't create it if it doesn't exist.
+        */
+       if (fdt_get_property(fdt, nodeoffset, name, 0)) {
+               return fdt_setprop(fdt, nodeoffset, name, bd->bi_enet2addr, 6);
+       }
+       return -FDT_ERR_NOTFOUND;
+}
+#endif
+#ifdef CONFIG_HAS_ETH3
+/* fourth onboard ethernet port */
+static int fdt_set_eth3(void *fdt, int nodeoffset, const char *name, bd_t *bd)
+{
+       /*
+        * Fix it up if it exists, don't create it if it doesn't exist.
+        */
+       if (fdt_get_property(fdt, nodeoffset, name, 0)) {
+               return fdt_setprop(fdt, nodeoffset, name, bd->bi_enet3addr, 6);
+       }
+       return -FDT_ERR_NOTFOUND;
+}
+#endif
+
+static int fdt_set_busfreq(void *fdt, int nodeoffset, const char *name, bd_t *bd)
+{
+       u32  tmp;
+       /*
+        * Create or update the property.
+        */
+       tmp = cpu_to_be32(bd->bi_busfreq);
+       return fdt_setprop(fdt, nodeoffset, name, &tmp, sizeof(tmp));
+}
+
 /*
  * Fixups to the fdt.  If "create" is TRUE, the node is created
  * unconditionally.  If "create" is FALSE, the node is updated
  * only if it already exists.
  */
-#define        FT_UPDATE       0x00000000              /* update existing property only */
-#define        FT_CREATE       0x00000001              /* create property if it doesn't exist */
-#define        FT_BUSFREQ      0x00000002              /* source is bd->bi_busfreq */
-#define        FT_ENETADDR     0x00000004              /* source is bd->bi_enetaddr */
 static const struct {
-       int  createflags;
        char *node;
        char *prop;
+       int (*set_fn)(void *fdt, int nodeoffset, const char *name, bd_t *bd);
 } fixup_props[] = {
-       {       FT_CREATE | FT_BUSFREQ,
-               "/cpus/" OF_CPU,
+       {       "/cpus/" OF_CPU,
                 "bus-frequency",
+               fdt_set_busfreq
        },
-       {       FT_CREATE | FT_BUSFREQ,
-               "/cpus/" OF_SOC,
-               "bus-frequency"
+       {       "/cpus/" OF_SOC,
+               "bus-frequency",
+               fdt_set_busfreq
        },
-       {       FT_CREATE | FT_BUSFREQ,
-               "/" OF_SOC "/serial@4500/",
-               "clock-frequency"
+       {       "/" OF_SOC "/serial@4500/",
+               "clock-frequency",
+               fdt_set_busfreq
        },
-       {       FT_CREATE | FT_BUSFREQ,
-               "/" OF_SOC "/serial@4600/",
-               "clock-frequency"
+       {       "/" OF_SOC "/serial@4600/",
+               "clock-frequency",
+               fdt_set_busfreq
        },
 #ifdef CONFIG_MPC83XX_TSEC1
-       {       FT_UPDATE | FT_ENETADDR,
-               "/" OF_SOC "/ethernet@24000,
+       {       "/" OF_SOC "/ethernet@24000,
                "mac-address",
+               fdt_set_eth0
        },
-       {       FT_UPDATE | FT_ENETADDR,
-               "/" OF_SOC "/ethernet@24000,
+       {       "/" OF_SOC "/ethernet@24000,
                "local-mac-address",
+               fdt_set_eth0
        },
 #endif
 #ifdef CONFIG_MPC83XX_TSEC2
-       {       FT_UPDATE | FT_ENETADDR,
-               "/" OF_SOC "/ethernet@25000,
+       {       "/" OF_SOC "/ethernet@25000,
+               "mac-address",
+               fdt_set_eth1
+       },
+       {       "/" OF_SOC "/ethernet@25000,
+               "local-mac-address",
+               fdt_set_eth1
+       },
+#endif
+#ifdef CONFIG_UEC_ETH1
+#if CFG_UEC1_UCC_NUM == 0  /* UCC1 */
+       {       "/" OF_QE "/ucc@2000/mac-address",
+               "mac-address",
+               fdt_set_eth0
+       },
+       {       "/" OF_QE "/ucc@2000/mac-address",
+               "local-mac-address",
+               fdt_set_eth0
+       },
+#elif CFG_UEC1_UCC_NUM == 2  /* UCC3 */
+       {       "/" OF_QE "/ucc@2200/mac-address",
                "mac-address",
+               fdt_set_eth0
        },
-       {       FT_UPDATE | FT_ENETADDR,
-               "/" OF_SOC "/ethernet@25000,
+       {       "/" OF_QE "/ucc@2200/mac-address",
                "local-mac-address",
+               fdt_set_eth0
        },
 #endif
+#endif
+#ifdef CONFIG_UEC_ETH2
+#if CFG_UEC2_UCC_NUM == 1  /* UCC2 */
+       {       "/" OF_QE "/ucc@3000/mac-address",
+               "mac-address",
+               fdt_set_eth1
+       },
+       {       "/" OF_QE "/ucc@3000/mac-address",
+               "local-mac-address",
+               fdt_set_eth1
+       },
+#elif CFG_UEC1_UCC_NUM == 3  /* UCC4 */
+       {       "/" OF_QE "/ucc@3200/mac-address",
+               "mac-address",
+               fdt_set_eth1
+       },
+       {       "/" OF_QE "/ucc@3200/mac-address",
+               "local-mac-address",
+               fdt_set_eth1
+       },
+#endif
+#endif
 };
 
 void
 ft_cpu_setup(void *blob, bd_t *bd)
 {
-       int   nodeoffset;
-       int   err;
-       int j;
+       int  nodeoffset;
+       int  err;
+       int  j;
 
        for (j = 0; j < (sizeof(fixup_props) / sizeof(fixup_props[0])); j++) {
-               nodeoffset = fdt_path_offset (fdt, fixup_props[j].node);
+               nodeoffset = fdt_path_offset(fdt, fixup_props[j].node);
                if (nodeoffset >= 0) {
-                       /*
-                        * If unconditional create or the property already exists...
-                        */
-                       if ((fixup_props[j].createflags & FT_CREATE) ||
-                               (fdt_get_property(fdt, nodeoffset, fixup_props[j].prop, 0))) {
-                               if (fixup_props[j].createflags & FT_BUSFREQ) {
-                                       u32   tmp;
-
-                                       tmp = cpu_to_be32(bd->bi_busfreq);
-                                       err = fdt_setprop(fdt, nodeoffset,
-                                                       fixup_props[j].prop, &tmp, sizeof(tmp));
-                               } else if (fixup_props[j].createflags & FT_ENETADDR) {
-                                       err = fdt_setprop(fdt, nodeoffset,
-                                                       fixup_props[j].prop, bd->bi_enetaddr, 6);
-                               } else {
-                                       printf("ft_cpu_setup: %s %s has no flag for the value to set\n",
-                                               fixup_props[j].node,
-                                               fixup_props[j].prop);
-                               }
-                               if (err < 0)
-                                       printf("libfdt: %s %s returned %s\n",
-                                               fixup_props[j].node,
-                                               fixup_props[j].prop,
-                                               fdt_strerror(err));
-                       }
+                       err = (*fixup_props[j].set_fn)(blob, nodeoffset, fixup_props[j].prop, bd);
+                       if (err < 0)
+                               printf("set_fn/libfdt: %s %s returned %s\n",
+                                       fixup_props[j].node,
+                                       fixup_props[j].prop,
+                                       fdt_strerror(err));
                }
        }
 }
diff --git a/cpu/mpc83xx/pci.c b/cpu/mpc83xx/pci.c
new file mode 100644 (file)
index 0000000..785d612
--- /dev/null
@@ -0,0 +1,192 @@
+/*
+ * Copyright (C) Freescale Semiconductor, Inc. 2007
+ *
+ * Author: Scott Wood <scottwood@freescale.com>,
+ * with some bits from older board-specific PCI initialization.
+ *
+ * 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 <pci.h>
+#include <ft_build.h>
+#include <asm/mpc8349_pci.h>
+
+#ifdef CONFIG_83XX_GENERIC_PCI
+#define MAX_BUSES 2
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static struct pci_controller pci_hose[MAX_BUSES];
+static int pci_num_buses;
+
+static void pci_init_bus(int bus, struct pci_region *reg)
+{
+       volatile immap_t *immr = (volatile immap_t *)CFG_IMMR;
+       volatile pot83xx_t *pot = immr->ios.pot;
+       volatile pcictrl83xx_t *pci_ctrl = &immr->pci_ctrl[bus];
+       struct pci_controller *hose = &pci_hose[bus];
+       u32 dev;
+       u16 reg16;
+       int i;
+
+       if (bus == 1)
+               pot += 3;
+
+       /* Setup outbound translation windows */
+       for (i = 0; i < 3; i++, reg++, pot++) {
+               if (reg->size == 0)
+                       break;
+
+               hose->regions[i] = *reg;
+               hose->region_count++;
+
+               pot->potar = reg->bus_start >> 12;
+               pot->pobar = reg->phys_start >> 12;
+               pot->pocmr = ~(reg->size - 1) >> 12;
+
+               if (reg->flags & PCI_REGION_IO)
+                       pot->pocmr |= POCMR_IO;
+#ifdef CONFIG_83XX_PCI_STREAMING
+               else if (reg->flags & PCI_REGION_PREFETCH)
+                       pot->pocmr |= POCMR_SE;
+#endif
+
+               if (bus == 1)
+                       pot->pocmr |= POCMR_DST;
+
+               pot->pocmr |= POCMR_EN;
+       }
+
+       /* Point inbound translation at RAM */
+       pci_ctrl->pitar1 = 0;
+       pci_ctrl->pibar1 = 0;
+       pci_ctrl->piebar1 = 0;
+       pci_ctrl->piwar1 = PIWAR_EN | PIWAR_PF | PIWAR_RTT_SNOOP |
+                          PIWAR_WTT_SNOOP | (__ilog2(gd->ram_size) - 1);
+
+       i = hose->region_count++;
+       hose->regions[i].bus_start = 0;
+       hose->regions[i].phys_start = 0;
+       hose->regions[i].size = gd->ram_size;
+       hose->regions[i].flags = PCI_REGION_MEM | PCI_REGION_MEMORY;
+
+       hose->first_busno = 0;
+       hose->last_busno = 0xff;
+
+       pci_setup_indirect(hose, CFG_IMMR + 0x8300 + bus * 0x80,
+                                CFG_IMMR + 0x8304 + bus * 0x80);
+
+       pci_register_hose(hose);
+
+       /*
+        * Write to Command register
+        */
+       reg16 = 0xff;
+       dev = PCI_BDF(hose->first_busno, 0, 0);
+       pci_hose_read_config_word(hose, dev, PCI_COMMAND, &reg16);
+       reg16 |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY;
+       pci_hose_write_config_word(hose, dev, PCI_COMMAND, reg16);
+
+       /*
+        * Clear non-reserved bits in status register.
+        */
+       pci_hose_write_config_word(hose, dev, PCI_STATUS, 0xffff);
+       pci_hose_write_config_byte(hose, dev, PCI_LATENCY_TIMER, 0x80);
+       pci_hose_write_config_byte(hose, dev, PCI_CACHE_LINE_SIZE, 0x08);
+
+#ifdef CONFIG_PCI_SCAN_SHOW
+       printf("PCI:   Bus Dev VenId DevId Class Int\n");
+#endif
+       /*
+        * Hose scan.
+        */
+       hose->last_busno = pci_hose_scan(hose);
+}
+
+/*
+ * The caller must have already set OCCR, and the PCI_LAW BARs
+ * must have been set to cover all of the requested regions.
+ *
+ * If fewer than three regions are requested, then the region
+ * list is terminated with a region of size 0.
+ */
+void mpc83xx_pci_init(int num_buses, struct pci_region **reg, int warmboot)
+{
+       volatile immap_t *immr = (volatile immap_t *)CFG_IMMR;
+       int i;
+
+       if (num_buses > MAX_BUSES) {
+               printf("%d PCI buses requsted, %d supported\n",
+                      num_buses, MAX_BUSES);
+
+               num_buses = MAX_BUSES;
+       }
+
+       pci_num_buses = num_buses;
+
+       /*
+        * Release PCI RST Output signal.
+        * Power on to RST high must be at least 100 ms as per PCI spec.
+        * On warm boots only 1 ms is required.
+        */
+       udelay(warmboot ? 1000 : 100000);
+
+       for (i = 0; i < num_buses; i++)
+               immr->pci_ctrl[i].gcr = 1;
+
+       /*
+        * RST high to first config access must be at least 2^25 cycles
+        * as per PCI spec.  This could be cut in half if we know we're
+        * running at 66MHz.  This could be insufficiently long if we're
+        * running the PCI bus at significantly less than 33MHz.
+        */
+       udelay(1020000);
+
+       for (i = 0; i < num_buses; i++)
+               pci_init_bus(i, reg[i]);
+}
+
+#ifdef CONFIG_OF_FLAT_TREE
+void ft_pci_setup(void *blob, bd_t *bd)
+{
+       u32 *p;
+       int len;
+
+       if (pci_num_buses < 1)
+               return;
+
+       p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pci@8500/bus-range", &len);
+       if (p) {
+               p[0] = pci_hose[0].first_busno;
+               p[1] = pci_hose[0].last_busno;
+       }
+
+       if (pci_num_buses < 2)
+               return;
+
+       p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pci@8600/bus-range", &len);
+       if (p) {
+               p[0] = pci_hose[1].first_busno;
+               p[1] = pci_hose[1].last_busno;
+       }
+}
+#endif /* CONFIG_OF_FLAT_TREE */
+
+#endif /* CONFIG_83XX_GENERIC_PCI */
index d9b8753ca09b421ff08ae6d3d55339e1b58081de..647813f68d94e5ae020e60d5e749adbebe972f5b 100644 (file)
@@ -58,8 +58,8 @@ picos_to_clk(int picos)
        int clks;
 
        ddr_bus_clk = gd->ddr_clk >> 1;
-       clks = picos / ((1000000000 / ddr_bus_clk) * 1000);
-       if (picos % ((1000000000 / ddr_bus_clk) * 1000) != 0)
+       clks = picos / (1000000000 / (ddr_bus_clk / 1000));
+       if (picos % (1000000000 / (ddr_bus_clk / 1000)) != 0)
                clks++;
 
        return clks;
@@ -624,7 +624,7 @@ long int spd_sdram()
                         | (1 << (16 + 10))             /* DQS Differential disable */
                         | (add_lat << (16 + 3))        /* Additive Latency in EMRS1 */
                         | (mode_odt_enable << 16)      /* ODT Enable in EMRS1 */
-                        | ((twr_clk >> 1) << 9)        /* Write Recovery Autopre */
+                        | ((twr_clk - 1) << 9)         /* Write Recovery Autopre */
                         | (caslat << 4)                /* caslat */
                         | (burstlen << 0)              /* Burst length */
                        );
@@ -693,11 +693,6 @@ long int spd_sdram()
 
 #ifdef CFG_DDR_SDRAM_CLK_CNTL  /* Optional platform specific value */
        ddr->sdram_clk_cntl = CFG_DDR_SDRAM_CLK_CNTL;
-#else
-       /* SS_EN = 0, source synchronous disable
-        * CLK_ADJST = 0, MCK/MCK# is launched aligned with addr/cmd
-        */
-       ddr->sdram_clk_cntl = 0x00000000;
 #endif
        debug("DDR:sdram_clk_cntl=0x%08x\n", ddr->sdram_clk_cntl);
 
index c75993059e0a28a3fbf56efb3865817d7fd969d3..bf30616548e93812947f4a8c09d4c9c335bd621d 100644 (file)
@@ -25,6 +25,7 @@
 
 #include <common.h>
 #include <mpc83xx.h>
+#include <command.h>
 #include <asm/processor.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -99,11 +100,13 @@ int get_clocks(void)
        u32 lcrr;
 
        u32 csb_clk;
-#if defined(CONFIG_MPC834X)
+#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X)
        u32 tsec1_clk;
        u32 tsec2_clk;
-       u32 usbmph_clk;
        u32 usbdr_clk;
+#endif
+#ifdef CONFIG_MPC834X
+       u32 usbmph_clk;
 #endif
        u32 core_clk;
        u32 i2c1_clk;
@@ -148,7 +151,7 @@ int get_clocks(void)
 
        sccr = im->clk.sccr;
 
-#if defined(CONFIG_MPC834X)
+#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X)
        switch ((sccr & SCCR_TSEC1CM) >> SCCR_TSEC1CM_SHIFT) {
        case 0:
                tsec1_clk = 0;
@@ -167,6 +170,26 @@ int get_clocks(void)
                return -4;
        }
 
+       switch ((sccr & SCCR_USBDRCM) >> SCCR_USBDRCM_SHIFT) {
+       case 0:
+               usbdr_clk = 0;
+               break;
+       case 1:
+               usbdr_clk = csb_clk;
+               break;
+       case 2:
+               usbdr_clk = csb_clk / 2;
+               break;
+       case 3:
+               usbdr_clk = csb_clk / 3;
+               break;
+       default:
+               /* unkown SCCR_USBDRCM value */
+               return -8;
+       }
+#endif
+
+#if defined(CONFIG_MPC834X)
        switch ((sccr & SCCR_TSEC2CM) >> SCCR_TSEC2CM_SHIFT) {
        case 0:
                tsec2_clk = 0;
@@ -205,24 +228,6 @@ int get_clocks(void)
                return -7;
        }
 
-       switch ((sccr & SCCR_USBDRCM) >> SCCR_USBDRCM_SHIFT) {
-       case 0:
-               usbdr_clk = 0;
-               break;
-       case 1:
-               usbdr_clk = csb_clk;
-               break;
-       case 2:
-               usbdr_clk = csb_clk / 2;
-               break;
-       case 3:
-               usbdr_clk = csb_clk / 3;
-               break;
-       default:
-               /* unkown SCCR_USBDRCM value */
-               return -8;
-       }
-
        if (usbmph_clk != 0 && usbdr_clk != 0 && usbmph_clk != usbdr_clk) {
                /* if USB MPH clock is not disabled and
                 * USB DR clock is not disabled then
@@ -230,8 +235,16 @@ int get_clocks(void)
                 */
                return -9;
        }
+#elif defined(CONFIG_MPC831X)
+       tsec2_clk = tsec1_clk;
+
+       if (!(sccr & SCCR_TSEC1ON))
+               tsec1_clk = 0;
+       if (!(sccr & SCCR_TSEC2ON))
+               tsec2_clk = 0;
 #endif
-#if defined(CONFIG_MPC8360) || defined(CONFIG_MPC832X)
+
+#if !defined(CONFIG_MPC834X)
        i2c1_clk = csb_clk;
 #endif
 #if !defined(CONFIG_MPC832X)
@@ -314,11 +327,13 @@ int get_clocks(void)
 #endif
 
        gd->csb_clk = csb_clk;
-#if defined(CONFIG_MPC834X)
+#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X)
        gd->tsec1_clk = tsec1_clk;
        gd->tsec2_clk = tsec2_clk;
-       gd->usbmph_clk = usbmph_clk;
        gd->usbdr_clk = usbdr_clk;
+#endif
+#if defined(CONFIG_MPC834X)
+       gd->usbmph_clk = usbmph_clk;
 #endif
        gd->core_clk = core_clk;
        gd->i2c1_clk = i2c1_clk;
@@ -351,11 +366,11 @@ ulong get_bus_freq(ulong dummy)
        return gd->csb_clk;
 }
 
-int print_clock_conf(void)
+int do_clocks (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
 {
        printf("Clock configuration:\n");
-       printf("  Coherent System Bus: %4d MHz\n", gd->csb_clk / 1000000);
        printf("  Core:                %4d MHz\n", gd->core_clk / 1000000);
+       printf("  Coherent System Bus: %4d MHz\n", gd->csb_clk / 1000000);
 #if defined(CONFIG_MPC8360) || defined(CONFIG_MPC832X)
        printf("  QE:                  %4d MHz\n", gd->qe_clk / 1000000);
        printf("  BRG:                 %4d MHz\n", gd->brg_clk / 1000000);
@@ -371,11 +386,18 @@ int print_clock_conf(void)
 #if !defined(CONFIG_MPC832X)
        printf("  I2C2:                %4d MHz\n", gd->i2c2_clk / 1000000);
 #endif
-#if defined(CONFIG_MPC834X)
+#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X)
        printf("  TSEC1:               %4d MHz\n", gd->tsec1_clk / 1000000);
        printf("  TSEC2:               %4d MHz\n", gd->tsec2_clk / 1000000);
-       printf("  USB MPH:             %4d MHz\n", gd->usbmph_clk / 1000000);
        printf("  USB DR:              %4d MHz\n", gd->usbdr_clk / 1000000);
+#endif
+#if defined(CONFIG_MPC834X)
+       printf("  USB MPH:             %4d MHz\n", gd->usbmph_clk / 1000000);
 #endif
        return 0;
 }
+
+U_BOOT_CMD(clocks, 1, 0, do_clocks,
+       "clocks  - print clock configuration\n",
+       "    clocks\n"
+);
index 0507c47e6e74dc66d04adffe35631138be9dc302..7735a52ccf169262304601ed3191054746faa4b5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2004 Freescale Semiconductor.
+ * Copyright 2004,2007 Freescale Semiconductor, Inc.
  * (C) Copyright 2002, 2003 Motorola Inc.
  * Xianghua Xiao (X.Xiao@motorola.com)
  *
@@ -70,6 +70,15 @@ int checkcpu (void)
        case SVR_8548_E:
                puts("8548_E");
                break;
+       case SVR_8544:
+               puts("8544");
+               break;
+       case SVR_8544_E:
+               puts("8544_E");
+               break;
+       case SVR_8568_E:
+               puts("8568_E");
+               break;
        default:
                puts("Unknown");
                break;
@@ -112,7 +121,7 @@ int checkcpu (void)
 #endif
        clkdiv = lcrr & 0x0f;
        if (clkdiv == 2 || clkdiv == 4 || clkdiv == 8) {
-#ifdef CONFIG_MPC8548
+#if defined(CONFIG_MPC8548) || defined(CONFIG_MPC8544)
                /*
                 * Yes, the entire PQ38 family use the same
                 * bit-representation for twice the clock divider values.
@@ -140,16 +149,25 @@ int checkcpu (void)
 
 int do_reset (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
 {
+       uint pvr;
+       uint ver;
+       pvr = get_pvr();
+       ver = PVR_VER(pvr);
+       if (ver & 1){
+       /* e500 v2 core has reset control register */
+               volatile unsigned int * rstcr;
+               rstcr = (volatile unsigned int *)(CFG_IMMR + 0xE00B0);
+               *rstcr = 0x2;           /* HRESET_REQ */
+       }else{
        /*
         * Initiate hard reset in debug control register DBCR0
         * Make sure MSR[DE] = 1
         */
-       unsigned long val;
-
-       val = mfspr(DBCR0);
-       val |= 0x70000000;
-       mtspr(DBCR0,val);
-
+               unsigned long val;
+               val = mfspr(DBCR0);
+               val |= 0x70000000;
+               mtspr(DBCR0,val);
+       }
        return 1;
 }
 
@@ -183,9 +201,9 @@ reset_85xx_watchdog(void)
         * Clear TSR(WIS) bit by writing 1
         */
        unsigned long val;
-       val = mfspr(tsr);
-       val |= 0x40000000;
-       mtspr(tsr, val);
+       val = mfspr(SPRN_TSR);
+       val |= TSR_WIS;
+       mtspr(SPRN_TSR, val);
 }
 #endif /* CONFIG_WATCHDOG */
 
@@ -196,6 +214,7 @@ void dma_init(void) {
 
        dma->satr0 = 0x02c40000;
        dma->datr0 = 0x02c40000;
+       dma->sr0 = 0xfffffff; /* clear any errors */
        asm("sync; isync; msync");
        return;
 }
@@ -210,6 +229,10 @@ uint dma_check(void) {
                status = dma->sr0;
        }
 
+       /* clear MR0[CS] channel start bit */
+       dma->mr0 &= 0x00000001;
+       asm("sync;isync;msync");
+
        if (status != 0) {
                printf ("DMA Error: status = %x\n", status);
        }
@@ -245,6 +268,10 @@ ft_cpu_setup(void *blob, bd_t *bd)
        if (p != NULL)
                *p = cpu_to_be32(clock);
 
+       p = ft_get_prop(blob, "/qe@e0080000/" OF_CPU "/bus-frequency", &len);
+       if (p != NULL)
+               *p = cpu_to_be32(clock);
+
        p = ft_get_prop(blob, "/" OF_SOC "/serial@4500/clock-frequency", &len);
        if (p != NULL)
                *p = cpu_to_be32(clock);
@@ -255,21 +282,41 @@ ft_cpu_setup(void *blob, bd_t *bd)
 
 #if defined(CONFIG_MPC85XX_TSEC1)
        p = ft_get_prop(blob, "/" OF_SOC "/ethernet@24000/mac-address", &len);
+       if (p)
+               memcpy(p, bd->bi_enetaddr, 6);
+
+       p = ft_get_prop(blob, "/" OF_SOC "/ethernet@24000/local-mac-address", &len);
+       if (p)
                memcpy(p, bd->bi_enetaddr, 6);
 #endif
 
 #if defined(CONFIG_HAS_ETH1)
        p = ft_get_prop(blob, "/" OF_SOC "/ethernet@25000/mac-address", &len);
+       if (p)
+               memcpy(p, bd->bi_enet1addr, 6);
+
+       p = ft_get_prop(blob, "/" OF_SOC "/ethernet@25000/local-mac-address", &len);
+       if (p)
                memcpy(p, bd->bi_enet1addr, 6);
 #endif
 
 #if defined(CONFIG_HAS_ETH2)
        p = ft_get_prop(blob, "/" OF_SOC "/ethernet@26000/mac-address", &len);
+       if (p)
+               memcpy(p, bd->bi_enet2addr, 6);
+
+       p = ft_get_prop(blob, "/" OF_SOC "/ethernet@26000/local-mac-address", &len);
+       if (p)
                memcpy(p, bd->bi_enet2addr, 6);
 #endif
 
 #if defined(CONFIG_HAS_ETH3)
        p = ft_get_prop(blob, "/" OF_SOC "/ethernet@27000/mac-address", &len);
+       if (p)
+               memcpy(p, bd->bi_enet3addr, 6);
+
+       p = ft_get_prop(blob, "/" OF_SOC "/ethernet@27000/local-mac-address", &len);
+       if (p)
                memcpy(p, bd->bi_enet3addr, 6);
 #endif
 
index 9f4d36c1ab45d744b6a224c6e0a6e6af419a8fa7..9517146ed23deeeb46708d60f27ec05a2b5673ea 100644 (file)
@@ -143,12 +143,10 @@ void cpu_init_f (void)
        memctl->br1 = CFG_BR1_PRELIM;
 #endif
 
-#if !defined(CONFIG_MPC85xx)
 #if defined(CFG_BR2_PRELIM) && defined(CFG_OR2_PRELIM)
        memctl->or2 = CFG_OR2_PRELIM;
        memctl->br2 = CFG_BR2_PRELIM;
 #endif
-#endif
 
 #if defined(CFG_BR3_PRELIM) && defined(CFG_OR3_PRELIM)
        memctl->or3 = CFG_OR3_PRELIM;
index 84f839ae1e4fee2cf6af1212c1830899bd30abc7..3c1a323aad2f625c6fa8f5b853de808de5e49953 100644 (file)
@@ -90,14 +90,14 @@ pci_mpc85xx_init(struct pci_controller *board_hose)
        pcix->powbar1  = (CFG_PCI1_MEM_PHYS >> 12) & 0x000fffff;
        pcix->powbear1 = 0x00000000;
        pcix->powar1 = (POWAR_EN | POWAR_MEM_READ |
-                       POWAR_MEM_WRITE | POWAR_MEM_512M);
+                       POWAR_MEM_WRITE | (__ilog2(CFG_PCI1_MEM_SIZE) - 1));
 
        pcix->potar2  = (CFG_PCI1_IO_BASE >> 12) & 0x000fffff;
        pcix->potear2  = 0x00000000;
        pcix->powbar2  = (CFG_PCI1_IO_PHYS >> 12) & 0x000fffff;
        pcix->powbear2 = 0x00000000;
        pcix->powar2 = (POWAR_EN | POWAR_IO_READ |
-                       POWAR_IO_WRITE | POWAR_IO_1M);
+                       POWAR_IO_WRITE | (__ilog2(CFG_PCI1_IO_SIZE) - 1));
 
        pcix->pitar1 = 0x00000000;
        pcix->piwbar1 = 0x00000000;
@@ -175,14 +175,14 @@ pci_mpc85xx_init(struct pci_controller *board_hose)
        pcix2->powbar1  = (CFG_PCI2_MEM_PHYS >> 12) & 0x000fffff;
        pcix2->powbear1 = 0x00000000;
        pcix2->powar1 = (POWAR_EN | POWAR_MEM_READ |
-                       POWAR_MEM_WRITE | POWAR_MEM_512M);
+                       POWAR_MEM_WRITE | (__ilog2(CFG_PCI2_MEM_SIZE) - 1));
 
        pcix2->potar2  = (CFG_PCI2_IO_BASE >> 12) & 0x000fffff;
        pcix2->potear2  = 0x00000000;
        pcix2->powbar2  = (CFG_PCI2_IO_PHYS >> 12) & 0x000fffff;
        pcix2->powbear2 = 0x00000000;
        pcix2->powar2 = (POWAR_EN | POWAR_IO_READ |
-                       POWAR_IO_WRITE | POWAR_IO_1M);
+                       POWAR_IO_WRITE | (__ilog2(CFG_PCI2_IO_SIZE) - 1));
 
        pcix2->pitar1 = 0x00000000;
        pcix2->piwbar1 = 0x00000000;
index 6da5367a706ce11f778a55b8fe0ac1638bd0a1ef..3777f49adcc5f899d79850241a738efde65b5817 100644 (file)
@@ -263,13 +263,14 @@ spd_sdram(void)
        }
 
        /*
-        * Adjust DDR II IO voltage biasing.  It just makes it work.
+        * Adjust DDR II IO voltage biasing.
+        * Only 8548 rev 1 needs the fix
         */
-       if (spd.mem_type == SPD_MEMTYPE_DDR2) {
-               gur->ddrioovcr = (0
-                                 | 0x80000000          /* Enable */
-                                 | 0x10000000          /* VSEL to 1.8V */
-                                 );
+       if ((SVR_VER(get_svr()) == SVR_8548_E) &&
+                       (SVR_MJREV(get_svr()) == 1) &&
+                       (spd.mem_type == SPD_MEMTYPE_DDR2)) {
+               gur->ddrioovcr = (0x80000000    /* Enable */
+                                 | 0x10000000);/* VSEL to 1.8V */
        }
 
        /*
@@ -786,14 +787,17 @@ spd_sdram(void)
         * Is this an ECC DDR chip?
         * But don't mess with it if the DDR controller will init mem.
         */
-#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER)
+#ifdef CONFIG_DDR_ECC
        if (spd.config == 0x02) {
+#ifndef CONFIG_ECC_INIT_VIA_DDRCONTROLLER
                ddr->err_disable = 0x0000000d;
+#endif
                ddr->err_sbe = 0x00ff0000;
        }
+
        debug("DDR: err_disable = 0x%08x\n", ddr->err_disable);
        debug("DDR: err_sbe = 0x%08x\n", ddr->err_sbe);
-#endif
+#endif /* CONFIG_DDR_ECC */
 
        asm("sync;isync;msync");
        udelay(500);
@@ -991,17 +995,24 @@ setup_laws_and_tlbs(unsigned int memsize)
                break;
        case 256:
        case 512:
+               tlb_size = BOOKE_PAGESZ_256M;
+               break;
        case 1024:
        case 2048:
-               tlb_size = BOOKE_PAGESZ_256M;
+               if (PVR_VER(get_pvr()) > PVR_VER(PVR_85xx))
+                       tlb_size = BOOKE_PAGESZ_1G;
+               else
+                       tlb_size = BOOKE_PAGESZ_256M;
                break;
        default:
                puts("DDR: only 16M,32M,64M,128M,256M,512M,1G and 2G are supported.\n");
 
                /*
                 * The memory was not able to be mapped.
+                * Default to a small size.
                 */
-               return 0;
+               tlb_size = BOOKE_PAGESZ_64M;
+               memsize=64;
                break;
        }
 
index ca81ee73521a695cf19a7ae54fa457f29c288717..12359a2d64b0e7d40faae1d524c132aba2c2e9b2 100644 (file)
@@ -37,49 +37,21 @@ void get_sys_info (sys_info_t * sysInfo)
 {
        volatile immap_t    *immap = (immap_t *)CFG_IMMR;
        volatile ccsr_gur_t *gur = &immap->im_gur;
-       uint plat_ratio,e500_ratio;
+       uint plat_ratio,e500_ratio,half_freqSystemBus;
 
        plat_ratio = (gur->porpllsr) & 0x0000003e;
        plat_ratio >>= 1;
-       switch(plat_ratio) {
-       case 0x02:
-       case 0x03:
-       case 0x04:
-       case 0x05:
-       case 0x06:
-       case 0x08:
-       case 0x09:
-       case 0x0a:
-       case 0x0c:
-       case 0x10:
-               sysInfo->freqSystemBus = plat_ratio * CONFIG_SYS_CLK_FREQ;
-               break;
-       default:
-               sysInfo->freqSystemBus = 0;
-               break;
-       }
-
+       sysInfo->freqSystemBus = plat_ratio * CONFIG_SYS_CLK_FREQ;
        e500_ratio = (gur->porpllsr) & 0x003f0000;
        e500_ratio >>= 16;
-       switch(e500_ratio) {
-       case 0x04:
-               sysInfo->freqProcessor = 2*sysInfo->freqSystemBus;
-               break;
-       case 0x05:
-               sysInfo->freqProcessor = 5*sysInfo->freqSystemBus/2;
-               break;
-       case 0x06:
-               sysInfo->freqProcessor = 3*sysInfo->freqSystemBus;
-               break;
-       case 0x07:
-               sysInfo->freqProcessor = 7*sysInfo->freqSystemBus/2;
-               break;
-       default:
-               sysInfo->freqProcessor = 0;
-               break;
-       }
+
+       /* Divide before multiply to avoid integer
+        * overflow for processor speeds above 2GHz */
+       half_freqSystemBus = sysInfo->freqSystemBus/2;
+       sysInfo->freqProcessor = e500_ratio*half_freqSystemBus;
 }
 
+
 int get_clocks (void)
 {
        sys_info_t sys_info;
index f96a4c3f8b0dcd2d0cf9ef2ebb719b50fbbadb98..20c7ebc7238bee98e06fed91cd3ea60b1df3da03 100644 (file)
@@ -251,13 +251,10 @@ _start_e500:
         */
        bl      tlb1_entry
        mr      r5,r0
-       li      r1,0x0020       /* max 16 TLB1 plus some TLB0 entries */
-       mtctr   r1
        lwzu    r4,0(r5)        /* how many TLB1 entries we actually use */
+       mtctr   r4
 
-0:     cmpwi   r4,0
-       beq     1f
-       lwzu    r0,4(r5)
+0:     lwzu    r0,4(r5)
        lwzu    r1,4(r5)
        lwzu    r2,4(r5)
        lwzu    r3,4(r5)
@@ -269,7 +266,6 @@ _start_e500:
        msync
        tlbwe
        isync
-       addi    r4,r4,-1
        bdnz    0b
 
 1:
@@ -301,20 +297,16 @@ _start_e500:
 
        bl      law_entry
        mr      r6,r0
-       li      r1,0x0007       /* 8 LAWs, but reserve one for boot-over-rio-or-pci */
-       mtctr   r1
        lwzu    r5,0(r6)        /* how many windows we actually use */
+       mtctr   r5
 
        li      r2,0x0c28       /* the first pair is reserved for boot-over-rio-or-pci */
        li      r1,0x0c30
 
-0:     cmpwi   r5,0
-       beq     1f
-       lwzu    r4,4(r6)
+0:     lwzu    r4,4(r6)
        lwzu    r3,4(r6)
        stwx    r4,r7,r2
        stwx    r3,r7,r1
-       addi    r5,r5,-1
        addi    r2,r2,0x0020
        addi    r1,r1,0x0020
        bdnz    0b
index 551b243076fb0f3e0af7d03af4f9defaab3b2f1a..a33acfec4d3072ce8c240800a07a37fcd2a11090 100644 (file)
 #include <ft_build.h>
 #endif
 
-#ifdef CONFIG_MPC8641HPCN
-extern void mpc8641_reset_board(cmd_tbl_t *cmdtp, int flag,
-                               int argc, char *argv[]);
-#endif
-
-
 int
 checkcpu(void)
 {
@@ -185,7 +179,7 @@ do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
 
 #else /* CONFIG_MPC8641HPCN */
 
-       mpc8641_reset_board(cmdtp, flag, argc, argv);
+       out8(PIXIS_BASE + PIXIS_RST, 0);
 
 #endif /* !CONFIG_MPC8641HPCN */
 
@@ -286,22 +280,38 @@ ft_cpu_setup(void *blob, bd_t *bd)
 
 #if defined(CONFIG_MPC86XX_TSEC1)
        p = ft_get_prop(blob, "/" OF_SOC "/ethernet@24000/mac-address", &len);
-       memcpy(p, bd->bi_enetaddr, 6);
+       if (p != NULL)
+               memcpy(p, bd->bi_enetaddr, 6);
+       p = ft_get_prop(blob, "/" OF_SOC "/ethernet@24000/local-mac-address", &len);
+       if (p)
+               memcpy(p, bd->bi_enetaddr, 6);
 #endif
 
 #if defined(CONFIG_MPC86XX_TSEC2)
        p = ft_get_prop(blob, "/" OF_SOC "/ethernet@25000/mac-address", &len);
-       memcpy(p, bd->bi_enet1addr, 6);
+       if (p != NULL)
+               memcpy(p, bd->bi_enet1addr, 6);
+       p = ft_get_prop(blob, "/" OF_SOC "/ethernet@25000/local-mac-address", &len);
+       if (p != NULL)
+               memcpy(p, bd->bi_enet1addr, 6);
 #endif
 
 #if defined(CONFIG_MPC86XX_TSEC3)
        p = ft_get_prop(blob, "/" OF_SOC "/ethernet@26000/mac-address", &len);
-       memcpy(p, bd->bi_enet2addr, 6);
+       if (p != NULL)
+               memcpy(p, bd->bi_enet2addr, 6);
+       p = ft_get_prop(blob, "/" OF_SOC "/ethernet@26000/local-mac-address", &len);
+       if (p != NULL)
+               memcpy(p, bd->bi_enet2addr, 6);
 #endif
 
 #if defined(CONFIG_MPC86XX_TSEC4)
        p = ft_get_prop(blob, "/" OF_SOC "/ethernet@27000/mac-address", &len);
-       memcpy(p, bd->bi_enet3addr, 6);
+       if (p != NULL)
+               memcpy(p, bd->bi_enet3addr, 6);
+       p = ft_get_prop(blob, "/" OF_SOC "/ethernet@27000/local-mac-address", &len);
+       if (p != NULL)
+               memcpy(p, bd->bi_enet3addr, 6);
 #endif
 
 }
index ac9ff81ce602e1f9573254cfbcf5e26ef7ec3367..f37ab430b325bc2a2fc2c7df2a6859d36964baaf 100644 (file)
@@ -51,20 +51,32 @@ extern int dma_xfer(void *dest, uint count, void *src);
 #define CFG_SUPER_BANK_INTERLEAVING    0
 
 /*
- * Convert picoseconds into clock cycles (rounding up if needed).
+ * Convert picoseconds into DRAM clock cycles (rounding up if needed).
  */
 
-int
-picos_to_clk(int picos)
+static unsigned int
+picos_to_clk(unsigned int picos)
 {
-       int clks;
-
-       clks = picos / (2000000000 / (get_bus_freq(0) / 1000));
-       if (picos % (2000000000 / (get_bus_freq(0) / 1000)) != 0) {
+       /* use unsigned long long to avoid rounding errors */
+       const unsigned long long ULL_2e12 = 2000000000000ULL;
+       unsigned long long clks;
+       unsigned long long clks_temp;
+
+       if (! picos)
+           return 0;
+
+       clks = get_bus_freq(0) * (unsigned long long) picos;
+       clks_temp = clks;
+       clks = clks / ULL_2e12;
+       if (clks_temp % ULL_2e12) {
                clks++;
        }
 
-       return clks;
+       if (clks > 0xFFFFFFFFULL) {
+               clks = 0xFFFFFFFFULL;
+       }
+
+       return (unsigned int) clks;
 }
 
 
index 7406fe2248b407fe26d7c5df6963154c26c6fe2b..67c56db1a37499d572c5190ea82fbbeffe9b60d2 100644 (file)
@@ -241,26 +241,40 @@ in_flash:
        bl      setup_ccsrbar
 #endif
 
-       /* Fix for SMP linux - Changing arbitration to round-robin */
-       lis     r3, CFG_CCSRBAR@h
-       ori     r3, r3, 0x1000
-       xor     r4, r4, r4
-       li      r4, 0x1000
-       stw     r4, 0(r3)
 
-       /* setup the law entries */
-       bl      law_entry
+       /* -- MPC8641 Rev 1.0 MCM Errata fixups -- */
+
+       /* skip fixups if not Rev 1.0 */
+       mfspr   r4, SVR
+       rlwinm  r4,r4,0,24,31
+       cmpwi   r4,0x10
+       bne     1f
+
+       lis     r3,MCM_ABCR@ha
+       lwz     r4,MCM_ABCR@l(r3)       /* ABCR -> r4 */
+
+       /* set ABCR[A_STRM_CNT] = 0 */
+       rlwinm  r4,r4,0,0,29
+
+       /* set ABCR[ARB_POLICY] to 0x1 (round-robin) */
+       addi    r0,r0,1
+       rlwimi  r4,r0,12,18,19
+
+       stw     r4,MCM_ABCR@l(r3)       /* r4 -> ABCR */
        sync
 
-       /* Don't use this feature due to bug in 8641D PD4 */
-       /* Disable ERD_DIS */
-       lis     r3, CFG_CCSRBAR@h
-       ori     r3, r3, 0x1008
-       lwz     r4, 0(r3)
+       /* Set DBCR[ERD_DIS] */
+       lis     r3,MCM_DBCR@ha
+       lwz     r4,MCM_DBCR@l(r3)
        oris    r4, r4, 0x4000
-       stw     r4, 0(r3)
+       stw     r4,MCM_DBCR@l(r3)
+       sync
+1:
+       /* setup the law entries */
+       bl      law_entry
        sync
 
+
 #if (EMULATOR_RUN == 1)
        /* On the emulator we want to adjust these ASAP */
        /* otherwise things are sloooow */
index b56629bf57679d8d8d17abe1961815318fde2635..48b9ee2f7e0bacb516ae671f0ae050bf2d80c6e8 100644 (file)
@@ -465,7 +465,11 @@ long int initdram(int board_type)
         * Set the SDRAM Clock Timing Register
         *-----------------------------------------------------------------*/
        mfsdram(SDRAM_CLKTR, val);
+#ifdef CFG_44x_DDR2_CKTR_180
+       mtsdram(SDRAM_CLKTR, (val & ~SDRAM_CLKTR_CLKP_MASK) | SDRAM_CLKTR_CLKP_180_DEG_ADV);
+#else
        mtsdram(SDRAM_CLKTR, (val & ~SDRAM_CLKTR_CLKP_MASK) | SDRAM_CLKTR_CLKP_0_DEG);
+#endif
 
        /*------------------------------------------------------------------
         * Program the BxCF registers.
@@ -1117,14 +1121,15 @@ static void program_codt(unsigned long *dimm_populated,
                                modt3 = 0x00000000;
                        }
                        if (total_rank == 4) {
-                               codt |= CALC_ODT_R(0) | CALC_ODT_R(1) | CALC_ODT_R(2) | CALC_ODT_R(3);
+                               codt |= CALC_ODT_R(0) | CALC_ODT_R(1) |
+                                       CALC_ODT_R(2) | CALC_ODT_R(3);
                                modt0 = CALC_ODT_RW(2);
                                modt1 = 0x00000000;
                                modt2 = CALC_ODT_RW(0);
                                modt3 = 0x00000000;
                        }
                }
-       } else {
+       } else {
                codt |= SDRAM_CODT_DQS_2_5_V_DDR1;
                modt0 = 0x00000000;
                modt1 = 0x00000000;
index be4e82405eb2b264d39446f8cc5ef591a01302e0..1200d021af62a832477843e805a32caffdc8e0c6 100644 (file)
@@ -344,7 +344,7 @@ int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)
        mfsdr(sdr_pfc1, pfc1);
        pfc1 &= SDR0_PFC1_SELECT_MASK;
 
-       switch (pfc1) { 
+       switch (pfc1) {
        case SDR0_PFC1_SELECT_CONFIG_2:
                /* 1 x GMII port */
                out32 (ZMII_FER, 0x00);
@@ -361,7 +361,7 @@ int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)
                break;
        case SDR0_PFC1_SELECT_CONFIG_6:
                /* 2 x SMII ports */
-               out32 (ZMII_FER, 
+               out32 (ZMII_FER,
                       ((ZMII_FER_SMII) << ZMII_FER_V(0)) |
                       ((ZMII_FER_SMII) << ZMII_FER_V(1)));
                out32 (RGMII_FER, 0x00000000);
index 09aac38f488e6a61f8c34b0552cf23175ec66a1a..f63fc79f6cb7770d9deac75ef4758a4abe4e4ad9 100644 (file)
 
 #if (CONFIG_COMMANDS & CFG_CMD_NAND) && !defined(CFG_NAND_LEGACY) && \
        (defined(CONFIG_440EP) || defined(CONFIG_440GR) ||           \
-        defined(CONFIG_440EPX) || defined(CONFIG_440GRX))
+        defined(CONFIG_440EPX) || defined(CONFIG_440GRX) ||         \
+        defined(CONFIG_405EZ))
 
 #include <nand.h>
 #include <linux/mtd/ndfc.h>
 #include <linux/mtd/nand_ecc.h>
 #include <asm/processor.h>
 #include <asm/io.h>
-#include <ppc440.h>
+#include <ppc4xx.h>
 
 static u8 hwctl = 0;
 
@@ -210,8 +211,7 @@ int board_nand_init(struct nand_chip *nand)
        /*
         * Setup EBC (CS0 only right now)
         */
-       mtdcr(ebccfga, xbcfg);
-       mtdcr(ebccfgd, 0xb8400000);
+       mtebc(EBC0_CFG, 0xb8400000);
 
        mtebc(pb0cr, CFG_EBC_PB0CR);
        mtebc(pb0ap, CFG_EBC_PB0AP);
index fe14ecd7bfe78cba3dcc7a850d481e498f8b0ec9..78de30031d74c2a5bdf12d4f695ca64ef798b219 100644 (file)
@@ -830,7 +830,7 @@ _start:
        mtdcr   ocmdscr2, r3            /* Set Data Side */
        mtdcr   ocmiscr2, r3            /* Set Instruction Side */
        addis   r3,0,0x0800             /* OCM Data Parity Disable - 1 Wait State */
-       mtdcr   ocmdsisdpc,r4
+       mtdcr   ocmdsisdpc,r3
 
        isync
 #else /* CONFIG_405EZ */
index 9e8bd4fb8899c50a288695a8fb9a051f8bc38743..acc1a748e44e524ea65848470188dca833f2df4d 100644 (file)
@@ -179,6 +179,7 @@ void dev_print (block_dev_desc_t *dev_desc)
 #if ((CONFIG_COMMANDS & CFG_CMD_IDE)   || \
      (CONFIG_COMMANDS & CFG_CMD_SCSI)  || \
      (CONFIG_COMMANDS & CFG_CMD_USB)   || \
+     defined(CONFIG_MMC)               || \
      defined(CONFIG_SYSTEMACE)          )
 
 #if defined(CONFIG_MAC_PARTITION) || \
index cc35a0a8ffe1148c91914b75bd3725e5533d0a2b..fea8e336466f42a277ff143b30cf6a7d89654360 100644 (file)
@@ -38,6 +38,11 @@ The script expects exactly one argument, which is interpreted as  the
 target IP address (or host name, assuming DNS is working). The script
 can be interrupted by pressing ^T (CTRL-T).
 
+Be aware that in some distributives (Fedora Core 5 at least)
+usage of nc has been changed and -l and -p options are considered
+as mutually exclusive. If nc complains about options provided,
+you can just remove the -p option from the script.
+
 It turns out that 'netcat' cannot be used to listen to broadcast
 packets. We developed our own tool 'ncb' (see tools directory) that
 listens to broadcast packets on a given port and dumps them to the
diff --git a/doc/README.mpc7448hpc2 b/doc/README.mpc7448hpc2
new file mode 100644 (file)
index 0000000..8659e83
--- /dev/null
@@ -0,0 +1,184 @@
+Freescale MPC7448hpc2 (Taiga) board
+===================================
+
+Created 08/11/2006 Roy Zang
+--------------------------
+MPC7448hpc2 (Taiga) board is a high-performance PowerPC server reference
+design, which is optimized for high speed throughput between the processor and
+the memory, disk drive and Ethernet port subsystems.
+
+MPC7448hpc2(Taiga) is designed to the micro-ATX chassis, allowing it to be
+used in 1U or 2U rack-mount chassis¡¯, as well as in standard ATX/Micro-ATX
+chassis.
+
+Building U-Boot
+------------------
+The mpc7448hpc2 code base is known to compile using:
+       Binutils 2.15, Gcc 3.4.3, Glibc 2.3.3
+
+       $ make mpc7448hpc2_config
+       Configuring for mpc7448hpc2 board...
+
+       $ make
+
+Memory Map
+----------
+
+The memory map is setup for Linux to operate properly.
+
+The mapping is:
+
+       Range Start     Range End       Definition                      Size
+
+       0x0000_0000     0x7fff_ffff     DDR                             2G
+       0xe000_0000     0xe7ff_ffff     PCI Memory                      128M
+       0xfa00_0000     0xfaff_ffff     PCI IO                          16M
+       0xfb00_0000     0xfbff_ffff     PCI Config                      16M
+       0xfc00_0000     0xfc0f_ffff     NVRAM/CADMUS                    1M
+       0xfe00_0000     0xfeff_ffff     PromJet                         16M
+       0xff00_0000     0xff80_0000     FLASH (boot flash)              8M
+       0xff80_0000     0xffff_ffff     FLASH (second half flash)       8M
+
+Using Flash
+-----------
+
+The MPC7448hpc2 board has two "banks" of flash, each 8MB in size
+(2^23 = 0x00800000).
+
+Note: the "bank" here refers to half of the flash. In fact, there is only one
+bank of flash, which is divided into low and high half. Each is controlled by
+the most significant bit of the address bus. The so called "bank" is only for
+convenience.
+
+There is a switch which allows the "bank" to be selected.  The switch
+settings for updating flash are given below.
+
+The u-boot commands for copying the boot-bank into the secondary bank are
+as follows:
+
+       erase ff800000 ff880000
+       cp.b ff000000 ff800000 80000
+
+U-boot commands for downloading an image via tftp and flashing
+it into the secondary bank:
+
+       tftp 10000 <u-boot.bin.image>
+       erase ff000000 ff080000
+       cp.b 10000 ff000000 80000
+
+After copying the image into the second bank of flash, be sure to toggle
+SW3[4] on board before resetting the board in order to set the
+secondary bank as the boot-bank.
+
+Board Switches
+----------------------
+
+Most switches on the board should not be changed.  The most frequent
+user-settable switches on the board are used to configure
+the flash banks and determining the PCI frequency.
+
+SW1[1-5]: Processor core voltage
+
+       12345           Core Voltage
+       -----
+       SW1=01111       1.000V.
+       SW1=01101       1.100V.
+       SW1=01011       1.200V.
+       SW1=01001       1.300V only for MPC7447A.
+
+
+SW2[1-6]: CPU core frequency
+
+               CPU Core Frequency (MHz)
+                       Bus Frequency
+       123456          100     133     167     200     Ratio
+
+       ------
+       SW2=101100      500     667     833     1000    5x
+       SW2=100100      550     733     917     1100    5.5x
+       SW2=110100      600     800     1000    1200    6x
+       SW2=010100      650     866     1083    1300    6.5x
+       SW2=001000      700     930     1167    1400    7x
+       SW2=000100      750     1000    1250    1500    7.5x
+       SW2=110000      800     1066    1333    1600    8x
+       SW2=011000      850     1333    1417    1700    8.5x only for MPC7447A
+       SW2=011110      900     1200    1500    1800    9x
+
+This table shows only a subset of available frequency options; see the CPU
+hardware specifications for more information.
+
+SW2[7-8]: Bus Protocol and CPU Reset Option
+
+       7
+       -
+       SW2=0           System bus uses MPX bus protocol
+       SW2=1           System bus uses 60x bus protocol
+
+       8
+       -
+       SW2=0           TSI108 can cause CPU reset
+       SW2=1           TSI108 can not cause CPU reset
+
+SW3[1-8] system options
+
+       123
+       ---
+       SW3=xxx         Connected to GPIO[0:2] on TSI108
+
+       4
+       -
+       SW3=0           CPU boots from low half of flash
+       SW3=1           CPU boots from high half of flash
+
+       5
+       -
+       SW3=0           SATA and slot2 connected to PCI bus
+       SW3=1           Only slot1 connected to PCI bus
+
+       6
+       -
+       SW3=0           USB connected to PCI bus
+       SW3=1           USB disconnected from PCI bus
+
+       7
+       -
+       SW3=0           Flash is write protected
+       SW3=1           Flash is NOT write protected
+
+       8
+       -
+       SW3=0           CPU will boot from flash
+       SW3=1           CPU will boot from PromJet
+
+SW4[1-3]: System bus frequency
+
+                       Bus Frequency (MHz)
+       ---
+       SW4=010                 183
+       SW4=011                 100
+       SW4=100                 133
+       SW4=101                 166 only for MPC7447A
+       SW4=110                 200 only for MPC7448
+       others                  reserved
+
+SW4[4-6]: DDR2 SDRAM frequency
+
+                       Bus Frequency (MHz)
+       ---
+       SW4=000         external clock
+       SW4=011         system clock
+       SW4=100         133
+       SW4=101         166
+       SW4=110         200
+       others          reserved
+
+SW4[7-8]: PCI/PCI-X frequency control
+       7
+       -
+       SW4=0           PCI/PCI-X bus operates normally
+       SW4=1           PCI bus forced to PCI-33 mode
+
+       8
+       -
+       SW4=0           PCI-X mode at 133 MHz allowed
+       SW4=1           PCI-X mode limited to 100 MHz
diff --git a/doc/README.mpc8313erdb b/doc/README.mpc8313erdb
new file mode 100644 (file)
index 0000000..7ad4cc7
--- /dev/null
@@ -0,0 +1,83 @@
+Freescale MPC8313ERDB Board
+-----------------------------------------
+
+1.     Board Switches and Jumpers
+
+       SW3 is used to set CFG_RESET_SOURCE.
+
+       To boot the image at 0xFE000000 in NOR flash, use these DIP
+       switche settings for SW3 SW4:
+
+       +------+        +------+
+       |      |        | **** |
+       | **** |        |      |
+       +------+ ON     +------+ ON
+         4321            4321
+       (where the '*' indicates the position of the tab of the switch.)
+
+2.     Memory Map
+       The memory map looks like this:
+
+       0x0000_0000     0x07ff_ffff     DDR              128M
+       0x8000_0000     0x8fff_ffff     PCI MEM          256M
+       0x9000_0000     0x9fff_ffff     PCI_MMIO         256M
+       0xe000_0000     0xe00f_ffff     IMMR             1M
+       0xe200_0000     0xe20f_ffff     PCI IO           16M
+       0xe280_0000     0xe280_7fff     NAND FLASH (CS1) 32K
+       0xf000_0000     0xf001_ffff     VSC7385 (CS2)    128K
+       0xfa00_0000     0xfa00_7fff     Board Status/    32K
+                                       LED Control (CS3)
+       0xfe00_0000     0xfe7f_ffff     NOR FLASH (CS0)  8M
+
+3.     Definitions
+
+3.1    Explanation of NEW definitions in:
+
+       include/configs/MPC8313ERDB.h
+
+       CONFIG_MPC83xx          MPC83xx family
+       CONFIG_MPC831x          MPC831x specific
+       CONFIG_MPC8313ERDB      MPC8313ERDB board specific
+
+4.     Compilation
+
+       Assuming you're using BASH (or similar) as your shell:
+
+       export CROSS_COMPILE=your-cross-compiler-prefix-
+       make distclean
+       make MPC8313ERDB_33_config
+       (or make MPC8313ERDB_66_config, depending on the speed of
+        the oscillator on your board)
+       make
+
+5.     Downloading and Flashing Images
+
+5.1    Reflash U-boot Image using U-boot
+
+       =>run tftpflash
+
+       You may want to try
+       =>tftpboot $loadaddr $uboot
+       first, to make sure that the TFTP load will succeed before it
+       goes ahead and wipes out your current firmware.  And of course,
+       have an alternate means of programming the flash available
+       if the new u-boot doesn't boot.
+
+5.2    Downloading and Booting Linux Kernel
+
+       Ensure that all networking-related environment variables are set
+       properly (including ipaddr, serverip, gatewayip (if needed),
+       netmask, ethaddr, eth1addr, rootpath (if using NFS root),
+       fdtfile, and bootfile).
+
+       Then, do one of the following, depending on whether you
+       want an NFS root or a ramdisk root:
+
+       =>run nfsboot
+       or
+       =>run ramboot
+
+6      Notes
+
+       Booting from NAND flash is not yet supported.
+       The console baudrate for MPC8313ERDB is 115200bps.
index 4a650ce43c214c695f25b31c11b1ce8ae9f71518..3b88f8bc728ca5fc0a4f50f0a118b62e873655b9 100644 (file)
@@ -121,3 +121,37 @@ To Flash U-boot into the alternative bank (0xFF800000 - 0xFFBFFFFF):
        0xe300_0000     0xe3ff_ffff     PCI2/PEX2 IO    16M
        0xfe00_0000     0xfeff_ffff     Flash(alternate)16M
        0xff00_0000     0xffff_ffff     Flash(boot bank)16M
+
+5. pixis_reset command
+--------------------
+A new command, "pixis_reset", is introduced to reset mpc8641hpcn board
+using the FPGA sequencer.  When the board restarts, it has the option
+of using either the current or alternate flash bank as the boot
+image, with or without the watchdog timer enabled, and finally with
+or without frequency changes.
+
+Usage is;
+
+       pixis_reset
+       pixis_reset altbank
+       pixis_reset altbank wd
+       pixis_reset altbank cf <SYSCLK freq> <COREPLL ratio> <MPXPLL ratio>
+       pixis_reset cf <SYSCLK freq> <COREPLL ratio> <MPXPLL ratio>
+
+Examples;
+
+       /* reset to current bank, like "reset" command */
+       pixis_reset
+
+       /* reset board but use the to alternate flash bank */
+       pixis_reset altbank
+
+       /* reset board, use alternate flash bank with watchdog timer enabled*/
+       pixis_reset altbank wd
+
+       /* reset board to alternate bank with frequency changed.
+        * 40 is SYSCLK, 2.5 is COREPLL ratio, 10 is MPXPLL ratio
+        */
+       pixis-reset altbank cf 40 2.5 10
+
+Valid clock choices are in the 8641 Reference Manuals.
index b5171f4d407c6d602100bb9b15993754d6d0c921..5c31845a94c0a016f6c8a8021fea8a0639497650 100644 (file)
@@ -192,12 +192,7 @@ The old NAND handling code has been re-factored and is now confined
 to only board-specific files and - unfortunately - to the DoC code
 (see below). A new configuration variable has been introduced:
 CFG_NAND_LEGACY, which has to be defined in the board config file if
-that board uses legacy code. If CFG_NAND_LEGACY is defined, the board
-specific config.mk file should also have "BOARDLIBS =
-drivers/nand_legacy/libnand_legacy.a". For boards using the new NAND
-approach (PPChameleon and netstar at the moment) no variable is
-necessary, but the config.mk should have "BOARDLIBS =
-drivers/nand/libnand.a".
+that board uses legacy code.
 
 The necessary changes have been made to all affected boards, and no
 build breakage has been introduced, except for NETTA and NETTA_ISDN
diff --git a/doc/README.sbc8560 b/doc/README.sbc8560
deleted file mode 100644 (file)
index 52592e3..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-The port was tested on Wind River System Sbc8560 board <www.windriver.com>.
-U-Boot was installed on the flash memory of the CPU card (no the SODIMM).
-
-NOTE: Please configure uboot compile to the proper PCI frequency and
-setup the appropriate DIP switch settings.
-
-SBC8560 board:
-
-Make sure boards switches are set to their appropriate conditions.
-Refer to the Engineering Reference Guide ERG-00300-002. Of particular
-importance are: 1)Tthe settings for JP4 (JP4 1-3 and 2-4), which
-select the on-board FLASH device (Intel 28F128Jx); 2) The settings
-for the Clock SW9 (33 MHz or 66 MHz).
-
-       Note:   SW9 Settings: 66 MHz
-               4:1 ratio CCB clocks:SYSCLK
-               3:1 ration e500 Core:CCB
-               pos1 - on, pos2 - on, pos3 - off, pos4 - on, pos5 - off, pos6 - on
-       Note:   SW9 Settings: 33 MHz
-               8:1 ratio CCB clocks:SYSCLK
-               3:1 ration e500 Core:CCB
-               pos1 - on, pos2 - on, pos3 - on, pos4 - off, pos5 - off, pos6 - on
-
-
-Flashing the FLASH device with the "Wind River ICE":
-
-1) Properly connect and configure the Wind River ICE to the
-   target JTAG port. This includes running the SBC8560 register script.
-   Make sure target memory can be read and written.
-
-2) Build the u-boot image:
-       make distclean
-       make SBC8560_66_config or SBC8560_33_config
-       make CROSS_COMPILE=.../ELDK3.0/ppc_8xx-/ all
-
-   Note: reference is made to the ELDK3.0 compiler but any 85xx cross-compiler
-        should suffice.
-
-3) Convert the uboot (.elf) file to a uboot.bin file (using visionClick converter).
-   The bin file should be converted from fffc0000 to ffffffff
-
-4) Setup the Flash Utility (tools menu) for:
-
-   Determine the clock speed of the PCI bus and set SW9 accordingly
-       Note: the speed of the PCI bus defaults to the slowest PCI card
-   PlayBack the "default" register file for the SBC8560
-   Select the uboot.bin file with zero bias
-   Select the initialize Target prior to programming
-   Select the V28F640Jx (8192 x 8) 1 device FLASH Algorithm
-   Select the erase base address from FFFC0000 to FFFFFFFF
-   Select the start address from 0 with size of 4000
-
-5) Erase and Program
index fffc22a5e1d72451739d67ffe17ba3df105c3fb1..d68cba682be295949d15c3635896a6c944849531 100644 (file)
@@ -32,7 +32,7 @@ COBJS = 3c589.o 5701rls.o ali512x.o atmel_usart.o \
          cs8900.o ct69000.o dataflash.o dc2114x.o dm9000x.o \
          e1000.o eepro100.o \
          i8042.o inca-ip_sw.o keyboard.o \
-         lan91c96.o \
+         lan91c96.o macb.o \
          natsemi.o ne2000.o netarm_eth.o netconsole.o \
          ns16550.o ns8382x.o ns87308.o ns7520_eth.o omap1510_i2c.o \
          omap24xx_i2c.o pci.o pci_auto.o pci_indirect.o \
@@ -46,6 +46,7 @@ COBJS = 3c589.o 5701rls.o ali512x.o atmel_usart.o \
          sl811_usb.o sm501.o smc91111.o smiLynxEM.o \
          status_led.o sym53c8xx.o systemace.o ahci.o \
          ti_pci1410a.o tigon3.o tsec.o \
+         tsi108_eth.o tsi108_i2c.o tsi108_pci.o \
          usbdcore.o usbdcore_ep0.o usbdcore_omap1510.o usbtty.o \
          videomodes.o w83c553f.o \
          ks8695eth.o \
index 41c37683d7854fb09a5fbac0d9ec4cfbf65f74fe..f35b99730f786528de863802191a1f11e2cd3846 100644 (file)
 
 #ifdef CONFIG_ATMEL_USART
 #include <asm/io.h>
-#include <asm/arch/platform.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/memory-map.h>
+
+#if defined(CONFIG_USART0)
+# define USART_ID      0
+# define USART_BASE    USART0_BASE
+#elif defined(CONFIG_USART1)
+# define USART_ID      1
+# define USART_BASE    USART1_BASE
+#elif defined(CONFIG_USART2)
+# define USART_ID      2
+# define USART_BASE    USART2_BASE
+#elif defined(CONFIG_USART3)
+# define USART_ID      3
+# define USART_BASE    USART3_BASE
+#endif
 
 #include "atmel_usart.h"
 
@@ -35,26 +50,23 @@ void serial_setbrg(void)
         * Baud Rate = --------------
         *                16 * CD
         */
-       usart_hz = pm_get_clock_freq(gd->console_uart->resource[0].u.clock.id);
+       usart_hz = get_usart_clk_rate(USART_ID);
        divisor = (usart_hz / 16 + gd->baudrate / 2) / gd->baudrate;
-       usart3_writel(gd->console_uart, BRGR, USART3_BF(CD, divisor));
+       usart3_writel(BRGR, USART3_BF(CD, divisor));
 }
 
 int serial_init(void)
 {
-       usart3_writel(gd->console_uart, CR,
-                     USART3_BIT(RSTRX) | USART3_BIT(RSTTX));
+       usart3_writel(CR, USART3_BIT(RSTRX) | USART3_BIT(RSTTX));
 
        serial_setbrg();
 
-       usart3_writel(gd->console_uart, CR,
-                     USART3_BIT(RXEN) | USART3_BIT(TXEN));
-       usart3_writel(gd->console_uart, MR,
-                     USART3_BF(USART_MODE, USART3_USART_MODE_NORMAL)
-                     | USART3_BF(USCLKS, USART3_USCLKS_MCK)
-                     | USART3_BF(CHRL, USART3_CHRL_8)
-                     | USART3_BF(PAR, USART3_PAR_NONE)
-                     | USART3_BF(NBSTOP, USART3_NBSTOP_1));
+       usart3_writel(CR, USART3_BIT(RXEN) | USART3_BIT(TXEN));
+       usart3_writel(MR, (USART3_BF(USART_MODE, USART3_USART_MODE_NORMAL)
+                          | USART3_BF(USCLKS, USART3_USCLKS_MCK)
+                          | USART3_BF(CHRL, USART3_CHRL_8)
+                          | USART3_BF(PAR, USART3_PAR_NONE)
+                          | USART3_BF(NBSTOP, USART3_NBSTOP_1)));
 
        return 0;
 }
@@ -64,8 +76,8 @@ void serial_putc(char c)
        if (c == '\n')
                serial_putc('\r');
 
-       while (!(usart3_readl(gd->console_uart, CSR) & USART3_BIT(TXRDY))) ;
-       usart3_writel(gd->console_uart, THR, c);
+       while (!(usart3_readl(CSR) & USART3_BIT(TXRDY))) ;
+       usart3_writel(THR, c);
 }
 
 void serial_puts(const char *s)
@@ -76,13 +88,13 @@ void serial_puts(const char *s)
 
 int serial_getc(void)
 {
-       while (!(usart3_readl(gd->console_uart, CSR) & USART3_BIT(RXRDY))) ;
-       return usart3_readl(gd->console_uart, RHR);
+       while (!(usart3_readl(CSR) & USART3_BIT(RXRDY))) ;
+       return usart3_readl(RHR);
 }
 
 int serial_tstc(void)
 {
-       return (usart3_readl(gd->console_uart, CSR) & USART3_BIT(RXRDY)) != 0;
+       return (usart3_readl(CSR) & USART3_BIT(RXRDY)) != 0;
 }
 
 #endif /* CONFIG_ATMEL_USART */
index fad90a8116eb69639d7bb9ebd848b8db40b618fa..af3773a99f25fada8a9467c6503ca1ef833e1ba5 100644 (file)
         | USART3_BF(name,value))
 
 /* Register access macros */
-#define usart3_readl(port,reg)                         \
-       readl((port)->regs + USART3_##reg)
-#define usart3_writel(port,reg,value)                  \
-       writel((value), (port)->regs + USART3_##reg)
+#define usart3_readl(reg)                              \
+       readl((void *)USART_BASE + USART3_##reg)
+#define usart3_writel(reg,value)                       \
+       writel((value), (void *)USART_BASE + USART3_##reg)
 
 #endif /* __DRIVERS_ATMEL_USART_H__ */
diff --git a/drivers/macb.c b/drivers/macb.c
new file mode 100644 (file)
index 0000000..186ab19
--- /dev/null
@@ -0,0 +1,575 @@
+/*
+ * Copyright (C) 2005-2006 Atmel Corporation
+ *
+ * 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>
+
+#if defined(CONFIG_MACB) && (CONFIG_COMMANDS & (CFG_CMD_NET | CFG_CMD_MII))
+
+/*
+ * The u-boot networking stack is a little weird.  It seems like the
+ * networking core allocates receive buffers up front without any
+ * regard to the hardware that's supposed to actually receive those
+ * packets.
+ *
+ * The MACB receives packets into 128-byte receive buffers, so the
+ * buffers allocated by the core isn't very practical to use.  We'll
+ * allocate our own, but we need one such buffer in case a packet
+ * wraps around the DMA ring so that we have to copy it.
+ *
+ * Therefore, define CFG_RX_ETH_BUFFER to 1 in the board-specific
+ * configuration header.  This way, the core allocates one RX buffer
+ * and one TX buffer, each of which can hold a ethernet packet of
+ * maximum size.
+ *
+ * For some reason, the networking core unconditionally specifies a
+ * 32-byte packet "alignment" (which really should be called
+ * "padding").  MACB shouldn't need that, but we'll refrain from any
+ * core modifications here...
+ */
+
+#include <net.h>
+#include <malloc.h>
+
+#include <linux/mii.h>
+#include <asm/io.h>
+#include <asm/dma-mapping.h>
+#include <asm/arch/clk.h>
+
+#include "macb.h"
+
+#define CFG_MACB_RX_BUFFER_SIZE                4096
+#define CFG_MACB_RX_RING_SIZE          (CFG_MACB_RX_BUFFER_SIZE / 128)
+#define CFG_MACB_TX_RING_SIZE          16
+#define CFG_MACB_TX_TIMEOUT            1000
+#define CFG_MACB_AUTONEG_TIMEOUT       5000000
+
+struct macb_dma_desc {
+       u32     addr;
+       u32     ctrl;
+};
+
+#define RXADDR_USED            0x00000001
+#define RXADDR_WRAP            0x00000002
+
+#define RXBUF_FRMLEN_MASK      0x00000fff
+#define RXBUF_FRAME_START      0x00004000
+#define RXBUF_FRAME_END                0x00008000
+#define RXBUF_TYPEID_MATCH     0x00400000
+#define RXBUF_ADDR4_MATCH      0x00800000
+#define RXBUF_ADDR3_MATCH      0x01000000
+#define RXBUF_ADDR2_MATCH      0x02000000
+#define RXBUF_ADDR1_MATCH      0x04000000
+#define RXBUF_BROADCAST                0x80000000
+
+#define TXBUF_FRMLEN_MASK      0x000007ff
+#define TXBUF_FRAME_END                0x00008000
+#define TXBUF_NOCRC            0x00010000
+#define TXBUF_EXHAUSTED                0x08000000
+#define TXBUF_UNDERRUN         0x10000000
+#define TXBUF_MAXRETRY         0x20000000
+#define TXBUF_WRAP             0x40000000
+#define TXBUF_USED             0x80000000
+
+struct macb_device {
+       void                    *regs;
+
+       unsigned int            rx_tail;
+       unsigned int            tx_head;
+       unsigned int            tx_tail;
+
+       void                    *rx_buffer;
+       void                    *tx_buffer;
+       struct macb_dma_desc    *rx_ring;
+       struct macb_dma_desc    *tx_ring;
+
+       unsigned long           rx_buffer_dma;
+       unsigned long           rx_ring_dma;
+       unsigned long           tx_ring_dma;
+
+       const struct device     *dev;
+       struct eth_device       netdev;
+       unsigned short          phy_addr;
+};
+#define to_macb(_nd) container_of(_nd, struct macb_device, netdev)
+
+static void macb_mdio_write(struct macb_device *macb, u8 reg, u16 value)
+{
+       unsigned long netctl;
+       unsigned long netstat;
+       unsigned long frame;
+
+       netctl = macb_readl(macb, NCR);
+       netctl |= MACB_BIT(MPE);
+       macb_writel(macb, NCR, netctl);
+
+       frame = (MACB_BF(SOF, 1)
+                | MACB_BF(RW, 1)
+                | MACB_BF(PHYA, macb->phy_addr)
+                | MACB_BF(REGA, reg)
+                | MACB_BF(CODE, 2)
+                | MACB_BF(DATA, value));
+       macb_writel(macb, MAN, frame);
+
+       do {
+               netstat = macb_readl(macb, NSR);
+       } while (!(netstat & MACB_BIT(IDLE)));
+
+       netctl = macb_readl(macb, NCR);
+       netctl &= ~MACB_BIT(MPE);
+       macb_writel(macb, NCR, netctl);
+}
+
+static u16 macb_mdio_read(struct macb_device *macb, u8 reg)
+{
+       unsigned long netctl;
+       unsigned long netstat;
+       unsigned long frame;
+
+       netctl = macb_readl(macb, NCR);
+       netctl |= MACB_BIT(MPE);
+       macb_writel(macb, NCR, netctl);
+
+       frame = (MACB_BF(SOF, 1)
+                | MACB_BF(RW, 2)
+                | MACB_BF(PHYA, macb->phy_addr)
+                | MACB_BF(REGA, reg)
+                | MACB_BF(CODE, 2));
+       macb_writel(macb, MAN, frame);
+
+       do {
+               netstat = macb_readl(macb, NSR);
+       } while (!(netstat & MACB_BIT(IDLE)));
+
+       frame = macb_readl(macb, MAN);
+
+       netctl = macb_readl(macb, NCR);
+       netctl &= ~MACB_BIT(MPE);
+       macb_writel(macb, NCR, netctl);
+
+       return MACB_BFEXT(DATA, frame);
+}
+
+#if (CONFIG_COMMANDS & CFG_CMD_NET)
+
+static int macb_send(struct eth_device *netdev, volatile void *packet,
+                    int length)
+{
+       struct macb_device *macb = to_macb(netdev);
+       unsigned long paddr, ctrl;
+       unsigned int tx_head = macb->tx_head;
+       int i;
+
+       paddr = dma_map_single(packet, length, DMA_TO_DEVICE);
+
+       ctrl = length & TXBUF_FRMLEN_MASK;
+       ctrl |= TXBUF_FRAME_END;
+       if (tx_head == (CFG_MACB_TX_RING_SIZE - 1)) {
+               ctrl |= TXBUF_WRAP;
+               macb->tx_head = 0;
+       } else
+               macb->tx_head++;
+
+       macb->tx_ring[tx_head].ctrl = ctrl;
+       macb->tx_ring[tx_head].addr = paddr;
+       macb_writel(macb, NCR, MACB_BIT(TE) | MACB_BIT(RE) | MACB_BIT(TSTART));
+
+       /*
+        * I guess this is necessary because the networking core may
+        * re-use the transmit buffer as soon as we return...
+        */
+       i = 0;
+       while (!(macb->tx_ring[tx_head].ctrl & TXBUF_USED)) {
+               if (i > CFG_MACB_TX_TIMEOUT) {
+                       printf("%s: TX timeout\n", netdev->name);
+                       break;
+               }
+               udelay(1);
+               i++;
+       }
+
+       dma_unmap_single(packet, length, paddr);
+
+       if (i <= CFG_MACB_TX_TIMEOUT) {
+               ctrl = macb->tx_ring[tx_head].ctrl;
+               if (ctrl & TXBUF_UNDERRUN)
+                       printf("%s: TX underrun\n", netdev->name);
+               if (ctrl & TXBUF_EXHAUSTED)
+                       printf("%s: TX buffers exhausted in mid frame\n",
+                              netdev->name);
+       }
+
+       /* No one cares anyway */
+       return 0;
+}
+
+static void reclaim_rx_buffers(struct macb_device *macb,
+                              unsigned int new_tail)
+{
+       unsigned int i;
+
+       i = macb->rx_tail;
+       while (i > new_tail) {
+               macb->rx_ring[i].addr &= ~RXADDR_USED;
+               i++;
+               if (i > CFG_MACB_RX_RING_SIZE)
+                       i = 0;
+       }
+
+       while (i < new_tail) {
+               macb->rx_ring[i].addr &= ~RXADDR_USED;
+               i++;
+       }
+
+       macb->rx_tail = new_tail;
+}
+
+static int macb_recv(struct eth_device *netdev)
+{
+       struct macb_device *macb = to_macb(netdev);
+       unsigned int rx_tail = macb->rx_tail;
+       void *buffer;
+       int length;
+       int wrapped = 0;
+       u32 status;
+
+       for (;;) {
+               if (!(macb->rx_ring[rx_tail].addr & RXADDR_USED))
+                       return -1;
+
+               status = macb->rx_ring[rx_tail].ctrl;
+               if (status & RXBUF_FRAME_START) {
+                       if (rx_tail != macb->rx_tail)
+                               reclaim_rx_buffers(macb, rx_tail);
+                       wrapped = 0;
+               }
+
+               if (status & RXBUF_FRAME_END) {
+                       buffer = macb->rx_buffer + 128 * macb->rx_tail;
+                       length = status & RXBUF_FRMLEN_MASK;
+                       if (wrapped) {
+                               unsigned int headlen, taillen;
+
+                               headlen = 128 * (CFG_MACB_RX_RING_SIZE
+                                                - macb->rx_tail);
+                               taillen = length - headlen;
+                               memcpy((void *)NetRxPackets[0],
+                                      buffer, headlen);
+                               memcpy((void *)NetRxPackets[0] + headlen,
+                                      macb->rx_buffer, taillen);
+                               buffer = (void *)NetRxPackets[0];
+                       }
+
+                       NetReceive(buffer, length);
+                       if (++rx_tail >= CFG_MACB_RX_RING_SIZE)
+                               rx_tail = 0;
+                       reclaim_rx_buffers(macb, rx_tail);
+               } else {
+                       if (++rx_tail >= CFG_MACB_RX_RING_SIZE) {
+                               wrapped = 1;
+                               rx_tail = 0;
+                       }
+               }
+       }
+
+       return 0;
+}
+
+static int macb_phy_init(struct macb_device *macb)
+{
+       struct eth_device *netdev = &macb->netdev;
+       u32 ncfgr;
+       u16 phy_id, status, adv, lpa;
+       int media, speed, duplex;
+       int i;
+
+       /* Check if the PHY is up to snuff... */
+       phy_id = macb_mdio_read(macb, MII_PHYSID1);
+       if (phy_id == 0xffff) {
+               printf("%s: No PHY present\n", netdev->name);
+               return 0;
+       }
+
+       adv = ADVERTISE_CSMA | ADVERTISE_ALL;
+       macb_mdio_write(macb, MII_ADVERTISE, adv);
+       printf("%s: Starting autonegotiation...\n", netdev->name);
+       macb_mdio_write(macb, MII_BMCR, (BMCR_ANENABLE
+                                        | BMCR_ANRESTART));
+
+#if 0
+       for (i = 0; i < 9; i++)
+               printf("mii%d: 0x%04x\n", i, macb_mdio_read(macb, i));
+#endif
+
+       for (i = 0; i < CFG_MACB_AUTONEG_TIMEOUT / 100; i++) {
+               status = macb_mdio_read(macb, MII_BMSR);
+               if (status & BMSR_ANEGCOMPLETE)
+                       break;
+               udelay(100);
+       }
+
+       if (status & BMSR_ANEGCOMPLETE)
+               printf("%s: Autonegotiation complete\n", netdev->name);
+       else
+               printf("%s: Autonegotiation timed out (status=0x%04x)\n",
+                      netdev->name, status);
+
+       if (!(status & BMSR_LSTATUS)) {
+               for (i = 0; i < CFG_MACB_AUTONEG_TIMEOUT / 100; i++) {
+                       udelay(100);
+                       status = macb_mdio_read(macb, MII_BMSR);
+                       if (status & BMSR_LSTATUS)
+                               break;
+               }
+       }
+
+       if (!(status & BMSR_LSTATUS)) {
+               printf("%s: link down (status: 0x%04x)\n",
+                      netdev->name, status);
+               return 0;
+       } else {
+               lpa = macb_mdio_read(macb, MII_LPA);
+               media = mii_nway_result(lpa & adv);
+               speed = (media & (ADVERTISE_100FULL | ADVERTISE_100HALF)
+                        ? 1 : 0);
+               duplex = (media & ADVERTISE_FULL) ? 1 : 0;
+               printf("%s: link up, %sMbps %s-duplex (lpa: 0x%04x)\n",
+                      netdev->name,
+                      speed ? "100" : "10",
+                      duplex ? "full" : "half",
+                      lpa);
+
+               ncfgr = macb_readl(macb, NCFGR);
+               ncfgr &= ~(MACB_BIT(SPD) | MACB_BIT(FD));
+               if (speed)
+                       ncfgr |= MACB_BIT(SPD);
+               if (duplex)
+                       ncfgr |= MACB_BIT(FD);
+               macb_writel(macb, NCFGR, ncfgr);
+               return 1;
+       }
+}
+
+static int macb_init(struct eth_device *netdev, bd_t *bd)
+{
+       struct macb_device *macb = to_macb(netdev);
+       unsigned long paddr;
+       u32 hwaddr_bottom;
+       u16 hwaddr_top;
+       int i;
+
+       /*
+        * macb_halt should have been called at some point before now,
+        * so we'll assume the controller is idle.
+        */
+
+       /* initialize DMA descriptors */
+       paddr = macb->rx_buffer_dma;
+       for (i = 0; i < CFG_MACB_RX_RING_SIZE; i++) {
+               if (i == (CFG_MACB_RX_RING_SIZE - 1))
+                       paddr |= RXADDR_WRAP;
+               macb->rx_ring[i].addr = paddr;
+               macb->rx_ring[i].ctrl = 0;
+               paddr += 128;
+       }
+       for (i = 0; i < CFG_MACB_TX_RING_SIZE; i++) {
+               macb->tx_ring[i].addr = 0;
+               if (i == (CFG_MACB_TX_RING_SIZE - 1))
+                       macb->tx_ring[i].ctrl = TXBUF_USED | TXBUF_WRAP;
+               else
+                       macb->tx_ring[i].ctrl = TXBUF_USED;
+       }
+       macb->rx_tail = macb->tx_head = macb->tx_tail = 0;
+
+       macb_writel(macb, RBQP, macb->rx_ring_dma);
+       macb_writel(macb, TBQP, macb->tx_ring_dma);
+
+       /* set hardware address */
+       hwaddr_bottom = cpu_to_le32(*((u32 *)netdev->enetaddr));
+       macb_writel(macb, SA1B, hwaddr_bottom);
+       hwaddr_top = cpu_to_le16(*((u16 *)(netdev->enetaddr + 4)));
+       macb_writel(macb, SA1T, hwaddr_top);
+
+       /* choose RMII or MII mode. This depends on the board */
+#ifdef CONFIG_RMII
+       macb_writel(macb, USRIO, 0);
+#else
+       macb_writel(macb, USRIO, MACB_BIT(MII));
+#endif
+
+       if (!macb_phy_init(macb))
+               return 0;
+
+       /* Enable TX and RX */
+       macb_writel(macb, NCR, MACB_BIT(TE) | MACB_BIT(RE));
+
+       return 1;
+}
+
+static void macb_halt(struct eth_device *netdev)
+{
+       struct macb_device *macb = to_macb(netdev);
+       u32 ncr, tsr;
+
+       /* Halt the controller and wait for any ongoing transmission to end. */
+       ncr = macb_readl(macb, NCR);
+       ncr |= MACB_BIT(THALT);
+       macb_writel(macb, NCR, ncr);
+
+       do {
+               tsr = macb_readl(macb, TSR);
+       } while (tsr & MACB_BIT(TGO));
+
+       /* Disable TX and RX, and clear statistics */
+       macb_writel(macb, NCR, MACB_BIT(CLRSTAT));
+}
+
+int macb_eth_initialize(int id, void *regs, unsigned int phy_addr)
+{
+       struct macb_device *macb;
+       struct eth_device *netdev;
+       unsigned long macb_hz;
+       u32 ncfgr;
+
+       macb = malloc(sizeof(struct macb_device));
+       if (!macb) {
+               printf("Error: Failed to allocate memory for MACB%d\n", id);
+               return -1;
+       }
+       memset(macb, 0, sizeof(struct macb_device));
+
+       netdev = &macb->netdev;
+
+       macb->rx_buffer = dma_alloc_coherent(CFG_MACB_RX_BUFFER_SIZE,
+                                            &macb->rx_buffer_dma);
+       macb->rx_ring = dma_alloc_coherent(CFG_MACB_RX_RING_SIZE
+                                          * sizeof(struct macb_dma_desc),
+                                          &macb->rx_ring_dma);
+       macb->tx_ring = dma_alloc_coherent(CFG_MACB_TX_RING_SIZE
+                                          * sizeof(struct macb_dma_desc),
+                                          &macb->tx_ring_dma);
+
+       macb->regs = regs;
+       macb->phy_addr = phy_addr;
+
+       sprintf(netdev->name, "macb%d", id);
+       netdev->init = macb_init;
+       netdev->halt = macb_halt;
+       netdev->send = macb_send;
+       netdev->recv = macb_recv;
+
+       /*
+        * Do some basic initialization so that we at least can talk
+        * to the PHY
+        */
+       macb_hz = get_macb_pclk_rate(id);
+       if (macb_hz < 20000000)
+               ncfgr = MACB_BF(CLK, MACB_CLK_DIV8);
+       else if (macb_hz < 40000000)
+               ncfgr = MACB_BF(CLK, MACB_CLK_DIV16);
+       else if (macb_hz < 80000000)
+               ncfgr = MACB_BF(CLK, MACB_CLK_DIV32);
+       else
+               ncfgr = MACB_BF(CLK, MACB_CLK_DIV64);
+
+       macb_writel(macb, NCFGR, ncfgr);
+
+       eth_register(netdev);
+
+       return 0;
+}
+
+#endif /* (CONFIG_COMMANDS & CFG_CMD_NET) */
+
+#if (CONFIG_COMMANDS & CFG_CMD_MII)
+
+int miiphy_read(unsigned char addr, unsigned char reg, unsigned short *value)
+{
+       unsigned long netctl;
+       unsigned long netstat;
+       unsigned long frame;
+       int iflag;
+
+       iflag = disable_interrupts();
+       netctl = macb_readl(&macb, EMACB_NCR);
+       netctl |= MACB_BIT(MPE);
+       macb_writel(&macb, EMACB_NCR, netctl);
+       if (iflag)
+               enable_interrupts();
+
+       frame = (MACB_BF(SOF, 1)
+                | MACB_BF(RW, 2)
+                | MACB_BF(PHYA, addr)
+                | MACB_BF(REGA, reg)
+                | MACB_BF(CODE, 2));
+       macb_writel(&macb, EMACB_MAN, frame);
+
+       do {
+               netstat = macb_readl(&macb, EMACB_NSR);
+       } while (!(netstat & MACB_BIT(IDLE)));
+
+       frame = macb_readl(&macb, EMACB_MAN);
+       *value = MACB_BFEXT(DATA, frame);
+
+       iflag = disable_interrupts();
+       netctl = macb_readl(&macb, EMACB_NCR);
+       netctl &= ~MACB_BIT(MPE);
+       macb_writel(&macb, EMACB_NCR, netctl);
+       if (iflag)
+               enable_interrupts();
+
+       return 0;
+}
+
+int miiphy_write(unsigned char addr, unsigned char reg, unsigned short value)
+{
+       unsigned long netctl;
+       unsigned long netstat;
+       unsigned long frame;
+       int iflag;
+
+       iflag = disable_interrupts();
+       netctl = macb_readl(&macb, EMACB_NCR);
+       netctl |= MACB_BIT(MPE);
+       macb_writel(&macb, EMACB_NCR, netctl);
+       if (iflag)
+               enable_interrupts();
+
+       frame = (MACB_BF(SOF, 1)
+                | MACB_BF(RW, 1)
+                | MACB_BF(PHYA, addr)
+                | MACB_BF(REGA, reg)
+                | MACB_BF(CODE, 2)
+                | MACB_BF(DATA, value));
+       macb_writel(&macb, EMACB_MAN, frame);
+
+       do {
+               netstat = macb_readl(&macb, EMACB_NSR);
+       } while (!(netstat & MACB_BIT(IDLE)));
+
+       iflag = disable_interrupts();
+       netctl = macb_readl(&macb, EMACB_NCR);
+       netctl &= ~MACB_BIT(MPE);
+       macb_writel(&macb, EMACB_NCR, netctl);
+       if (iflag)
+               enable_interrupts();
+
+       return 0;
+}
+
+#endif /* (CONFIG_COMMANDS & CFG_CMD_MII) */
+
+#endif /* CONFIG_MACB */
diff --git a/drivers/macb.h b/drivers/macb.h
new file mode 100644 (file)
index 0000000..c778e4e
--- /dev/null
@@ -0,0 +1,269 @@
+/*
+ * 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
+ */
+#ifndef __DRIVERS_MACB_H__
+#define __DRIVERS_MACB_H__
+
+/* MACB register offsets */
+#define MACB_NCR                               0x0000
+#define MACB_NCFGR                             0x0004
+#define MACB_NSR                               0x0008
+#define MACB_TSR                               0x0014
+#define MACB_RBQP                              0x0018
+#define MACB_TBQP                              0x001c
+#define MACB_RSR                               0x0020
+#define MACB_ISR                               0x0024
+#define MACB_IER                               0x0028
+#define MACB_IDR                               0x002c
+#define MACB_IMR                               0x0030
+#define MACB_MAN                               0x0034
+#define MACB_PTR                               0x0038
+#define MACB_PFR                               0x003c
+#define MACB_FTO                               0x0040
+#define MACB_SCF                               0x0044
+#define MACB_MCF                               0x0048
+#define MACB_FRO                               0x004c
+#define MACB_FCSE                              0x0050
+#define MACB_ALE                               0x0054
+#define MACB_DTF                               0x0058
+#define MACB_LCOL                              0x005c
+#define MACB_EXCOL                             0x0060
+#define MACB_TUND                              0x0064
+#define MACB_CSE                               0x0068
+#define MACB_RRE                               0x006c
+#define MACB_ROVR                              0x0070
+#define MACB_RSE                               0x0074
+#define MACB_ELE                               0x0078
+#define MACB_RJA                               0x007c
+#define MACB_USF                               0x0080
+#define MACB_STE                               0x0084
+#define MACB_RLE                               0x0088
+#define MACB_TPF                               0x008c
+#define MACB_HRB                               0x0090
+#define MACB_HRT                               0x0094
+#define MACB_SA1B                              0x0098
+#define MACB_SA1T                              0x009c
+#define MACB_SA2B                              0x00a0
+#define MACB_SA2T                              0x00a4
+#define MACB_SA3B                              0x00a8
+#define MACB_SA3T                              0x00ac
+#define MACB_SA4B                              0x00b0
+#define MACB_SA4T                              0x00b4
+#define MACB_TID                               0x00b8
+#define MACB_TPQ                               0x00bc
+#define MACB_USRIO                             0x00c0
+#define MACB_WOL                               0x00c4
+
+/* Bitfields in NCR */
+#define MACB_LB_OFFSET                         0
+#define MACB_LB_SIZE                           1
+#define MACB_LLB_OFFSET                                1
+#define MACB_LLB_SIZE                          1
+#define MACB_RE_OFFSET                         2
+#define MACB_RE_SIZE                           1
+#define MACB_TE_OFFSET                         3
+#define MACB_TE_SIZE                           1
+#define MACB_MPE_OFFSET                                4
+#define MACB_MPE_SIZE                          1
+#define MACB_CLRSTAT_OFFSET                    5
+#define MACB_CLRSTAT_SIZE                      1
+#define MACB_INCSTAT_OFFSET                    6
+#define MACB_INCSTAT_SIZE                      1
+#define MACB_WESTAT_OFFSET                     7
+#define MACB_WESTAT_SIZE                       1
+#define MACB_BP_OFFSET                         8
+#define MACB_BP_SIZE                           1
+#define MACB_TSTART_OFFSET                     9
+#define MACB_TSTART_SIZE                       1
+#define MACB_THALT_OFFSET                      10
+#define MACB_THALT_SIZE                                1
+#define MACB_NCR_TPF_OFFSET                    11
+#define MACB_NCR_TPF_SIZE                      1
+#define MACB_TZQ_OFFSET                                12
+#define MACB_TZQ_SIZE                          1
+
+/* Bitfields in NCFGR */
+#define MACB_SPD_OFFSET                                0
+#define MACB_SPD_SIZE                          1
+#define MACB_FD_OFFSET                         1
+#define MACB_FD_SIZE                           1
+#define MACB_BIT_RATE_OFFSET                   2
+#define MACB_BIT_RATE_SIZE                     1
+#define MACB_JFRAME_OFFSET                     3
+#define MACB_JFRAME_SIZE                       1
+#define MACB_CAF_OFFSET                                4
+#define MACB_CAF_SIZE                          1
+#define MACB_NBC_OFFSET                                5
+#define MACB_NBC_SIZE                          1
+#define MACB_NCFGR_MTI_OFFSET                  6
+#define MACB_NCFGR_MTI_SIZE                    1
+#define MACB_UNI_OFFSET                                7
+#define MACB_UNI_SIZE                          1
+#define MACB_BIG_OFFSET                                8
+#define MACB_BIG_SIZE                          1
+#define MACB_EAE_OFFSET                                9
+#define MACB_EAE_SIZE                          1
+#define MACB_CLK_OFFSET                                10
+#define MACB_CLK_SIZE                          2
+#define MACB_RTY_OFFSET                                12
+#define MACB_RTY_SIZE                          1
+#define MACB_PAE_OFFSET                                13
+#define MACB_PAE_SIZE                          1
+#define MACB_RBOF_OFFSET                       14
+#define MACB_RBOF_SIZE                         2
+#define MACB_RLCE_OFFSET                       16
+#define MACB_RLCE_SIZE                         1
+#define MACB_DRFCS_OFFSET                      17
+#define MACB_DRFCS_SIZE                                1
+#define MACB_EFRHD_OFFSET                      18
+#define MACB_EFRHD_SIZE                                1
+#define MACB_IRXFCS_OFFSET                     19
+#define MACB_IRXFCS_SIZE                       1
+
+/* Bitfields in NSR */
+#define MACB_NSR_LINK_OFFSET                   0
+#define MACB_NSR_LINK_SIZE                     1
+#define MACB_MDIO_OFFSET                       1
+#define MACB_MDIO_SIZE                         1
+#define MACB_IDLE_OFFSET                       2
+#define MACB_IDLE_SIZE                         1
+
+/* Bitfields in TSR */
+#define MACB_UBR_OFFSET                                0
+#define MACB_UBR_SIZE                          1
+#define MACB_COL_OFFSET                                1
+#define MACB_COL_SIZE                          1
+#define MACB_TSR_RLE_OFFSET                    2
+#define MACB_TSR_RLE_SIZE                      1
+#define MACB_TGO_OFFSET                                3
+#define MACB_TGO_SIZE                          1
+#define MACB_BEX_OFFSET                                4
+#define MACB_BEX_SIZE                          1
+#define MACB_COMP_OFFSET                       5
+#define MACB_COMP_SIZE                         1
+#define MACB_UND_OFFSET                                6
+#define MACB_UND_SIZE                          1
+
+/* Bitfields in RSR */
+#define MACB_BNA_OFFSET                                0
+#define MACB_BNA_SIZE                          1
+#define MACB_REC_OFFSET                                1
+#define MACB_REC_SIZE                          1
+#define MACB_OVR_OFFSET                                2
+#define MACB_OVR_SIZE                          1
+
+/* Bitfields in ISR/IER/IDR/IMR */
+#define MACB_MFD_OFFSET                                0
+#define MACB_MFD_SIZE                          1
+#define MACB_RCOMP_OFFSET                      1
+#define MACB_RCOMP_SIZE                                1
+#define MACB_RXUBR_OFFSET                      2
+#define MACB_RXUBR_SIZE                                1
+#define MACB_TXUBR_OFFSET                      3
+#define MACB_TXUBR_SIZE                                1
+#define MACB_ISR_TUND_OFFSET                   4
+#define MACB_ISR_TUND_SIZE                     1
+#define MACB_ISR_RLE_OFFSET                    5
+#define MACB_ISR_RLE_SIZE                      1
+#define MACB_TXERR_OFFSET                      6
+#define MACB_TXERR_SIZE                                1
+#define MACB_TCOMP_OFFSET                      7
+#define MACB_TCOMP_SIZE                                1
+#define MACB_ISR_LINK_OFFSET                   9
+#define MACB_ISR_LINK_SIZE                     1
+#define MACB_ISR_ROVR_OFFSET                   10
+#define MACB_ISR_ROVR_SIZE                     1
+#define MACB_HRESP_OFFSET                      11
+#define MACB_HRESP_SIZE                                1
+#define MACB_PFR_OFFSET                                12
+#define MACB_PFR_SIZE                          1
+#define MACB_PTZ_OFFSET                                13
+#define MACB_PTZ_SIZE                          1
+
+/* Bitfields in MAN */
+#define MACB_DATA_OFFSET                       0
+#define MACB_DATA_SIZE                         16
+#define MACB_CODE_OFFSET                       16
+#define MACB_CODE_SIZE                         2
+#define MACB_REGA_OFFSET                       18
+#define MACB_REGA_SIZE                         5
+#define MACB_PHYA_OFFSET                       23
+#define MACB_PHYA_SIZE                         5
+#define MACB_RW_OFFSET                         28
+#define MACB_RW_SIZE                           2
+#define MACB_SOF_OFFSET                                30
+#define MACB_SOF_SIZE                          2
+
+/* Bitfields in USRIO */
+#define MACB_MII_OFFSET                                0
+#define MACB_MII_SIZE                          1
+#define MACB_EAM_OFFSET                                1
+#define MACB_EAM_SIZE                          1
+#define MACB_TX_PAUSE_OFFSET                   2
+#define MACB_TX_PAUSE_SIZE                     1
+#define MACB_TX_PAUSE_ZERO_OFFSET              3
+#define MACB_TX_PAUSE_ZERO_SIZE                        1
+
+/* Bitfields in WOL */
+#define MACB_IP_OFFSET                         0
+#define MACB_IP_SIZE                           16
+#define MACB_MAG_OFFSET                                16
+#define MACB_MAG_SIZE                          1
+#define MACB_ARP_OFFSET                                17
+#define MACB_ARP_SIZE                          1
+#define MACB_SA1_OFFSET                                18
+#define MACB_SA1_SIZE                          1
+#define MACB_WOL_MTI_OFFSET                    19
+#define MACB_WOL_MTI_SIZE                      1
+
+/* Constants for CLK */
+#define MACB_CLK_DIV8                          0
+#define MACB_CLK_DIV16                         1
+#define MACB_CLK_DIV32                         2
+#define MACB_CLK_DIV64                         3
+
+/* Constants for MAN register */
+#define MACB_MAN_SOF                           1
+#define MACB_MAN_WRITE                         1
+#define MACB_MAN_READ                          2
+#define MACB_MAN_CODE                          2
+
+/* Bit manipulation macros */
+#define MACB_BIT(name)                                 \
+       (1 << MACB_##name##_OFFSET)
+#define MACB_BF(name,value)                            \
+       (((value) & ((1 << MACB_##name##_SIZE) - 1))    \
+        << MACB_##name##_OFFSET)
+#define MACB_BFEXT(name,value)\
+       (((value) >> MACB_##name##_OFFSET)              \
+        & ((1 << MACB_##name##_SIZE) - 1))
+#define MACB_BFINS(name,value,old)                     \
+       (((old) & ~(((1 << MACB_##name##_SIZE) - 1)     \
+                   << MACB_##name##_OFFSET))           \
+        | MACB_BF(name,value))
+
+/* Register access macros */
+#define macb_readl(port,reg)                           \
+       readl((port)->regs + MACB_##reg)
+#define macb_writel(port,reg,value)                    \
+       writel((value), (port)->regs + MACB_##reg)
+
+#endif /* __DRIVERS_MACB_H__ */
index 8495829900c4a179642d80ddadbbe04ad748fad7..c6fee18222b494297066c89ae1db1e2f330c93f1 100644 (file)
@@ -427,8 +427,9 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
        struct nand_chip *this = mtd->priv;
        u16 bad;
 
+       page = (int)(ofs >> this->page_shift) & this->pagemask;
+
        if (getchip) {
-               page = (int)(ofs >> this->page_shift);
                chipnr = (int)(ofs >> this->chip_shift);
 
                /* Grab the lock and see if the device is available */
@@ -436,18 +437,17 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
 
                /* Select the NAND device */
                this->select_chip(mtd, chipnr);
-       } else
-               page = (int) ofs;
+       }
 
        if (this->options & NAND_BUSWIDTH_16) {
-               this->cmdfunc (mtd, NAND_CMD_READOOB, this->badblockpos & 0xFE, page & this->pagemask);
+               this->cmdfunc (mtd, NAND_CMD_READOOB, this->badblockpos & 0xFE, page);
                bad = cpu_to_le16(this->read_word(mtd));
                if (this->badblockpos & 0x1)
                        bad >>= 1;
                if ((bad & 0xFF) != 0xff)
                        res = 1;
        } else {
-               this->cmdfunc (mtd, NAND_CMD_READOOB, this->badblockpos, page & this->pagemask);
+               this->cmdfunc (mtd, NAND_CMD_READOOB, this->badblockpos, page);
                if (this->read_byte(mtd) != 0xff)
                        res = 1;
        }
index 969167555ea27369008b7c5b53dc76f75bc9a46f..f170c2db89e066420771a5fbb813385905c9baf2 100644 (file)
 
 void pciauto_region_init(struct pci_region* res)
 {
-       res->bus_lower = res->bus_start;
+       /*
+        * Avoid allocating PCI resources from address 0 -- this is illegal
+        * according to PCI 2.1 and moreover, this is known to cause Linux IDE
+        * drivers to fail. Use a reasonable starting value of 0x1000 instead.
+        */
+       res->bus_lower = res->bus_start ? res->bus_start : 0x1000;
 }
 
 void pciauto_region_align(struct pci_region *res, unsigned long size)
index f91e4b984369fca9c75138be33a808134e779610..8061f12979dbbbf5317079d49a932f6c48794cb7 100644 (file)
@@ -1538,9 +1538,9 @@ int eth_send(volatile void *packet, int length) {
 int smc_get_ethaddr (bd_t * bd)
 {
        int env_size, rom_valid, env_present = 0, reg;
-       char *s = NULL, *e, *v_mac, es[] = "11:22:33:44:55:66";
+       char *s = NULL, *e, es[] = "11:22:33:44:55:66";
        char s_env_mac[64];
-       uchar v_env_mac[6], v_rom_mac[6];
+       uchar v_env_mac[6], v_rom_mac[6], *v_mac;
 
        env_size = getenv_r ("ethaddr", s_env_mac, sizeof (s_env_mac));
        if ((env_size > 0) && (env_size < sizeof (es))) {       /* exit if env is bad */
@@ -1563,7 +1563,7 @@ int smc_get_ethaddr (bd_t * bd)
 
        if (!env_present) {     /* if NO env */
                if (rom_valid) {        /* but ROM is valid */
-                       v_mac = (char *)v_rom_mac;
+                       v_mac = v_rom_mac;
                        sprintf (s_env_mac, "%02X:%02X:%02X:%02X:%02X:%02X",
                                 v_mac[0], v_mac[1], v_mac[2], v_mac[3],
                                 v_mac[4], v_mac[5]);
@@ -1573,7 +1573,7 @@ int smc_get_ethaddr (bd_t * bd)
                        return (-1);
                }
        } else {                /* good env, don't care ROM */
-               v_mac = (char *)v_env_mac;      /* always use a good env over a ROM */
+               v_mac = v_env_mac;      /* always use a good env over a ROM */
        }
 
        if (env_present && rom_valid) { /* if both env and ROM are good */
index 3848d9c59c24fcbc3beae3f39ffd97ec676b3ab6..7d82c27c6edd7d35c9b15fc3ec6f62dce4f035bb 100644 (file)
@@ -211,10 +211,16 @@ static unsigned long systemace_read(int dev, unsigned long start,
                /* Write sector count | ReadMemCardData. */
                ace_writew((trans & 0xff) | 0x0300, 0x14);
 
+/*
+ * For FPGA configuration via SystemACE is reset unacceptable
+ * CFGDONE bit in STATUSREG is not set to 1.
+ */
+#ifndef SYSTEMACE_CONFIG_FPGA
                /* Reset the configruation controller */
                val = ace_readw(0x18);
                val |= 0x0080;
                ace_writew(val, 0x18);
+#endif
 
                retry = trans * 16;
                while (retry > 0) {
index 3f11eb03b41da825fee54a06daa9a5161b583be0..b4187739cb01a341a0c7551f982b64a815e39560 100644 (file)
@@ -5,7 +5,7 @@
  * terms of the GNU Public License, Version 2, incorporated
  * herein by reference.
  *
- * Copyright 2004 Freescale Semiconductor.
+ * Copyright 2004, 2007 Freescale Semiconductor, Inc.
  * (C) Copyright 2003, Motorola, Inc.
  * author Andy Fleming
  *
@@ -66,7 +66,11 @@ struct tsec_info_struct {
  */
 static struct tsec_info_struct tsec_info[] = {
 #if defined(CONFIG_MPC85XX_TSEC1) || defined(CONFIG_MPC83XX_TSEC1)
+#if defined(CONFIG_MPC8544DS)
+       {TSEC1_PHY_ADDR, TSEC_GIGABIT | TSEC_REDUCED, TSEC1_PHYIDX},
+#else
        {TSEC1_PHY_ADDR, TSEC_GIGABIT, TSEC1_PHYIDX},
+#endif
 #elif defined(CONFIG_MPC86XX_TSEC1)
        {TSEC1_PHY_ADDR, TSEC_GIGABIT | TSEC_REDUCED, TSEC1_PHYIDX},
 #else
@@ -381,6 +385,76 @@ uint mii_parse_sr(uint mii_reg, struct tsec_private * priv)
        return 0;
 }
 
+/* Generic function which updates the speed and duplex.  If
+ * autonegotiation is enabled, it uses the AND of the link
+ * partner's advertised capabilities and our advertised
+ * capabilities.  If autonegotiation is disabled, we use the
+ * appropriate bits in the control register.
+ *
+ * Stolen from Linux's mii.c and phy_device.c
+ */
+uint mii_parse_link(uint mii_reg, struct tsec_private *priv)
+{
+       /* We're using autonegotiation */
+       if (mii_reg & PHY_BMSR_AUTN_ABLE) {
+               uint lpa = 0;
+               uint gblpa = 0;
+
+               /* Check for gigabit capability */
+               if (mii_reg & PHY_BMSR_EXT) {
+                       /* We want a list of states supported by
+                        * both PHYs in the link
+                        */
+                       gblpa = read_phy_reg(priv, PHY_1000BTSR);
+                       gblpa &= read_phy_reg(priv, PHY_1000BTCR) << 2;
+               }
+
+               /* Set the baseline so we only have to set them
+                * if they're different
+                */
+               priv->speed = 10;
+               priv->duplexity = 0;
+
+               /* Check the gigabit fields */
+               if (gblpa & (PHY_1000BTSR_1000FD | PHY_1000BTSR_1000HD)) {
+                       priv->speed = 1000;
+
+                       if (gblpa & PHY_1000BTSR_1000FD)
+                               priv->duplexity = 1;
+
+                       /* We're done! */
+                       return 0;
+               }
+
+               lpa = read_phy_reg(priv, PHY_ANAR);
+               lpa &= read_phy_reg(priv, PHY_ANLPAR);
+
+               if (lpa & (PHY_ANLPAR_TXFD | PHY_ANLPAR_TX)) {
+                       priv->speed = 100;
+
+                       if (lpa & PHY_ANLPAR_TXFD)
+                               priv->duplexity = 1;
+
+               } else if (lpa & PHY_ANLPAR_10FD)
+                       priv->duplexity = 1;
+       } else {
+               uint bmcr = read_phy_reg(priv, PHY_BMCR);
+
+               priv->speed = 10;
+               priv->duplexity = 0;
+
+               if (bmcr & PHY_BMCR_DPLX)
+                       priv->duplexity = 1;
+
+               if (bmcr & PHY_BMCR_1000_MBPS)
+                       priv->speed = 1000;
+               else if (bmcr & PHY_BMCR_100_MBPS)
+                       priv->speed = 100;
+       }
+
+       return 0;
+}
+
 /*
  * Parse the BCM54xx status register for speed and duplex information.
  * The linux sungem_phy has this information, but in a table format.
@@ -718,6 +792,7 @@ static void startup_tsec(struct eth_device *dev)
        /* Start up the PHY */
        if(priv->phyinfo)
                phy_run_commands(priv, priv->phyinfo->startup);
+
        adjust_link(dev);
 
        /* Enable Transmit and Receive */
@@ -1088,6 +1163,27 @@ struct phy_info phy_info_dm9161 = {
                           {miim_end,}
                           },
 };
+/* a generic flavor.  */
+struct phy_info phy_info_generic =  {
+       0,
+       "Unknown/Generic PHY",
+       32,
+       (struct phy_cmd[]) { /* config */
+               {PHY_BMCR, PHY_BMCR_RESET, NULL},
+               {PHY_BMCR, PHY_BMCR_AUTON|PHY_BMCR_RST_NEG, NULL},
+               {miim_end,}
+       },
+       (struct phy_cmd[]) { /* startup */
+               {PHY_BMSR, miim_read, NULL},
+               {PHY_BMSR, miim_read, &mii_parse_sr},
+               {PHY_BMSR, miim_read, &mii_parse_link},
+               {miim_end,}
+       },
+       (struct phy_cmd[]) { /* shutdown */
+               {miim_end,}
+       }
+};
+
 
 uint mii_parse_lxt971_sr2(uint mii_reg, struct tsec_private *priv)
 {
@@ -1203,6 +1299,7 @@ struct phy_info *phy_info[] = {
        &phy_info_lxt971,
        &phy_info_VSC8244,
        &phy_info_dp83865,
+       &phy_info_generic,
        NULL
 };
 
index 422bc6692292bc43b2f6271ed01d2c6fe4a6dbc9..7bf3dee2b6859ae67860c0b12a69ab1791ccfea3 100644 (file)
@@ -7,7 +7,7 @@
  *  terms of the GNU Public License, Version 2, incorporated
  *  herein by reference.
  *
- * Copyright 2004 Freescale Semiconductor.
+ * Copyright 2004, 2007 Freescale Semiconductor, Inc.
  * (C) Copyright 2003, Motorola, Inc.
  * maintained by Xianghua Xiao (x.xiao@motorola.com)
  * author Andy Fleming
@@ -65,6 +65,7 @@
 #define ECNTRL_INIT_SETTINGS   0x00001000
 #define ECNTRL_TBI_MODE         0x00000020
 #define ECNTRL_R100            0x00000008
+#define ECNTRL_SGMII_MODE      0x00000002
 
 #define miim_end -2
 #define miim_read -1
diff --git a/drivers/tsi108_eth.c b/drivers/tsi108_eth.c
new file mode 100644 (file)
index 0000000..47341be
--- /dev/null
@@ -0,0 +1,1036 @@
+/***********************************************************************
+ *
+ * Copyright (c) 2005 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
+ *
+ * Description:
+ *   Ethernet interface for Tundra TSI108 bridge chip
+ *
+ ***********************************************************************/
+
+#include <config.h>
+
+#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI) \
+       && defined(CONFIG_TSI108_ETH)
+
+#if !defined(CONFIG_TSI108_ETH_NUM_PORTS) || (CONFIG_TSI108_ETH_NUM_PORTS > 2)
+#error "CONFIG_TSI108_ETH_NUM_PORTS must be defined as 1 or 2"
+#endif
+
+#include <common.h>
+#include <malloc.h>
+#include <net.h>
+#include <asm/cache.h>
+
+#ifdef DEBUG
+#define TSI108_ETH_DEBUG 7
+#else
+#define TSI108_ETH_DEBUG 0
+#endif
+
+#if TSI108_ETH_DEBUG > 0
+#define debug_lev(lev, fmt, args...) \
+if (lev <= TSI108_ETH_DEBUG) \
+printf ("%s %d: " fmt, __FUNCTION__, __LINE__, ##args)
+#else
+#define debug_lev(lev, fmt, args...) do{}while(0)
+#endif
+
+#define RX_PRINT_ERRORS
+#define TX_PRINT_ERRORS
+
+#define ETH_BASE       (CFG_TSI108_CSR_BASE + 0x6000)
+
+#define ETH_PORT_OFFSET        0x400
+
+#define __REG32(base, offset) (*((volatile u32 *)((char *)(base) + (offset))))
+
+#define reg_MAC_CONFIG_1(base)         __REG32(base, 0x00000000)
+#define MAC_CONFIG_1_TX_ENABLE         (0x00000001)
+#define MAC_CONFIG_1_SYNC_TX_ENABLE    (0x00000002)
+#define MAC_CONFIG_1_RX_ENABLE         (0x00000004)
+#define MAC_CONFIG_1_SYNC_RX_ENABLE    (0x00000008)
+#define MAC_CONFIG_1_TX_FLOW_CONTROL   (0x00000010)
+#define MAC_CONFIG_1_RX_FLOW_CONTROL   (0x00000020)
+#define MAC_CONFIG_1_LOOP_BACK         (0x00000100)
+#define MAC_CONFIG_1_RESET_TX_FUNCTION (0x00010000)
+#define MAC_CONFIG_1_RESET_RX_FUNCTION (0x00020000)
+#define MAC_CONFIG_1_RESET_TX_MAC      (0x00040000)
+#define MAC_CONFIG_1_RESET_RX_MAC      (0x00080000)
+#define MAC_CONFIG_1_SIM_RESET         (0x40000000)
+#define MAC_CONFIG_1_SOFT_RESET                (0x80000000)
+
+#define reg_MAC_CONFIG_2(base)         __REG32(base, 0x00000004)
+#define MAC_CONFIG_2_FULL_DUPLEX       (0x00000001)
+#define MAC_CONFIG_2_CRC_ENABLE                (0x00000002)
+#define MAC_CONFIG_2_PAD_CRC           (0x00000004)
+#define MAC_CONFIG_2_LENGTH_CHECK      (0x00000010)
+#define MAC_CONFIG_2_HUGE_FRAME                (0x00000020)
+#define MAC_CONFIG_2_INTERFACE_MODE(val)       (((val) & 0x3) << 8)
+#define MAC_CONFIG_2_PREAMBLE_LENGTH(val)      (((val) & 0xf) << 12)
+#define INTERFACE_MODE_NIBBLE          1       /* 10/100 Mb/s MII) */
+#define INTERFACE_MODE_BYTE            2       /* 1000 Mb/s GMII/TBI */
+
+#define reg_MAXIMUM_FRAME_LENGTH(base)         __REG32(base, 0x00000010)
+
+#define reg_MII_MGMT_CONFIG(base)              __REG32(base, 0x00000020)
+#define MII_MGMT_CONFIG_MGMT_CLOCK_SELECT(val) ((val) & 0x7)
+#define MII_MGMT_CONFIG_NO_PREAMBLE            (0x00000010)
+#define MII_MGMT_CONFIG_SCAN_INCREMENT         (0x00000020)
+#define MII_MGMT_CONFIG_RESET_MGMT             (0x80000000)
+
+#define reg_MII_MGMT_COMMAND(base)             __REG32(base, 0x00000024)
+#define MII_MGMT_COMMAND_READ_CYCLE            (0x00000001)
+#define MII_MGMT_COMMAND_SCAN_CYCLE            (0x00000002)
+
+#define reg_MII_MGMT_ADDRESS(base)             __REG32(base, 0x00000028)
+#define reg_MII_MGMT_CONTROL(base)             __REG32(base, 0x0000002c)
+#define reg_MII_MGMT_STATUS(base)              __REG32(base, 0x00000030)
+
+#define reg_MII_MGMT_INDICATORS(base)          __REG32(base, 0x00000034)
+#define MII_MGMT_INDICATORS_BUSY               (0x00000001)
+#define MII_MGMT_INDICATORS_SCAN               (0x00000002)
+#define MII_MGMT_INDICATORS_NOT_VALID          (0x00000004)
+
+#define reg_INTERFACE_STATUS(base)             __REG32(base, 0x0000003c)
+#define INTERFACE_STATUS_LINK_FAIL             (0x00000008)
+#define INTERFACE_STATUS_EXCESS_DEFER          (0x00000200)
+
+#define reg_STATION_ADDRESS_1(base)            __REG32(base, 0x00000040)
+#define reg_STATION_ADDRESS_2(base)            __REG32(base, 0x00000044)
+
+#define reg_PORT_CONTROL(base)                 __REG32(base, 0x00000200)
+#define PORT_CONTROL_PRI               (0x00000001)
+#define PORT_CONTROL_BPT               (0x00010000)
+#define PORT_CONTROL_SPD               (0x00040000)
+#define PORT_CONTROL_RBC               (0x00080000)
+#define PORT_CONTROL_PRB               (0x00200000)
+#define PORT_CONTROL_DIS               (0x00400000)
+#define PORT_CONTROL_TBI               (0x00800000)
+#define PORT_CONTROL_STE               (0x10000000)
+#define PORT_CONTROL_ZOR               (0x20000000)
+#define PORT_CONTROL_CLR               (0x40000000)
+#define PORT_CONTROL_SRT               (0x80000000)
+
+#define reg_TX_CONFIG(base)            __REG32(base, 0x00000220)
+#define TX_CONFIG_START_Q              (0x00000003)
+#define TX_CONFIG_EHP                  (0x00400000)
+#define TX_CONFIG_CHP                  (0x00800000)
+#define TX_CONFIG_RST                  (0x80000000)
+
+#define reg_TX_CONTROL(base)           __REG32(base, 0x00000224)
+#define TX_CONTROL_GO                  (0x00008000)
+#define TX_CONTROL_MP                  (0x01000000)
+#define TX_CONTROL_EAI                 (0x20000000)
+#define TX_CONTROL_ABT                 (0x40000000)
+#define TX_CONTROL_EII                 (0x80000000)
+
+#define reg_TX_STATUS(base)            __REG32(base, 0x00000228)
+#define TX_STATUS_QUEUE_USABLE         (0x0000000f)
+#define TX_STATUS_CURR_Q               (0x00000300)
+#define TX_STATUS_ACT                  (0x00008000)
+#define TX_STATUS_QUEUE_IDLE           (0x000f0000)
+#define TX_STATUS_EOQ_PENDING          (0x0f000000)
+
+#define reg_TX_EXTENDED_STATUS(base)           __REG32(base, 0x0000022c)
+#define TX_EXTENDED_STATUS_END_OF_QUEUE_CONDITION              (0x0000000f)
+#define TX_EXTENDED_STATUS_END_OF_FRAME_CONDITION              (0x00000f00)
+#define TX_EXTENDED_STATUS_DESCRIPTOR_INTERRUPT_CONDITION      (0x000f0000)
+#define TX_EXTENDED_STATUS_ERROR_FLAG                          (0x0f000000)
+
+#define reg_TX_THRESHOLDS(base)                        __REG32(base, 0x00000230)
+
+#define reg_TX_DIAGNOSTIC_ADDR(base)           __REG32(base, 0x00000270)
+#define TX_DIAGNOSTIC_ADDR_INDEX               (0x0000007f)
+#define TX_DIAGNOSTIC_ADDR_DFR                 (0x40000000)
+#define TX_DIAGNOSTIC_ADDR_AI                  (0x80000000)
+
+#define reg_TX_DIAGNOSTIC_DATA(base)           __REG32(base, 0x00000274)
+
+#define reg_TX_ERROR_STATUS(base)              __REG32(base, 0x00000278)
+#define TX_ERROR_STATUS                                (0x00000278)
+#define TX_ERROR_STATUS_QUEUE_0_ERROR_RESPONSE (0x0000000f)
+#define TX_ERROR_STATUS_TEA_ON_QUEUE_0         (0x00000010)
+#define TX_ERROR_STATUS_RER_ON_QUEUE_0         (0x00000020)
+#define TX_ERROR_STATUS_TER_ON_QUEUE_0         (0x00000040)
+#define TX_ERROR_STATUS_DER_ON_QUEUE_0         (0x00000080)
+#define TX_ERROR_STATUS_QUEUE_1_ERROR_RESPONSE (0x00000f00)
+#define TX_ERROR_STATUS_TEA_ON_QUEUE_1         (0x00001000)
+#define TX_ERROR_STATUS_RER_ON_QUEUE_1         (0x00002000)
+#define TX_ERROR_STATUS_TER_ON_QUEUE_1         (0x00004000)
+#define TX_ERROR_STATUS_DER_ON_QUEUE_1         (0x00008000)
+#define TX_ERROR_STATUS_QUEUE_2_ERROR_RESPONSE (0x000f0000)
+#define TX_ERROR_STATUS_TEA_ON_QUEUE_2         (0x00100000)
+#define TX_ERROR_STATUS_RER_ON_QUEUE_2         (0x00200000)
+#define TX_ERROR_STATUS_TER_ON_QUEUE_2         (0x00400000)
+#define TX_ERROR_STATUS_DER_ON_QUEUE_2         (0x00800000)
+#define TX_ERROR_STATUS_QUEUE_3_ERROR_RESPONSE (0x0f000000)
+#define TX_ERROR_STATUS_TEA_ON_QUEUE_3         (0x10000000)
+#define TX_ERROR_STATUS_RER_ON_QUEUE_3         (0x20000000)
+#define TX_ERROR_STATUS_TER_ON_QUEUE_3         (0x40000000)
+#define TX_ERROR_STATUS_DER_ON_QUEUE_3         (0x80000000)
+
+#define reg_TX_QUEUE_0_CONFIG(base)            __REG32(base, 0x00000280)
+#define TX_QUEUE_0_CONFIG_OCN_PORT             (0x0000003f)
+#define TX_QUEUE_0_CONFIG_BSWP                 (0x00000400)
+#define TX_QUEUE_0_CONFIG_WSWP                 (0x00000800)
+#define TX_QUEUE_0_CONFIG_AM                   (0x00004000)
+#define TX_QUEUE_0_CONFIG_GVI                  (0x00008000)
+#define TX_QUEUE_0_CONFIG_EEI                  (0x00010000)
+#define TX_QUEUE_0_CONFIG_ELI                  (0x00020000)
+#define TX_QUEUE_0_CONFIG_ENI                  (0x00040000)
+#define TX_QUEUE_0_CONFIG_ESI                  (0x00080000)
+#define TX_QUEUE_0_CONFIG_EDI                  (0x00100000)
+
+#define reg_TX_QUEUE_0_BUF_CONFIG(base)                __REG32(base, 0x00000284)
+#define TX_QUEUE_0_BUF_CONFIG_OCN_PORT         (0x0000003f)
+#define TX_QUEUE_0_BUF_CONFIG_BURST            (0x00000300)
+#define TX_QUEUE_0_BUF_CONFIG_BSWP             (0x00000400)
+#define TX_QUEUE_0_BUF_CONFIG_WSWP             (0x00000800)
+
+#define OCN_PORT_HLP                   0       /* HLP Interface */
+#define OCN_PORT_PCI_X                 1       /* PCI-X Interface */
+#define OCN_PORT_PROCESSOR_MASTER      2       /* Processor Interface (master) */
+#define OCN_PORT_PROCESSOR_SLAVE       3       /* Processor Interface (slave) */
+#define OCN_PORT_MEMORY                        4       /* Memory Controller */
+#define OCN_PORT_DMA                   5       /* DMA Controller */
+#define OCN_PORT_ETHERNET              6       /* Ethernet Controller */
+#define OCN_PORT_PRINT                 7       /* Print Engine Interface */
+
+#define reg_TX_QUEUE_0_PTR_LOW(base)           __REG32(base, 0x00000288)
+
+#define reg_TX_QUEUE_0_PTR_HIGH(base)          __REG32(base, 0x0000028c)
+#define TX_QUEUE_0_PTR_HIGH_VALID              (0x80000000)
+
+#define reg_RX_CONFIG(base)                    __REG32(base, 0x00000320)
+#define RX_CONFIG_DEF_Q                                (0x00000003)
+#define RX_CONFIG_EMF                          (0x00000100)
+#define RX_CONFIG_EUF                          (0x00000200)
+#define RX_CONFIG_BFE                          (0x00000400)
+#define RX_CONFIG_MFE                          (0x00000800)
+#define RX_CONFIG_UFE                          (0x00001000)
+#define RX_CONFIG_SE                           (0x00002000)
+#define RX_CONFIG_ABF                          (0x00200000)
+#define RX_CONFIG_APE                          (0x00400000)
+#define RX_CONFIG_CHP                          (0x00800000)
+#define RX_CONFIG_RST                          (0x80000000)
+
+#define reg_RX_CONTROL(base)                   __REG32(base, 0x00000324)
+#define GE_E0_RX_CONTROL_QUEUE_ENABLES         (0x0000000f)
+#define GE_E0_RX_CONTROL_GO                    (0x00008000)
+#define GE_E0_RX_CONTROL_EAI                   (0x20000000)
+#define GE_E0_RX_CONTROL_ABT                   (0x40000000)
+#define GE_E0_RX_CONTROL_EII                   (0x80000000)
+
+#define reg_RX_EXTENDED_STATUS(base)           __REG32(base, 0x0000032c)
+#define RX_EXTENDED_STATUS                     (0x0000032c)
+#define RX_EXTENDED_STATUS_EOQ                 (0x0000000f)
+#define RX_EXTENDED_STATUS_EOQ_0               (0x00000001)
+#define RX_EXTENDED_STATUS_EOF                 (0x00000f00)
+#define RX_EXTENDED_STATUS_DESCRIPTOR_INTERRUPT_CONDITION      (0x000f0000)
+#define RX_EXTENDED_STATUS_ERROR_FLAG                          (0x0f000000)
+
+#define reg_RX_THRESHOLDS(base)                        __REG32(base, 0x00000330)
+
+#define reg_RX_DIAGNOSTIC_ADDR(base)           __REG32(base, 0x00000370)
+#define RX_DIAGNOSTIC_ADDR_INDEX               (0x0000007f)
+#define RX_DIAGNOSTIC_ADDR_DFR                 (0x40000000)
+#define RX_DIAGNOSTIC_ADDR_AI                  (0x80000000)
+
+#define reg_RX_DIAGNOSTIC_DATA(base)           __REG32(base, 0x00000374)
+
+#define reg_RX_QUEUE_0_CONFIG(base)            __REG32(base, 0x00000380)
+#define RX_QUEUE_0_CONFIG_OCN_PORT             (0x0000003f)
+#define RX_QUEUE_0_CONFIG_BSWP                 (0x00000400)
+#define RX_QUEUE_0_CONFIG_WSWP                 (0x00000800)
+#define RX_QUEUE_0_CONFIG_AM                   (0x00004000)
+#define RX_QUEUE_0_CONFIG_EEI                  (0x00010000)
+#define RX_QUEUE_0_CONFIG_ELI                  (0x00020000)
+#define RX_QUEUE_0_CONFIG_ENI                  (0x00040000)
+#define RX_QUEUE_0_CONFIG_ESI                  (0x00080000)
+#define RX_QUEUE_0_CONFIG_EDI                  (0x00100000)
+
+#define reg_RX_QUEUE_0_BUF_CONFIG(base)                __REG32(base, 0x00000384)
+#define RX_QUEUE_0_BUF_CONFIG_OCN_PORT         (0x0000003f)
+#define RX_QUEUE_0_BUF_CONFIG_BURST            (0x00000300)
+#define RX_QUEUE_0_BUF_CONFIG_BSWP             (0x00000400)
+#define RX_QUEUE_0_BUF_CONFIG_WSWP             (0x00000800)
+
+#define reg_RX_QUEUE_0_PTR_LOW(base)           __REG32(base, 0x00000388)
+
+#define reg_RX_QUEUE_0_PTR_HIGH(base)          __REG32(base, 0x0000038c)
+#define RX_QUEUE_0_PTR_HIGH_VALID              (0x80000000)
+
+/*
+ *  PHY register definitions
+ */
+/* the first 15 PHY registers are standard. */
+#define PHY_CTRL_REG           0       /* Control Register */
+#define PHY_STATUS_REG         1       /* Status Regiser */
+#define PHY_ID1_REG            2       /* Phy Id Reg (word 1) */
+#define PHY_ID2_REG            3       /* Phy Id Reg (word 2) */
+#define PHY_AN_ADV_REG         4       /* Autoneg Advertisement */
+#define PHY_LP_ABILITY_REG     5       /* Link Partner Ability (Base Page) */
+#define PHY_AUTONEG_EXP_REG    6       /* Autoneg Expansion Reg */
+#define PHY_NEXT_PAGE_TX_REG   7       /* Next Page TX */
+#define PHY_LP_NEXT_PAGE_REG   8       /* Link Partner Next Page */
+#define PHY_1000T_CTRL_REG     9       /* 1000Base-T Control Reg */
+#define PHY_1000T_STATUS_REG   10      /* 1000Base-T Status Reg */
+#define PHY_EXT_STATUS_REG     11      /* Extended Status Reg */
+
+/*
+ * PHY Register bit masks.
+ */
+#define PHY_CTRL_RESET         (1 << 15)
+#define PHY_CTRL_LOOPBACK      (1 << 14)
+#define PHY_CTRL_SPEED0                (1 << 13)
+#define PHY_CTRL_AN_EN         (1 << 12)
+#define PHY_CTRL_PWR_DN                (1 << 11)
+#define PHY_CTRL_ISOLATE       (1 << 10)
+#define PHY_CTRL_RESTART_AN    (1 << 9)
+#define PHY_CTRL_FULL_DUPLEX   (1 << 8)
+#define PHY_CTRL_CT_EN         (1 << 7)
+#define PHY_CTRL_SPEED1                (1 << 6)
+
+#define PHY_STAT_100BASE_T4    (1 << 15)
+#define PHY_STAT_100BASE_X_FD  (1 << 14)
+#define PHY_STAT_100BASE_X_HD  (1 << 13)
+#define PHY_STAT_10BASE_T_FD   (1 << 12)
+#define PHY_STAT_10BASE_T_HD   (1 << 11)
+#define PHY_STAT_100BASE_T2_FD (1 << 10)
+#define PHY_STAT_100BASE_T2_HD (1 << 9)
+#define PHY_STAT_EXT_STAT      (1 << 8)
+#define PHY_STAT_RESERVED      (1 << 7)
+#define PHY_STAT_MFPS          (1 << 6)        /* Management Frames Preamble Suppression */
+#define PHY_STAT_AN_COMPLETE   (1 << 5)
+#define PHY_STAT_REM_FAULT     (1 << 4)
+#define PHY_STAT_AN_CAP                (1 << 3)
+#define PHY_STAT_LINK_UP       (1 << 2)
+#define PHY_STAT_JABBER                (1 << 1)
+#define PHY_STAT_EXT_CAP       (1 << 0)
+
+#define TBI_CONTROL_2                                  0x11
+#define TBI_CONTROL_2_ENABLE_COMMA_DETECT              0x0001
+#define TBI_CONTROL_2_ENABLE_WRAP                      0x0002
+#define TBI_CONTROL_2_G_MII_MODE                       0x0010
+#define TBI_CONTROL_2_RECEIVE_CLOCK_SELECT             0x0020
+#define TBI_CONTROL_2_AUTO_NEGOTIATION_SENSE           0x0100
+#define TBI_CONTROL_2_DISABLE_TRANSMIT_RUNNING_DISPARITY       0x1000
+#define TBI_CONTROL_2_DISABLE_RECEIVE_RUNNING_DISPARITY                0x2000
+#define TBI_CONTROL_2_SHORTCUT_LINK_TIMER                      0x4000
+#define TBI_CONTROL_2_SOFT_RESET                               0x8000
+
+/* marvel specific */
+#define MV1111_EXT_CTRL1_REG   16      /* PHY Specific Control Reg */
+#define MV1111_SPEC_STAT_REG   17      /* PHY Specific Status Reg */
+#define MV1111_EXT_CTRL2_REG   20      /* Extended PHY Specific Control Reg */
+
+/*
+ * MARVELL 88E1111 PHY register bit masks
+ */
+/* PHY Specific Status Register (MV1111_EXT_CTRL1_REG) */
+
+#define SPEC_STAT_SPEED_MASK   (3 << 14)
+#define SPEC_STAT_FULL_DUP     (1 << 13)
+#define SPEC_STAT_PAGE_RCVD    (1 << 12)
+#define SPEC_STAT_RESOLVED     (1 << 11)       /* Speed and Duplex Resolved */
+#define SPEC_STAT_LINK_UP      (1 << 10)
+#define SPEC_STAT_CABLE_LEN_MASK       (7 << 7)/* Cable Length (100/1000 modes only) */
+#define SPEC_STAT_MDIX         (1 << 6)
+#define SPEC_STAT_POLARITY     (1 << 1)
+#define SPEC_STAT_JABBER       (1 << 0)
+
+#define SPEED_1000             (2 << 14)
+#define SPEED_100              (1 << 14)
+#define SPEED_10               (0 << 14)
+
+#define TBI_ADDR       0x1E    /* Ten Bit Interface address */
+
+/* negotiated link parameters */
+#define LINK_SPEED_UNKNOWN     0
+#define LINK_SPEED_10          1
+#define LINK_SPEED_100         2
+#define LINK_SPEED_1000                3
+
+#define LINK_DUPLEX_UNKNOWN    0
+#define LINK_DUPLEX_HALF       1
+#define LINK_DUPLEX_FULL       2
+
+static unsigned int phy_address[] = { 8, 9 };
+
+#define vuint32 volatile u32
+
+/* TX/RX buffer descriptors. MUST be cache line aligned in memory. (32 byte)
+ * This structure is accessed by the ethernet DMA engine which means it
+ * MUST be in LITTLE ENDIAN format */
+struct dma_descriptor {
+       vuint32 start_addr0;    /* buffer address, least significant bytes. */
+       vuint32 start_addr1;    /* buffer address, most significant bytes. */
+       vuint32 next_descr_addr0;/* next descriptor address, least significant bytes.  Must be 64-bit aligned. */
+       vuint32 next_descr_addr1;/* next descriptor address, most significant bytes. */
+       vuint32 vlan_byte_count;/* VLAN tag(top 2 bytes) and byte countt (bottom 2 bytes). */
+       vuint32 config_status;  /* Configuration/Status. */
+       vuint32 reserved1;      /* reserved to make the descriptor cache line aligned. */
+       vuint32 reserved2;      /* reserved to make the descriptor cache line aligned. */
+};
+
+/* last next descriptor address flag */
+#define DMA_DESCR_LAST         (1 << 31)
+
+/* TX DMA descriptor config status bits */
+#define DMA_DESCR_TX_EOF       (1 <<  0)       /* end of frame */
+#define DMA_DESCR_TX_SOF       (1 <<  1)       /* start of frame */
+#define DMA_DESCR_TX_PFVLAN    (1 <<  2)
+#define DMA_DESCR_TX_HUGE      (1 <<  3)
+#define DMA_DESCR_TX_PAD       (1 <<  4)
+#define DMA_DESCR_TX_CRC       (1 <<  5)
+#define DMA_DESCR_TX_DESCR_INT (1 << 14)
+#define DMA_DESCR_TX_RETRY_COUNT       0x000F0000
+#define DMA_DESCR_TX_ONE_COLLISION     (1 << 20)
+#define DMA_DESCR_TX_LATE_COLLISION    (1 << 24)
+#define DMA_DESCR_TX_UNDERRUN          (1 << 25)
+#define DMA_DESCR_TX_RETRY_LIMIT       (1 << 26)
+#define DMA_DESCR_TX_OK                        (1 << 30)
+#define DMA_DESCR_TX_OWNER             (1 << 31)
+
+/* RX DMA descriptor status bits */
+#define DMA_DESCR_RX_EOF               (1 <<  0)
+#define DMA_DESCR_RX_SOF               (1 <<  1)
+#define DMA_DESCR_RX_VTF               (1 <<  2)
+#define DMA_DESCR_RX_FRAME_IS_TYPE     (1 <<  3)
+#define DMA_DESCR_RX_SHORT_FRAME       (1 <<  4)
+#define DMA_DESCR_RX_HASH_MATCH                (1 <<  7)
+#define DMA_DESCR_RX_BAD_FRAME         (1 <<  8)
+#define DMA_DESCR_RX_OVERRUN           (1 <<  9)
+#define DMA_DESCR_RX_MAX_FRAME_LEN     (1 << 11)
+#define DMA_DESCR_RX_CRC_ERROR         (1 << 12)
+#define DMA_DESCR_RX_DESCR_INT         (1 << 13)
+#define DMA_DESCR_RX_OWNER             (1 << 15)
+
+#define RX_BUFFER_SIZE PKTSIZE
+#define NUM_RX_DESC    PKTBUFSRX
+
+static struct dma_descriptor tx_descriptor __attribute__ ((aligned(32)));
+
+static struct dma_descriptor rx_descr_array[NUM_RX_DESC]
+       __attribute__ ((aligned(32)));
+
+static struct dma_descriptor *rx_descr_current;
+
+static int tsi108_eth_probe (struct eth_device *dev, bd_t * bis);
+static int tsi108_eth_send (struct eth_device *dev,
+                          volatile void *packet, int length);
+static int tsi108_eth_recv (struct eth_device *dev);
+static void tsi108_eth_halt (struct eth_device *dev);
+static unsigned int read_phy (unsigned int base,
+                            unsigned int phy_addr, unsigned int phy_reg);
+static void write_phy (unsigned int base,
+                     unsigned int phy_addr,
+                     unsigned int phy_reg, unsigned int phy_data);
+
+#if TSI108_ETH_DEBUG > 100
+/*
+ * print phy debug infomation
+ */
+static void dump_phy_regs (unsigned int phy_addr)
+{
+       int i;
+
+       printf ("PHY %d registers\n", phy_addr);
+       for (i = 0; i <= 30; i++) {
+               printf ("%2d  0x%04x\n", i, read_phy (ETH_BASE, phy_addr, i));
+       }
+       printf ("\n");
+
+}
+#else
+#define dump_phy_regs(base) do{}while(0)
+#endif
+
+#if TSI108_ETH_DEBUG > 100
+/*
+ * print debug infomation
+ */
+static void tx_diag_regs (unsigned int base)
+{
+       int i;
+       unsigned long dummy;
+
+       printf ("TX diagnostics registers\n");
+       reg_TX_DIAGNOSTIC_ADDR(base) = 0x00 | TX_DIAGNOSTIC_ADDR_AI;
+       udelay (1000);
+       dummy = reg_TX_DIAGNOSTIC_DATA(base);
+       for (i = 0x00; i <= 0x05; i++) {
+               udelay (1000);
+               printf ("0x%02x  0x%08x\n", i, reg_TX_DIAGNOSTIC_DATA(base));
+       }
+       reg_TX_DIAGNOSTIC_ADDR(base) = 0x40 | TX_DIAGNOSTIC_ADDR_AI;
+       udelay (1000);
+       dummy = reg_TX_DIAGNOSTIC_DATA(base);
+       for (i = 0x40; i <= 0x47; i++) {
+               udelay (1000);
+               printf ("0x%02x  0x%08x\n", i, reg_TX_DIAGNOSTIC_DATA(base));
+       }
+       printf ("\n");
+
+}
+#else
+#define tx_diag_regs(base) do{}while(0)
+#endif
+
+#if TSI108_ETH_DEBUG > 100
+/*
+ * print debug infomation
+ */
+static void rx_diag_regs (unsigned int base)
+{
+       int i;
+       unsigned long dummy;
+
+       printf ("RX diagnostics registers\n");
+       reg_RX_DIAGNOSTIC_ADDR(base) = 0x00 | RX_DIAGNOSTIC_ADDR_AI;
+       udelay (1000);
+       dummy = reg_RX_DIAGNOSTIC_DATA(base);
+       for (i = 0x00; i <= 0x05; i++) {
+               udelay (1000);
+               printf ("0x%02x  0x%08x\n", i, reg_RX_DIAGNOSTIC_DATA(base));
+       }
+       reg_RX_DIAGNOSTIC_ADDR(base) = 0x40 | RX_DIAGNOSTIC_ADDR_AI;
+       udelay (1000);
+       dummy = reg_RX_DIAGNOSTIC_DATA(base);
+       for (i = 0x08; i <= 0x0a; i++) {
+               udelay (1000);
+               printf ("0x%02x  0x%08x\n", i, reg_RX_DIAGNOSTIC_DATA(base));
+       }
+       printf ("\n");
+
+}
+#else
+#define rx_diag_regs(base) do{}while(0)
+#endif
+
+#if TSI108_ETH_DEBUG > 100
+/*
+ * print debug infomation
+ */
+static void debug_mii_regs (unsigned int base)
+{
+       printf ("MII_MGMT_CONFIG     0x%08x\n", reg_MII_MGMT_CONFIG(base));
+       printf ("MII_MGMT_COMMAND    0x%08x\n", reg_MII_MGMT_COMMAND(base));
+       printf ("MII_MGMT_ADDRESS    0x%08x\n", reg_MII_MGMT_ADDRESS(base));
+       printf ("MII_MGMT_CONTROL    0x%08x\n", reg_MII_MGMT_CONTROL(base));
+       printf ("MII_MGMT_STATUS     0x%08x\n", reg_MII_MGMT_STATUS(base));
+       printf ("MII_MGMT_INDICATORS 0x%08x\n", reg_MII_MGMT_INDICATORS(base));
+       printf ("\n");
+
+}
+#else
+#define debug_mii_regs(base) do{}while(0)
+#endif
+
+/*
+ * Wait until the phy bus is non-busy
+ */
+static void phy_wait (unsigned int base, unsigned int condition)
+{
+       int timeout;
+
+       timeout = 0;
+       while (reg_MII_MGMT_INDICATORS(base) & condition) {
+               udelay (10);
+               if (++timeout > 10000) {
+                       printf ("ERROR: timeout waiting for phy bus (%d)\n",
+                              condition);
+                       break;
+               }
+       }
+}
+
+/*
+ * read phy register
+ */
+static unsigned int read_phy (unsigned int base,
+                            unsigned int phy_addr, unsigned int phy_reg)
+{
+       unsigned int value;
+
+       phy_wait (base, MII_MGMT_INDICATORS_BUSY);
+
+       reg_MII_MGMT_ADDRESS(base) = (phy_addr << 8) | phy_reg;
+
+       /* Ensure that the Read Cycle bit is cleared prior to next read cycle */
+       reg_MII_MGMT_COMMAND(base) = 0;
+
+       /* start the read */
+       reg_MII_MGMT_COMMAND(base) = MII_MGMT_COMMAND_READ_CYCLE;
+
+       /* wait for the read to complete */
+       phy_wait (base,
+                MII_MGMT_INDICATORS_NOT_VALID | MII_MGMT_INDICATORS_BUSY);
+
+       value = reg_MII_MGMT_STATUS(base);
+
+       reg_MII_MGMT_COMMAND(base) = 0;
+
+       return value;
+}
+
+/*
+ * write phy register
+ */
+static void write_phy (unsigned int base,
+                     unsigned int phy_addr,
+                     unsigned int phy_reg, unsigned int phy_data)
+{
+       phy_wait (base, MII_MGMT_INDICATORS_BUSY);
+
+       reg_MII_MGMT_ADDRESS(base) = (phy_addr << 8) | phy_reg;
+
+       /* Ensure that the Read Cycle bit is cleared prior to next cycle */
+       reg_MII_MGMT_COMMAND(base) = 0;
+
+       /* start the write */
+       reg_MII_MGMT_CONTROL(base) = phy_data;
+}
+
+/*
+ * configure the marvell 88e1111 phy
+ */
+static int marvell_88e_phy_config (struct eth_device *dev, int *speed,
+                                 int *duplex)
+{
+       unsigned long base;
+       unsigned long phy_addr;
+       unsigned int phy_status;
+       unsigned int phy_spec_status;
+       int timeout;
+       int phy_speed;
+       int phy_duplex;
+       unsigned int value;
+
+       phy_speed = LINK_SPEED_UNKNOWN;
+       phy_duplex = LINK_DUPLEX_UNKNOWN;
+
+       base = dev->iobase;
+       phy_addr = (unsigned long)dev->priv;
+
+       /* Take the PHY out of reset. */
+       write_phy (ETH_BASE, phy_addr, PHY_CTRL_REG, PHY_CTRL_RESET);
+
+       /* Wait for the reset process to complete. */
+       udelay (10);
+       timeout = 0;
+       while ((phy_status =
+               read_phy (ETH_BASE, phy_addr, PHY_CTRL_REG)) & PHY_CTRL_RESET) {
+               udelay (10);
+               if (++timeout > 10000) {
+                       printf ("ERROR: timeout waiting for phy reset\n");
+                       break;
+               }
+       }
+
+       /* TBI Configuration. */
+       write_phy (base, TBI_ADDR, TBI_CONTROL_2, TBI_CONTROL_2_G_MII_MODE |
+                 TBI_CONTROL_2_RECEIVE_CLOCK_SELECT);
+       /* Wait for the link to be established. */
+       timeout = 0;
+       do {
+               udelay (20000);
+               phy_status = read_phy (ETH_BASE, phy_addr, PHY_STATUS_REG);
+               if (++timeout > 100) {
+                       debug_lev(1, "ERROR: unable to establish link!!!\n");
+                       break;
+               }
+       } while ((phy_status & PHY_STAT_LINK_UP) == 0);
+
+       if ((phy_status & PHY_STAT_LINK_UP) == 0)
+               return 0;
+
+       value = 0;
+       phy_spec_status = read_phy (ETH_BASE, phy_addr, MV1111_SPEC_STAT_REG);
+       if (phy_spec_status & SPEC_STAT_RESOLVED) {
+               switch (phy_spec_status & SPEC_STAT_SPEED_MASK) {
+               case SPEED_1000:
+                       phy_speed = LINK_SPEED_1000;
+                       value |= PHY_CTRL_SPEED1;
+                       break;
+               case SPEED_100:
+                       phy_speed = LINK_SPEED_100;
+                       value |= PHY_CTRL_SPEED0;
+                       break;
+               case SPEED_10:
+                       phy_speed = LINK_SPEED_10;
+                       break;
+               }
+               if (phy_spec_status & SPEC_STAT_FULL_DUP) {
+                       phy_duplex = LINK_DUPLEX_FULL;
+                       value |= PHY_CTRL_FULL_DUPLEX;
+               } else
+                       phy_duplex = LINK_DUPLEX_HALF;
+       }
+       /* set TBI speed */
+       write_phy (base, TBI_ADDR, PHY_CTRL_REG, value);
+       write_phy (base, TBI_ADDR, PHY_AN_ADV_REG, 0x0060);
+
+#if TSI108_ETH_DEBUG > 0
+       printf ("%s link is up", dev->name);
+       phy_spec_status = read_phy (ETH_BASE, phy_addr, MV1111_SPEC_STAT_REG);
+       if (phy_spec_status & SPEC_STAT_RESOLVED) {
+               switch (phy_speed) {
+               case LINK_SPEED_1000:
+                       printf (", 1000 Mbps");
+                       break;
+               case LINK_SPEED_100:
+                       printf (", 100 Mbps");
+                       break;
+               case LINK_SPEED_10:
+                       printf (", 10 Mbps");
+                       break;
+               }
+               if (phy_duplex == LINK_DUPLEX_FULL)
+                       printf (", Full duplex");
+               else
+                       printf (", Half duplex");
+       }
+       printf ("\n");
+#endif
+
+       dump_phy_regs (TBI_ADDR);
+       if (speed)
+               *speed = phy_speed;
+       if (duplex)
+               *duplex = phy_duplex;
+
+       return 1;
+}
+
+/*
+ * External interface
+ *
+ * register the tsi108 ethernet controllers with the multi-ethernet system
+ */
+int tsi108_eth_initialize (bd_t * bis)
+{
+       struct eth_device *dev;
+       int index;
+
+       for (index = 0; index < CONFIG_TSI108_ETH_NUM_PORTS; index++) {
+               dev = (struct eth_device *)malloc(sizeof(struct eth_device));
+
+               sprintf (dev->name, "TSI108_eth%d", index);
+
+               dev->iobase = ETH_BASE + (index * ETH_PORT_OFFSET);
+               dev->priv = (void *)(phy_address[index]);
+               dev->init = tsi108_eth_probe;
+               dev->halt = tsi108_eth_halt;
+               dev->send = tsi108_eth_send;
+               dev->recv = tsi108_eth_recv;
+
+               eth_register(dev);
+       }
+       return index;
+}
+
+/*
+ * probe for and initialize a single ethernet interface
+ */
+static int tsi108_eth_probe (struct eth_device *dev, bd_t * bis)
+{
+       unsigned long base;
+       unsigned long value;
+       int index;
+       struct dma_descriptor *tx_descr;
+       struct dma_descriptor *rx_descr;
+       int speed;
+       int duplex;
+
+       base = dev->iobase;
+
+       reg_PORT_CONTROL(base) = PORT_CONTROL_STE | PORT_CONTROL_BPT;
+
+       /* Bring DMA/FIFO out of reset. */
+       reg_TX_CONFIG(base) = 0x00000000;
+       reg_RX_CONFIG(base) = 0x00000000;
+
+       reg_TX_THRESHOLDS(base) = (192 << 16) | 192;
+       reg_RX_THRESHOLDS(base) = (192 << 16) | 112;
+
+       /* Bring MAC out of reset. */
+       reg_MAC_CONFIG_1(base) = 0x00000000;
+
+       /* DMA MAC configuration. */
+       reg_MAC_CONFIG_1(base) =
+           MAC_CONFIG_1_RX_ENABLE | MAC_CONFIG_1_TX_ENABLE;
+
+       reg_MII_MGMT_CONFIG(base) = MII_MGMT_CONFIG_NO_PREAMBLE;
+       reg_MAXIMUM_FRAME_LENGTH(base) = RX_BUFFER_SIZE;
+
+       /* Note: Early tsi108 manual did not have correct byte order
+        * for the station address.*/
+       reg_STATION_ADDRESS_1(base) = (dev->enetaddr[5] << 24) |
+           (dev->enetaddr[4] << 16) |
+           (dev->enetaddr[3] << 8) | (dev->enetaddr[2] << 0);
+
+       reg_STATION_ADDRESS_2(base) = (dev->enetaddr[1] << 24) |
+           (dev->enetaddr[0] << 16);
+
+       if (marvell_88e_phy_config(dev, &speed, &duplex) == 0)
+               return 0;
+
+       value =
+           MAC_CONFIG_2_PREAMBLE_LENGTH(7) | MAC_CONFIG_2_PAD_CRC |
+           MAC_CONFIG_2_CRC_ENABLE;
+       if (speed == LINK_SPEED_1000)
+               value |= MAC_CONFIG_2_INTERFACE_MODE(INTERFACE_MODE_BYTE);
+       else {
+               value |= MAC_CONFIG_2_INTERFACE_MODE(INTERFACE_MODE_NIBBLE);
+               reg_PORT_CONTROL(base) |= PORT_CONTROL_SPD;
+       }
+       if (duplex == LINK_DUPLEX_FULL) {
+               value |= MAC_CONFIG_2_FULL_DUPLEX;
+               reg_PORT_CONTROL(base) &= ~PORT_CONTROL_BPT;
+       } else
+               reg_PORT_CONTROL(base) |= PORT_CONTROL_BPT;
+       reg_MAC_CONFIG_2(base) = value;
+
+       reg_RX_CONFIG(base) = RX_CONFIG_SE;
+       reg_RX_QUEUE_0_CONFIG(base) = OCN_PORT_MEMORY;
+       reg_RX_QUEUE_0_BUF_CONFIG(base) = OCN_PORT_MEMORY;
+
+       /* initialize the RX DMA descriptors */
+       rx_descr = &rx_descr_array[0];
+       rx_descr_current = rx_descr;
+       for (index = 0; index < NUM_RX_DESC; index++) {
+               /* make sure the receive buffers are not in cache */
+               invalidate_dcache_range((unsigned long)NetRxPackets[index],
+                                       (unsigned long)NetRxPackets[index] +
+                                       RX_BUFFER_SIZE);
+               rx_descr->start_addr0 =
+                   cpu_to_le32((vuint32) NetRxPackets[index]);
+               rx_descr->start_addr1 = 0;
+               rx_descr->next_descr_addr0 =
+                   cpu_to_le32((vuint32) (rx_descr + 1));
+               rx_descr->next_descr_addr1 = 0;
+               rx_descr->vlan_byte_count = 0;
+               rx_descr->config_status = cpu_to_le32((RX_BUFFER_SIZE << 16) |
+                                                     DMA_DESCR_RX_OWNER);
+               rx_descr++;
+       }
+       rx_descr--;
+       rx_descr->next_descr_addr0 = 0;
+       rx_descr->next_descr_addr1 = cpu_to_le32(DMA_DESCR_LAST);
+       /* Push the descriptors to RAM so the ethernet DMA can see them */
+       invalidate_dcache_range((unsigned long)rx_descr_array,
+                               (unsigned long)rx_descr_array +
+                               sizeof(rx_descr_array));
+
+       /* enable RX queue */
+       reg_RX_CONTROL(base) = TX_CONTROL_GO | 0x01;
+       reg_RX_QUEUE_0_PTR_LOW(base) = (u32) rx_descr_current;
+       /* enable receive DMA */
+       reg_RX_QUEUE_0_PTR_HIGH(base) = RX_QUEUE_0_PTR_HIGH_VALID;
+
+       reg_TX_QUEUE_0_CONFIG(base) = OCN_PORT_MEMORY;
+       reg_TX_QUEUE_0_BUF_CONFIG(base) = OCN_PORT_MEMORY;
+
+       /* initialize the TX DMA descriptor */
+       tx_descr = &tx_descriptor;
+
+       tx_descr->start_addr0 = 0;
+       tx_descr->start_addr1 = 0;
+       tx_descr->next_descr_addr0 = 0;
+       tx_descr->next_descr_addr1 = cpu_to_le32(DMA_DESCR_LAST);
+       tx_descr->vlan_byte_count = 0;
+       tx_descr->config_status = cpu_to_le32(DMA_DESCR_TX_OK |
+                                             DMA_DESCR_TX_SOF |
+                                             DMA_DESCR_TX_EOF);
+       /* enable TX queue */
+       reg_TX_CONTROL(base) = TX_CONTROL_GO | 0x01;
+
+       return 1;
+}
+
+/*
+ * send a packet
+ */
+static int tsi108_eth_send (struct eth_device *dev,
+                          volatile void *packet, int length)
+{
+       unsigned long base;
+       int timeout;
+       struct dma_descriptor *tx_descr;
+       unsigned long status;
+
+       base = dev->iobase;
+       tx_descr = &tx_descriptor;
+
+       /* Wait until the last packet has been transmitted. */
+       timeout = 0;
+       do {
+               /* make sure we see the changes made by the DMA engine */
+               invalidate_dcache_range((unsigned long)tx_descr,
+                                       (unsigned long)tx_descr +
+                                       sizeof(struct dma_descriptor));
+
+               if (timeout != 0)
+                       udelay (15);
+               if (++timeout > 10000) {
+                       tx_diag_regs(base);
+                       debug_lev(1,
+                                 "ERROR: timeout waiting for last transmit packet to be sent\n");
+                       return 0;
+               }
+       } while (tx_descr->config_status & cpu_to_le32(DMA_DESCR_TX_OWNER));
+
+       status = le32_to_cpu(tx_descr->config_status);
+       if ((status & DMA_DESCR_TX_OK) == 0) {
+#ifdef TX_PRINT_ERRORS
+               printf ("TX packet error: 0x%08x\n    %s%s%s%s\n", status,
+                      status & DMA_DESCR_TX_OK ? "tx error, " : "",
+                      status & DMA_DESCR_TX_RETRY_LIMIT ?
+                      "retry limit reached, " : "",
+                      status & DMA_DESCR_TX_UNDERRUN ? "underrun, " : "",
+                      status & DMA_DESCR_TX_LATE_COLLISION ? "late collision, "
+                      : "");
+#endif
+       }
+
+       debug_lev (9, "sending packet %d\n", length);
+       tx_descr->start_addr0 = cpu_to_le32((vuint32) packet);
+       tx_descr->start_addr1 = 0;
+       tx_descr->next_descr_addr0 = 0;
+       tx_descr->next_descr_addr1 = cpu_to_le32(DMA_DESCR_LAST);
+       tx_descr->vlan_byte_count = cpu_to_le32(length);
+       tx_descr->config_status = cpu_to_le32(DMA_DESCR_TX_OWNER |
+                                             DMA_DESCR_TX_CRC |
+                                             DMA_DESCR_TX_PAD |
+                                             DMA_DESCR_TX_SOF |
+                                             DMA_DESCR_TX_EOF);
+
+       invalidate_dcache_range((unsigned long)tx_descr,
+                               (unsigned long)tx_descr +
+                               sizeof(struct dma_descriptor));
+
+       invalidate_dcache_range((unsigned long)packet,
+                               (unsigned long)packet + length);
+
+       reg_TX_QUEUE_0_PTR_LOW(base) = (u32) tx_descr;
+       reg_TX_QUEUE_0_PTR_HIGH(base) = TX_QUEUE_0_PTR_HIGH_VALID;
+
+       return length;
+}
+
+/*
+ * Check for received packets and send them up the protocal stack
+ */
+static int tsi108_eth_recv (struct eth_device *dev)
+{
+       struct dma_descriptor *rx_descr;
+       unsigned long base;
+       int length = 0;
+       unsigned long status;
+       volatile uchar *buffer;
+
+       base = dev->iobase;
+
+       /* make sure we see the changes made by the DMA engine */
+       invalidate_dcache_range ((unsigned long)rx_descr_array,
+                               (unsigned long)rx_descr_array +
+                               sizeof(rx_descr_array));
+
+       /* process all of the received packets */
+       rx_descr = rx_descr_current;
+       while ((rx_descr->config_status & cpu_to_le32(DMA_DESCR_RX_OWNER)) == 0) {
+               /* check for error */
+               status = le32_to_cpu(rx_descr->config_status);
+               if (status & DMA_DESCR_RX_BAD_FRAME) {
+#ifdef RX_PRINT_ERRORS
+                       printf ("RX packet error: 0x%08x\n    %s%s%s%s%s%s\n",
+                              status,
+                              status & DMA_DESCR_RX_FRAME_IS_TYPE ? "too big, "
+                              : "",
+                              status & DMA_DESCR_RX_SHORT_FRAME ? "too short, "
+                              : "",
+                              status & DMA_DESCR_RX_BAD_FRAME ? "bad frame, " :
+                              "",
+                              status & DMA_DESCR_RX_OVERRUN ? "overrun, " : "",
+                              status & DMA_DESCR_RX_MAX_FRAME_LEN ?
+                              "max length, " : "",
+                              status & DMA_DESCR_RX_CRC_ERROR ? "CRC error, " :
+                              "");
+#endif
+               } else {
+                       length =
+                           le32_to_cpu(rx_descr->vlan_byte_count) & 0xFFFF;
+
+                       /*** process packet ***/
+                       buffer =
+                           (volatile uchar
+                            *)(le32_to_cpu (rx_descr->start_addr0));
+                       NetReceive (buffer, length);
+
+                       invalidate_dcache_range ((unsigned long)buffer,
+                                               (unsigned long)buffer +
+                                               RX_BUFFER_SIZE);
+               }
+               /* Give this buffer back to the DMA engine */
+               rx_descr->vlan_byte_count = 0;
+               rx_descr->config_status = cpu_to_le32 ((RX_BUFFER_SIZE << 16) |
+                                                     DMA_DESCR_RX_OWNER);
+               /* move descriptor pointer forward */
+               rx_descr =
+                   (struct dma_descriptor
+                    *)(le32_to_cpu (rx_descr->next_descr_addr0));
+               if (rx_descr == 0)
+                       rx_descr = &rx_descr_array[0];
+       }
+       /* remember where we are for next time */
+       rx_descr_current = rx_descr;
+
+       /* If the DMA engine has reached the end of the queue
+        * start over at the begining */
+       if (reg_RX_EXTENDED_STATUS(base) & RX_EXTENDED_STATUS_EOQ_0) {
+
+               reg_RX_EXTENDED_STATUS(base) = RX_EXTENDED_STATUS_EOQ_0;
+               reg_RX_QUEUE_0_PTR_LOW(base) = (u32) & rx_descr_array[0];
+               reg_RX_QUEUE_0_PTR_HIGH(base) = RX_QUEUE_0_PTR_HIGH_VALID;
+       }
+
+       return length;
+}
+
+/*
+ * disable an ethernet interface
+ */
+static void tsi108_eth_halt (struct eth_device *dev)
+{
+       unsigned long base;
+
+       base = dev->iobase;
+
+       /* Put DMA/FIFO into reset state. */
+       reg_TX_CONFIG(base) = TX_CONFIG_RST;
+       reg_RX_CONFIG(base) = RX_CONFIG_RST;
+
+       /* Put MAC into reset state. */
+       reg_MAC_CONFIG_1(base) = MAC_CONFIG_1_SOFT_RESET;
+}
+
+#endif
diff --git a/drivers/tsi108_i2c.c b/drivers/tsi108_i2c.c
new file mode 100644 (file)
index 0000000..eb52cb6
--- /dev/null
@@ -0,0 +1,283 @@
+/*
+ * (C) Copyright 2004 Tundra Semiconductor Corp.
+ * Author: Alex Bounine
+ *
+ * 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>
+
+#ifdef CONFIG_TSI108_I2C
+#include <tsi108.h>
+
+#if (CONFIG_COMMANDS & CFG_CMD_I2C)
+
+#define I2C_DELAY      100000
+#undef  DEBUG_I2C
+
+#ifdef DEBUG_I2C
+#define DPRINT(x) printf (x)
+#else
+#define DPRINT(x)
+#endif
+
+/* All functions assume that Tsi108 I2C block is the only master on the bus */
+/* I2C read helper function */
+
+static int i2c_read_byte (
+               uint i2c_chan,  /* I2C channel number: 0 - main, 1 - SDC SPD */
+               uchar chip_addr,/* I2C device address on the bus */
+               uint byte_addr, /* Byte address within I2C device */
+               uchar * buffer  /* pointer to data buffer */
+               )
+{
+       u32 temp;
+       u32 to_count = I2C_DELAY;
+       u32 op_status = TSI108_I2C_TIMEOUT_ERR;
+       u32 chan_offset = TSI108_I2C_OFFSET;
+
+       DPRINT (("I2C read_byte() %d 0x%02x 0x%02x\n",
+               i2c_chan, chip_addr, byte_addr));
+
+       if (0 != i2c_chan)
+               chan_offset = TSI108_I2C_SDRAM_OFFSET;
+
+       /* Check if I2C operation is in progress */
+       temp = *(u32 *) (CFG_TSI108_CSR_BASE + chan_offset + I2C_CNTRL2);
+
+       if (0 == (temp & (I2C_CNTRL2_RD_STATUS | I2C_CNTRL2_WR_STATUS |
+                         I2C_CNTRL2_START))) {
+               /* Set device address and operation (read = 0) */
+               temp = (byte_addr << 16) | ((chip_addr & 0x07) << 8) |
+                   ((chip_addr >> 3) & 0x0F);
+               *(u32 *) (CFG_TSI108_CSR_BASE + chan_offset + I2C_CNTRL1) =
+                   temp;
+
+               /* Issue the read command
+                * (at this moment all other parameters are 0
+                * (size = 1 byte, lane = 0)
+                */
+
+               *(u32 *) (CFG_TSI108_CSR_BASE + chan_offset + I2C_CNTRL2) =
+                   (I2C_CNTRL2_START);
+
+               /* Wait until operation completed */
+               do {
+                       /* Read I2C operation status */
+                       temp = *(u32 *) (CFG_TSI108_CSR_BASE + chan_offset + I2C_CNTRL2);
+
+                       if (0 == (temp & (I2C_CNTRL2_RD_STATUS | I2C_CNTRL2_START))) {
+                               if (0 == (temp &
+                                    (I2C_CNTRL2_I2C_CFGERR |
+                                     I2C_CNTRL2_I2C_TO_ERR))
+                                   ) {
+                                       op_status = TSI108_I2C_SUCCESS;
+
+                                       temp = *(u32 *) (CFG_TSI108_CSR_BASE +
+                                                        chan_offset +
+                                                        I2C_RD_DATA);
+
+                                       *buffer = (u8) (temp & 0xFF);
+                               } else {
+                                       /* report HW error */
+                                       op_status = TSI108_I2C_IF_ERROR;
+
+                                       DPRINT (("I2C HW error reported: 0x%02x\n", temp));
+                               }
+
+                               break;
+                       }
+               } while (to_count--);
+       } else {
+               op_status = TSI108_I2C_IF_BUSY;
+
+               DPRINT (("I2C Transaction start failed: 0x%02x\n", temp));
+       }
+
+       DPRINT (("I2C read_byte() status: 0x%02x\n", op_status));
+       return op_status;
+}
+
+/*
+ * I2C Read interface as defined in "include/i2c.h" :
+ *   chip_addr: I2C chip address, range 0..127
+ *                  (to read from SPD channel EEPROM use (0xD0 ... 0xD7)
+ *              NOTE: The bit 7 in the chip_addr serves as a channel select.
+ *              This hack is for enabling "isdram" command on Tsi108 boards
+ *              without changes to common code. Used for I2C reads only.
+ *   byte_addr: Memory or register address within the chip
+ *   alen:      Number of bytes to use for addr (typically 1, 2 for larger
+ *              memories, 0 for register type devices with only one
+ *              register)
+ *   buffer:    Pointer to destination buffer for data to be read
+ *   len:       How many bytes to read
+ *
+ *   Returns: 0 on success, not 0 on failure
+ */
+
+int i2c_read (uchar chip_addr, uint byte_addr, int alen,
+               uchar * buffer, int len)
+{
+       u32 op_status = TSI108_I2C_PARAM_ERR;
+       u32 i2c_if = 0;
+
+       /* Hack to support second (SPD) I2C controller (SPD EEPROM read only).*/
+       if (0xD0 == (chip_addr & ~0x07)) {
+               i2c_if = 1;
+               chip_addr &= 0x7F;
+       }
+       /* Check for valid I2C address */
+       if (chip_addr <= 0x7F && (byte_addr + len) <= (0x01 << (alen * 8))) {
+               while (len--) {
+                       op_status = i2c_read_byte(i2c_if, chip_addr, byte_addr++, buffer++);
+
+                       if (TSI108_I2C_SUCCESS != op_status) {
+                               DPRINT (("I2C read_byte() failed: 0x%02x (%d left)\n", op_status, len));
+
+                               break;
+                       }
+               }
+       }
+
+       DPRINT (("I2C read() status: 0x%02x\n", op_status));
+       return op_status;
+}
+
+/* I2C write helper function */
+
+static int i2c_write_byte (uchar chip_addr,/* I2C device address on the bus */
+                         uint byte_addr, /* Byte address within I2C device */
+                         uchar * buffer  /*  pointer to data buffer */
+                         )
+{
+       u32 temp;
+       u32 to_count = I2C_DELAY;
+       u32 op_status = TSI108_I2C_TIMEOUT_ERR;
+
+       /* Check if I2C operation is in progress */
+       temp = *(u32 *) (CFG_TSI108_CSR_BASE + TSI108_I2C_OFFSET + I2C_CNTRL2);
+
+       if (0 == (temp & (I2C_CNTRL2_RD_STATUS | I2C_CNTRL2_WR_STATUS | I2C_CNTRL2_START))) {
+               /* Place data into the I2C Tx Register */
+               *(u32 *) (CFG_TSI108_CSR_BASE + TSI108_I2C_OFFSET +
+                         I2C_TX_DATA) = (u32) * buffer;
+
+               /* Set device address and operation  */
+               temp =
+                   I2C_CNTRL1_I2CWRITE | (byte_addr << 16) |
+                   ((chip_addr & 0x07) << 8) | ((chip_addr >> 3) & 0x0F);
+               *(u32 *) (CFG_TSI108_CSR_BASE + TSI108_I2C_OFFSET +
+                         I2C_CNTRL1) = temp;
+
+               /* Issue the write command (at this moment all other parameters
+                * are 0 (size = 1 byte, lane = 0)
+                */
+
+               *(u32 *) (CFG_TSI108_CSR_BASE + TSI108_I2C_OFFSET +
+                         I2C_CNTRL2) = (I2C_CNTRL2_START);
+
+               op_status = TSI108_I2C_TIMEOUT_ERR;
+
+               /* Wait until operation completed */
+               do {
+                       /* Read I2C operation status */
+                       temp = *(u32 *) (CFG_TSI108_CSR_BASE + TSI108_I2C_OFFSET + I2C_CNTRL2);
+
+                       if (0 == (temp & (I2C_CNTRL2_WR_STATUS | I2C_CNTRL2_START))) {
+                               if (0 == (temp &
+                                    (I2C_CNTRL2_I2C_CFGERR |
+                                     I2C_CNTRL2_I2C_TO_ERR))) {
+                                       op_status = TSI108_I2C_SUCCESS;
+                               } else {
+                                       /* report detected HW error */
+                                       op_status = TSI108_I2C_IF_ERROR;
+
+                                       DPRINT (("I2C HW error reported: 0x%02x\n", temp));
+                               }
+
+                               break;
+                       }
+
+               } while (to_count--);
+       } else {
+               op_status = TSI108_I2C_IF_BUSY;
+
+               DPRINT (("I2C Transaction start failed: 0x%02x\n", temp));
+       }
+
+       return op_status;
+}
+
+/*
+ * I2C Write interface as defined in "include/i2c.h" :
+ *   chip_addr: I2C chip address, range 0..127
+ *   byte_addr: Memory or register address within the chip
+ *   alen:      Number of bytes to use for addr (typically 1, 2 for larger
+ *              memories, 0 for register type devices with only one
+ *              register)
+ *   buffer:    Pointer to data to be written
+ *   len:       How many bytes to write
+ *
+ *   Returns: 0 on success, not 0 on failure
+ */
+
+int i2c_write (uchar chip_addr, uint byte_addr, int alen, uchar * buffer,
+             int len)
+{
+       u32 op_status = TSI108_I2C_PARAM_ERR;
+
+       /* Check for valid I2C address */
+       if (chip_addr <= 0x7F && (byte_addr + len) <= (0x01 << (alen * 8))) {
+               while (len--) {
+                       op_status =
+                           i2c_write_byte (chip_addr, byte_addr++, buffer++);
+
+                       if (TSI108_I2C_SUCCESS != op_status) {
+                               DPRINT (("I2C write_byte() failed: 0x%02x (%d left)\n", op_status, len));
+
+                               break;
+                       }
+               }
+       }
+
+       return op_status;
+}
+
+/*
+ * I2C interface function as defined in "include/i2c.h".
+ * Probe the given I2C chip address by reading single byte from offset 0.
+ * Returns 0 if a chip responded, not 0 on failure.
+ */
+
+int i2c_probe (uchar chip)
+{
+       u32 tmp;
+
+       /*
+        * Try to read the first location of the chip.
+        * The Tsi108 HW doesn't support sending just the chip address
+        * and checkong for an <ACK> back.
+        */
+       return i2c_read (chip, 0, 1, (char *)&tmp, 1);
+}
+
+#endif /* (CONFIG_COMMANDS & CFG_CMD_I2C) */
+#endif /* CONFIG_TSI108_I2C */
diff --git a/drivers/tsi108_pci.c b/drivers/tsi108_pci.c
new file mode 100644 (file)
index 0000000..9f606df
--- /dev/null
@@ -0,0 +1,178 @@
+/*
+ * (C) Copyright 2004 Tundra Semiconductor Corp.
+ * Alex Bounine <alexandreb@tundra.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 initialisation for the Tsi108 EMU board.
+ */
+
+#include <config.h>
+
+#ifdef CONFIG_TSI108_PCI
+
+#include <common.h>
+#include <pci.h>
+#include <asm/io.h>
+#include <tsi108.h>
+
+struct pci_controller local_hose;
+
+void tsi108_clear_pci_error (void)
+{
+       u32 err_stat, err_addr, pci_stat;
+
+       /*
+        * Quietly clear errors signalled as result of PCI/X configuration read
+        * requests.
+        */
+       /* Read PB Error Log Registers */
+       err_stat = *(volatile u32 *)(CFG_TSI108_CSR_BASE +
+                                    TSI108_PB_REG_OFFSET + PB_ERRCS);
+       err_addr = *(volatile u32 *)(CFG_TSI108_CSR_BASE +
+                                    TSI108_PB_REG_OFFSET + PB_AERR);
+       if (err_stat & PB_ERRCS_ES) {
+               /* Clear PCI/X bus errors if applicable */
+               if ((err_addr & 0xFF000000) == CFG_PCI_CFG_BASE) {
+                       /* Clear error flag */
+                       *(u32 *) (CFG_TSI108_CSR_BASE +
+                                 TSI108_PB_REG_OFFSET + PB_ERRCS) =
+                           PB_ERRCS_ES;
+
+                       /* Clear read error reported in PB_ISR */
+                       *(u32 *) (CFG_TSI108_CSR_BASE +
+                                 TSI108_PB_REG_OFFSET + PB_ISR) =
+                           PB_ISR_PBS_RD_ERR;
+
+               /* Clear errors reported by PCI CSR (Normally Master Abort) */
+                       pci_stat = *(volatile u32 *)(CFG_TSI108_CSR_BASE +
+                                                    TSI108_PCI_REG_OFFSET +
+                                                    PCI_CSR);
+                       *(volatile u32 *)(CFG_TSI108_CSR_BASE +
+                                         TSI108_PCI_REG_OFFSET + PCI_CSR) =
+                           pci_stat;
+
+                       *(volatile u32 *)(CFG_TSI108_CSR_BASE +
+                                         TSI108_PCI_REG_OFFSET +
+                                         PCI_IRP_STAT) = PCI_IRP_STAT_P_CSR;
+               }
+       }
+
+       return;
+}
+
+unsigned int __get_pci_config_dword (u32 addr)
+{
+       unsigned int retval;
+
+       __asm__ __volatile__ ("       lwbrx %0,0,%1\n"
+                            "1:     eieio\n"
+                            "2:\n"
+                            ".section .fixup,\"ax\"\n"
+                            "3:     li %0,-1\n"
+                            "       b 2b\n"
+                            ".section __ex_table,\"a\"\n"
+                            "       .align 2\n"
+                            "       .long 1b,3b\n"
+                            ".text":"=r"(retval):"r"(addr));
+
+       return (retval);
+}
+
+static int tsi108_read_config_dword (struct pci_controller *hose,
+                                   pci_dev_t dev, int offset, u32 * value)
+{
+       dev &= (CFG_PCI_CFG_SIZE - 1);
+       dev |= (CFG_PCI_CFG_BASE | (offset & 0xfc));
+       *value = __get_pci_config_dword(dev);
+       if (0xFFFFFFFF == *value)
+               tsi108_clear_pci_error ();
+       return 0;
+}
+
+static int tsi108_write_config_dword (struct pci_controller *hose,
+                                    pci_dev_t dev, int offset, u32 value)
+{
+       dev &= (CFG_PCI_CFG_SIZE - 1);
+       dev |= (CFG_PCI_CFG_BASE | (offset & 0xfc));
+
+       out_le32 ((volatile unsigned *)dev, value);
+
+       return 0;
+}
+
+void pci_init_board (void)
+{
+       struct pci_controller *hose = (struct pci_controller *)&local_hose;
+
+       hose->first_busno = 0;
+       hose->last_busno = 0xff;
+
+       pci_set_region (hose->regions + 0,
+                      CFG_PCI_MEMORY_BUS,
+                      CFG_PCI_MEMORY_PHYS,
+                      CFG_PCI_MEMORY_SIZE, PCI_REGION_MEM | PCI_REGION_MEMORY);
+
+       /* PCI memory space */
+       pci_set_region (hose->regions + 1,
+                      CFG_PCI_MEM_BUS,
+                      CFG_PCI_MEM_PHYS, CFG_PCI_MEM_SIZE, PCI_REGION_MEM);
+
+       /* PCI I/O space */
+       pci_set_region (hose->regions + 2,
+                      CFG_PCI_IO_BUS,
+                      CFG_PCI_IO_PHYS, CFG_PCI_IO_SIZE, PCI_REGION_IO);
+
+       hose->region_count = 3;
+
+       pci_set_ops (hose,
+                   pci_hose_read_config_byte_via_dword,
+                   pci_hose_read_config_word_via_dword,
+                   tsi108_read_config_dword,
+                   pci_hose_write_config_byte_via_dword,
+                   pci_hose_write_config_word_via_dword,
+                   tsi108_write_config_dword);
+
+       pci_register_hose (hose);
+
+       hose->last_busno = pci_hose_scan (hose);
+
+       debug ("Done PCI initialization\n");
+       return;
+}
+
+#ifdef CONFIG_OF_FLAT_TREE
+void
+ft_pci_setup (void *blob, bd_t *bd)
+{
+       u32 *p;
+       int len;
+
+       p = (u32 *)ft_get_prop (blob, "/" OF_TSI "/pci@1000/bus-range", &len);
+       if (p != NULL) {
+               p[0] = local_hose.first_busno;
+               p[1] = local_hose.last_busno;
+       }
+
+}
+#endif
+
+#endif /* CONFIG_TSI108_PCI */
index 1b35585eee59232ea2d2375e8a3dc801941a42a8..d88d0f8f36e349db35317f84bb118a282735bd15 100644 (file)
@@ -45,7 +45,7 @@
 long zlib_decompress(unsigned char *data_in, unsigned char *cpage_out,
                      __u32 srclen, __u32 destlen)
 {
-    return (decompress_block(cpage_out, data_in + 2, ldr_memcpy));
+    return (decompress_block(cpage_out, data_in + 2, (void *) ldr_memcpy));
 
 }
 
index 33e396a066c8ad0387f07a48d0ef9eccf91012df..ba73bae9e5f8470f979c01490c978d2491b9a144 100644 (file)
@@ -111,7 +111,7 @@ typedef enum __cpu_t {
        CPU_750CX, CPU_750FX, CPU_750GX,
        CPU_7400,
        CPU_7410,
-       CPU_7448,
+       CPU_7447A, CPU_7448,
        CPU_7450, CPU_7455, CPU_7457,
        CPU_UNKNOWN} cpu_t;
 
diff --git a/include/asm-avr32/arch-at32ap7000/clk.h b/include/asm-avr32/arch-at32ap7000/clk.h
new file mode 100644 (file)
index 0000000..7e20d97
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * 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
+ */
+#ifndef __ASM_AVR32_ARCH_CLK_H__
+#define __ASM_AVR32_ARCH_CLK_H__
+
+#ifdef CONFIG_PLL
+#define MAIN_CLK_RATE ((CFG_OSC0_HZ / CFG_PLL0_DIV) * CFG_PLL0_MUL)
+#else
+#define MAIN_CLK_RATE (CFG_OSC0_HZ)
+#endif
+
+static inline unsigned long get_cpu_clk_rate(void)
+{
+       return MAIN_CLK_RATE >> CFG_CLKDIV_CPU;
+}
+static inline unsigned long get_hsb_clk_rate(void)
+{
+       return MAIN_CLK_RATE >> CFG_CLKDIV_HSB;
+}
+static inline unsigned long get_pba_clk_rate(void)
+{
+       return MAIN_CLK_RATE >> CFG_CLKDIV_PBA;
+}
+static inline unsigned long get_pbb_clk_rate(void)
+{
+       return MAIN_CLK_RATE >> CFG_CLKDIV_PBB;
+}
+
+/* Accessors for specific devices. More will be added as needed. */
+static inline unsigned long get_sdram_clk_rate(void)
+{
+       return get_hsb_clk_rate();
+}
+static inline unsigned long get_usart_clk_rate(unsigned int dev_id)
+{
+       return get_pba_clk_rate();
+}
+static inline unsigned long get_macb_pclk_rate(unsigned int dev_id)
+{
+       return get_pbb_clk_rate();
+}
+static inline unsigned long get_macb_hclk_rate(unsigned int dev_id)
+{
+       return get_hsb_clk_rate();
+}
+static inline unsigned long get_mci_clk_rate(void)
+{
+       return get_pbb_clk_rate();
+}
+
+#endif /* __ASM_AVR32_ARCH_CLK_H__ */
diff --git a/include/asm-avr32/arch-at32ap7000/gpio.h b/include/asm-avr32/arch-at32ap7000/gpio.h
new file mode 100644 (file)
index 0000000..e4812d4
--- /dev/null
@@ -0,0 +1,212 @@
+/*
+ * 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
+ */
+#ifndef __ASM_AVR32_ARCH_GPIO_H__
+#define __ASM_AVR32_ARCH_GPIO_H__
+
+#include <asm/arch/memory-map.h>
+
+#define NR_GPIO_CONTROLLERS    5
+
+/*
+ * Pin numbers identifying specific GPIO pins on the chip.
+ */
+#define GPIO_PIOA_BASE (0)
+#define GPIO_PIN_PA0   (GPIO_PIOA_BASE +  0)
+#define GPIO_PIN_PA1   (GPIO_PIOA_BASE +  1)
+#define GPIO_PIN_PA2   (GPIO_PIOA_BASE +  2)
+#define GPIO_PIN_PA3   (GPIO_PIOA_BASE +  3)
+#define GPIO_PIN_PA4   (GPIO_PIOA_BASE +  4)
+#define GPIO_PIN_PA5   (GPIO_PIOA_BASE +  5)
+#define GPIO_PIN_PA6   (GPIO_PIOA_BASE +  6)
+#define GPIO_PIN_PA7   (GPIO_PIOA_BASE +  7)
+#define GPIO_PIN_PA8   (GPIO_PIOA_BASE +  8)
+#define GPIO_PIN_PA9   (GPIO_PIOA_BASE +  9)
+#define GPIO_PIN_PA10  (GPIO_PIOA_BASE + 10)
+#define GPIO_PIN_PA11  (GPIO_PIOA_BASE + 11)
+#define GPIO_PIN_PA12  (GPIO_PIOA_BASE + 12)
+#define GPIO_PIN_PA13  (GPIO_PIOA_BASE + 13)
+#define GPIO_PIN_PA14  (GPIO_PIOA_BASE + 14)
+#define GPIO_PIN_PA15  (GPIO_PIOA_BASE + 15)
+#define GPIO_PIN_PA16  (GPIO_PIOA_BASE + 16)
+#define GPIO_PIN_PA17  (GPIO_PIOA_BASE + 17)
+#define GPIO_PIN_PA18  (GPIO_PIOA_BASE + 18)
+#define GPIO_PIN_PA19  (GPIO_PIOA_BASE + 19)
+#define GPIO_PIN_PA20  (GPIO_PIOA_BASE + 20)
+#define GPIO_PIN_PA21  (GPIO_PIOA_BASE + 21)
+#define GPIO_PIN_PA22  (GPIO_PIOA_BASE + 22)
+#define GPIO_PIN_PA23  (GPIO_PIOA_BASE + 23)
+#define GPIO_PIN_PA24  (GPIO_PIOA_BASE + 24)
+#define GPIO_PIN_PA25  (GPIO_PIOA_BASE + 25)
+#define GPIO_PIN_PA26  (GPIO_PIOA_BASE + 26)
+#define GPIO_PIN_PA27  (GPIO_PIOA_BASE + 27)
+#define GPIO_PIN_PA28  (GPIO_PIOA_BASE + 28)
+#define GPIO_PIN_PA29  (GPIO_PIOA_BASE + 29)
+#define GPIO_PIN_PA30  (GPIO_PIOA_BASE + 30)
+#define GPIO_PIN_PA31  (GPIO_PIOA_BASE + 31)
+
+#define GPIO_PIOB_BASE (GPIO_PIOA_BASE + 32)
+#define GPIO_PIN_PB0   (GPIO_PIOB_BASE +  0)
+#define GPIO_PIN_PB1   (GPIO_PIOB_BASE +  1)
+#define GPIO_PIN_PB2   (GPIO_PIOB_BASE +  2)
+#define GPIO_PIN_PB3   (GPIO_PIOB_BASE +  3)
+#define GPIO_PIN_PB4   (GPIO_PIOB_BASE +  4)
+#define GPIO_PIN_PB5   (GPIO_PIOB_BASE +  5)
+#define GPIO_PIN_PB6   (GPIO_PIOB_BASE +  6)
+#define GPIO_PIN_PB7   (GPIO_PIOB_BASE +  7)
+#define GPIO_PIN_PB8   (GPIO_PIOB_BASE +  8)
+#define GPIO_PIN_PB9   (GPIO_PIOB_BASE +  9)
+#define GPIO_PIN_PB10  (GPIO_PIOB_BASE + 10)
+#define GPIO_PIN_PB11  (GPIO_PIOB_BASE + 11)
+#define GPIO_PIN_PB12  (GPIO_PIOB_BASE + 12)
+#define GPIO_PIN_PB13  (GPIO_PIOB_BASE + 13)
+#define GPIO_PIN_PB14  (GPIO_PIOB_BASE + 14)
+#define GPIO_PIN_PB15  (GPIO_PIOB_BASE + 15)
+#define GPIO_PIN_PB16  (GPIO_PIOB_BASE + 16)
+#define GPIO_PIN_PB17  (GPIO_PIOB_BASE + 17)
+#define GPIO_PIN_PB18  (GPIO_PIOB_BASE + 18)
+#define GPIO_PIN_PB19  (GPIO_PIOB_BASE + 19)
+#define GPIO_PIN_PB20  (GPIO_PIOB_BASE + 20)
+#define GPIO_PIN_PB21  (GPIO_PIOB_BASE + 21)
+#define GPIO_PIN_PB22  (GPIO_PIOB_BASE + 22)
+#define GPIO_PIN_PB23  (GPIO_PIOB_BASE + 23)
+#define GPIO_PIN_PB24  (GPIO_PIOB_BASE + 24)
+#define GPIO_PIN_PB25  (GPIO_PIOB_BASE + 25)
+#define GPIO_PIN_PB26  (GPIO_PIOB_BASE + 26)
+#define GPIO_PIN_PB27  (GPIO_PIOB_BASE + 27)
+#define GPIO_PIN_PB28  (GPIO_PIOB_BASE + 28)
+#define GPIO_PIN_PB29  (GPIO_PIOB_BASE + 29)
+#define GPIO_PIN_PB30  (GPIO_PIOB_BASE + 30)
+
+#define GPIO_PIOC_BASE (GPIO_PIOB_BASE + 32)
+#define GPIO_PIN_PC0   (GPIO_PIOC_BASE +  0)
+#define GPIO_PIN_PC1   (GPIO_PIOC_BASE +  1)
+#define GPIO_PIN_PC2   (GPIO_PIOC_BASE +  2)
+#define GPIO_PIN_PC3   (GPIO_PIOC_BASE +  3)
+#define GPIO_PIN_PC4   (GPIO_PIOC_BASE +  4)
+#define GPIO_PIN_PC5   (GPIO_PIOC_BASE +  5)
+#define GPIO_PIN_PC6   (GPIO_PIOC_BASE +  6)
+#define GPIO_PIN_PC7   (GPIO_PIOC_BASE +  7)
+#define GPIO_PIN_PC8   (GPIO_PIOC_BASE +  8)
+#define GPIO_PIN_PC9   (GPIO_PIOC_BASE +  9)
+#define GPIO_PIN_PC10  (GPIO_PIOC_BASE + 10)
+#define GPIO_PIN_PC11  (GPIO_PIOC_BASE + 11)
+#define GPIO_PIN_PC12  (GPIO_PIOC_BASE + 12)
+#define GPIO_PIN_PC13  (GPIO_PIOC_BASE + 13)
+#define GPIO_PIN_PC14  (GPIO_PIOC_BASE + 14)
+#define GPIO_PIN_PC15  (GPIO_PIOC_BASE + 15)
+#define GPIO_PIN_PC16  (GPIO_PIOC_BASE + 16)
+#define GPIO_PIN_PC17  (GPIO_PIOC_BASE + 17)
+#define GPIO_PIN_PC18  (GPIO_PIOC_BASE + 18)
+#define GPIO_PIN_PC19  (GPIO_PIOC_BASE + 19)
+#define GPIO_PIN_PC20  (GPIO_PIOC_BASE + 20)
+#define GPIO_PIN_PC21  (GPIO_PIOC_BASE + 21)
+#define GPIO_PIN_PC22  (GPIO_PIOC_BASE + 22)
+#define GPIO_PIN_PC23  (GPIO_PIOC_BASE + 23)
+#define GPIO_PIN_PC24  (GPIO_PIOC_BASE + 24)
+#define GPIO_PIN_PC25  (GPIO_PIOC_BASE + 25)
+#define GPIO_PIN_PC26  (GPIO_PIOC_BASE + 26)
+#define GPIO_PIN_PC27  (GPIO_PIOC_BASE + 27)
+#define GPIO_PIN_PC28  (GPIO_PIOC_BASE + 28)
+#define GPIO_PIN_PC29  (GPIO_PIOC_BASE + 29)
+#define GPIO_PIN_PC30  (GPIO_PIOC_BASE + 30)
+#define GPIO_PIN_PC31  (GPIO_PIOC_BASE + 31)
+
+#define GPIO_PIOD_BASE (GPIO_PIOC_BASE + 32)
+#define GPIO_PIN_PD0   (GPIO_PIOD_BASE +  0)
+#define GPIO_PIN_PD1   (GPIO_PIOD_BASE +  1)
+#define GPIO_PIN_PD2   (GPIO_PIOD_BASE +  2)
+#define GPIO_PIN_PD3   (GPIO_PIOD_BASE +  3)
+#define GPIO_PIN_PD4   (GPIO_PIOD_BASE +  4)
+#define GPIO_PIN_PD5   (GPIO_PIOD_BASE +  5)
+#define GPIO_PIN_PD6   (GPIO_PIOD_BASE +  6)
+#define GPIO_PIN_PD7   (GPIO_PIOD_BASE +  7)
+#define GPIO_PIN_PD8   (GPIO_PIOD_BASE +  8)
+#define GPIO_PIN_PD9   (GPIO_PIOD_BASE +  9)
+#define GPIO_PIN_PD10  (GPIO_PIOD_BASE + 10)
+#define GPIO_PIN_PD11  (GPIO_PIOD_BASE + 11)
+#define GPIO_PIN_PD12  (GPIO_PIOD_BASE + 12)
+#define GPIO_PIN_PD13  (GPIO_PIOD_BASE + 13)
+#define GPIO_PIN_PD14  (GPIO_PIOD_BASE + 14)
+#define GPIO_PIN_PD15  (GPIO_PIOD_BASE + 15)
+#define GPIO_PIN_PD16  (GPIO_PIOD_BASE + 16)
+#define GPIO_PIN_PD17  (GPIO_PIOD_BASE + 17)
+
+#define GPIO_PIOE_BASE (GPIO_PIOD_BASE + 32)
+#define GPIO_PIN_PE0   (GPIO_PIOE_BASE +  0)
+#define GPIO_PIN_PE1   (GPIO_PIOE_BASE +  1)
+#define GPIO_PIN_PE2   (GPIO_PIOE_BASE +  2)
+#define GPIO_PIN_PE3   (GPIO_PIOE_BASE +  3)
+#define GPIO_PIN_PE4   (GPIO_PIOE_BASE +  4)
+#define GPIO_PIN_PE5   (GPIO_PIOE_BASE +  5)
+#define GPIO_PIN_PE6   (GPIO_PIOE_BASE +  6)
+#define GPIO_PIN_PE7   (GPIO_PIOE_BASE +  7)
+#define GPIO_PIN_PE8   (GPIO_PIOE_BASE +  8)
+#define GPIO_PIN_PE9   (GPIO_PIOE_BASE +  9)
+#define GPIO_PIN_PE10  (GPIO_PIOE_BASE + 10)
+#define GPIO_PIN_PE11  (GPIO_PIOE_BASE + 11)
+#define GPIO_PIN_PE12  (GPIO_PIOE_BASE + 12)
+#define GPIO_PIN_PE13  (GPIO_PIOE_BASE + 13)
+#define GPIO_PIN_PE14  (GPIO_PIOE_BASE + 14)
+#define GPIO_PIN_PE15  (GPIO_PIOE_BASE + 15)
+#define GPIO_PIN_PE16  (GPIO_PIOE_BASE + 16)
+#define GPIO_PIN_PE17  (GPIO_PIOE_BASE + 17)
+#define GPIO_PIN_PE18  (GPIO_PIOE_BASE + 18)
+#define GPIO_PIN_PE19  (GPIO_PIOE_BASE + 19)
+#define GPIO_PIN_PE20  (GPIO_PIOE_BASE + 20)
+#define GPIO_PIN_PE21  (GPIO_PIOE_BASE + 21)
+#define GPIO_PIN_PE22  (GPIO_PIOE_BASE + 22)
+#define GPIO_PIN_PE23  (GPIO_PIOE_BASE + 23)
+#define GPIO_PIN_PE24  (GPIO_PIOE_BASE + 24)
+#define GPIO_PIN_PE25  (GPIO_PIOE_BASE + 25)
+#define GPIO_PIN_PE26  (GPIO_PIOE_BASE + 26)
+
+static inline void *gpio_pin_to_addr(unsigned int pin)
+{
+       switch (pin >> 5) {
+       case 0:
+               return (void *)PIOA_BASE;
+       case 1:
+               return (void *)PIOB_BASE;
+       case 2:
+               return (void *)PIOC_BASE;
+       case 3:
+               return (void *)PIOD_BASE;
+       case 4:
+               return (void *)PIOE_BASE;
+       default:
+               return NULL;
+       }
+}
+
+void gpio_select_periph_A(unsigned int pin, int use_pullup);
+void gpio_select_periph_B(unsigned int pin, int use_pullup);
+
+void gpio_enable_ebi(void);
+void gpio_enable_usart0(void);
+void gpio_enable_usart1(void);
+void gpio_enable_usart2(void);
+void gpio_enable_usart3(void);
+void gpio_enable_macb0(void);
+void gpio_enable_macb1(void);
+void gpio_enable_mmci(void);
+
+#endif /* __ASM_AVR32_ARCH_GPIO_H__ */
index e6df4b7fe33a33bcb83787d64fb2235a7ededf30..b0e787a92f9888f4ec50610ae9ad567dedb0cad1 100644 (file)
         | HMATRIX2_BF(name,value))
 
 /* Register access macros */
-#define hmatrix2_readl(port,reg)                               \
-       readl((port)->regs + HMATRIX2_##reg)
-#define hmatrix2_writel(port,reg,value)                                \
-       writel((value), (port)->regs + HMATRIX2_##reg)
+#define hmatrix2_readl(reg)                                    \
+       readl((void *)HMATRIX_BASE + HMATRIX2_##reg)
+#define hmatrix2_writel(reg,value)                             \
+       writel((value), (void *)HMATRIX_BASE + HMATRIX2_##reg)
 
 #endif /* __ASM_AVR32_HMATRIX2_H__ */
index 8ffe851c89e7181a7b42bbe917f8f5a6c89a7aff..5513e88e7b030001ca7eea9fddab14cda779c8bf 100644 (file)
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
  */
-#ifndef __ASM_AVR32_PART_MEMORY_MAP_H__
-#define __ASM_AVR32_PART_MEMORY_MAP_H__
+#ifndef __AT32AP7000_MEMORY_MAP_H__
+#define __AT32AP7000_MEMORY_MAP_H__
 
-#define AUDIOC_BASE                             0xFFF02800
-#define DAC_BASE                                0xFFF02000
-#define DMAC_BASE                               0xFF200000
-#define ECC_BASE                                0xFFF03C00
-#define HISI_BASE                               0xFFF02C00
-#define HMATRIX_BASE                            0xFFF00800
-#define HSDRAMC_BASE                            0xFFF03800
-#define HSMC_BASE                               0xFFF03400
-#define LCDC_BASE                               0xFF000000
-#define MACB0_BASE                              0xFFF01800
-#define MACB1_BASE                              0xFFF01C00
-#define MMCI_BASE                               0xFFF02400
-#define PIOA_BASE                               0xFFE02800
-#define PIOB_BASE                               0xFFE02C00
-#define PIOC_BASE                               0xFFE03000
-#define PIOD_BASE                               0xFFE03400
-#define PIOE_BASE                               0xFFE03800
-#define PSIF_BASE                               0xFFE03C00
-#define PWM_BASE                                0xFFF01400
-#define SM_BASE                                 0xFFF00000
-#define INTC_BASE                              0XFFF00400
-#define SPI0_BASE                               0xFFE00000
-#define SPI1_BASE                               0xFFE00400
-#define SSC0_BASE                               0xFFE01C00
-#define SSC1_BASE                               0xFFE02000
-#define SSC2_BASE                               0xFFE02400
-#define TIMER0_BASE                             0xFFF00C00
-#define TIMER1_BASE                             0xFFF01000
-#define TWI_BASE                                0xFFE00800
-#define USART0_BASE                             0xFFE00C00
-#define USART1_BASE                             0xFFE01000
-#define USART2_BASE                             0xFFE01400
-#define USART3_BASE                             0xFFE01800
-#define USB_FIFO                                0xFF300000
-#define USB_BASE                                0xFFF03000
+/* Devices on the High Speed Bus (HSB) */
+#define LCDC_BASE                              0xFF000000
+#define DMAC_BASE                              0xFF200000
+#define USB_FIFO                               0xFF300000
 
-#endif /* __ASM_AVR32_PART_MEMORY_MAP_H__ */
+/* Devices on Peripheral Bus A (PBA) */
+#define SPI0_BASE                              0xFFE00000
+#define SPI1_BASE                              0xFFE00400
+#define TWI_BASE                               0xFFE00800
+#define USART0_BASE                            0xFFE00C00
+#define USART1_BASE                            0xFFE01000
+#define USART2_BASE                            0xFFE01400
+#define USART3_BASE                            0xFFE01800
+#define SSC0_BASE                              0xFFE01C00
+#define SSC1_BASE                              0xFFE02000
+#define SSC2_BASE                              0xFFE02400
+#define PIOA_BASE                              0xFFE02800
+#define PIOB_BASE                              0xFFE02C00
+#define PIOC_BASE                              0xFFE03000
+#define PIOD_BASE                              0xFFE03400
+#define PIOE_BASE                              0xFFE03800
+#define PSIF_BASE                              0xFFE03C00
+
+/* Devices on Peripheral Bus B (PBB) */
+#define SM_BASE                                        0xFFF00000
+#define INTC_BASE                              0xFFF00400
+#define HMATRIX_BASE                           0xFFF00800
+#define TIMER0_BASE                            0xFFF00C00
+#define TIMER1_BASE                            0xFFF01000
+#define PWM_BASE                               0xFFF01400
+#define MACB0_BASE                             0xFFF01800
+#define MACB1_BASE                             0xFFF01C00
+#define DAC_BASE                               0xFFF02000
+#define MMCI_BASE                              0xFFF02400
+#define AUDIOC_BASE                            0xFFF02800
+#define HISI_BASE                              0xFFF02C00
+#define USB_BASE                               0xFFF03000
+#define HSMC_BASE                              0xFFF03400
+#define HSDRAMC_BASE                           0xFFF03800
+#define ECC_BASE                               0xFFF03C00
+
+#endif /* __AT32AP7000_MEMORY_MAP_H__ */
diff --git a/include/asm-avr32/arch-at32ap7000/mmc.h b/include/asm-avr32/arch-at32ap7000/mmc.h
new file mode 100644 (file)
index 0000000..fcfbbb3
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2004-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
+ */
+#ifndef __ASM_AVR32_MMC_H
+#define __ASM_AVR32_MMC_H
+
+struct mmc_cid {
+       unsigned long psn;
+       unsigned short oid;
+       unsigned char mid;
+       unsigned char prv;
+       unsigned char mdt;
+       char pnm[7];
+};
+
+struct mmc_csd
+{
+       u8      csd_structure:2,
+               spec_vers:4,
+               rsvd1:2;
+       u8      taac;
+       u8      nsac;
+       u8      tran_speed;
+       u16     ccc:12,
+               read_bl_len:4;
+       u64     read_bl_partial:1,
+               write_blk_misalign:1,
+               read_blk_misalign:1,
+               dsr_imp:1,
+               rsvd2:2,
+               c_size:12,
+               vdd_r_curr_min:3,
+               vdd_r_curr_max:3,
+               vdd_w_curr_min:3,
+               vdd_w_curr_max:3,
+               c_size_mult:3,
+               sector_size:5,
+               erase_grp_size:5,
+               wp_grp_size:5,
+               wp_grp_enable:1,
+               default_ecc:2,
+               r2w_factor:3,
+               write_bl_len:4,
+               write_bl_partial:1,
+               rsvd3:5;
+       u8      file_format_grp:1,
+               copy:1,
+               perm_write_protect:1,
+               tmp_write_protect:1,
+               file_format:2,
+               ecc:2;
+       u8      crc:7;
+       u8      one:1;
+};
+
+/* MMC Command numbers */
+#define MMC_CMD_GO_IDLE_STATE          0
+#define MMC_CMD_SEND_OP_COND           1
+#define MMC_CMD_ALL_SEND_CID           2
+#define MMC_CMD_SET_RELATIVE_ADDR      3
+#define MMC_CMD_SD_SEND_RELATIVE_ADDR  3
+#define MMC_CMD_SET_DSR                        4
+#define MMC_CMD_SELECT_CARD            7
+#define MMC_CMD_SEND_CSD               9
+#define MMC_CMD_SEND_CID               10
+#define MMC_CMD_SEND_STATUS            13
+#define MMC_CMD_SET_BLOCKLEN           16
+#define MMC_CMD_READ_SINGLE_BLOCK      17
+#define MMC_CMD_READ_MULTIPLE_BLOCK    18
+#define MMC_CMD_WRITE_BLOCK            24
+#define MMC_CMD_APP_CMD                        55
+
+#define MMC_ACMD_SD_SEND_OP_COND       41
+
+#define R1_ILLEGAL_COMMAND             (1 << 22)
+#define R1_APP_CMD                     (1 << 5)
+
+#endif /* __ASM_AVR32_MMC_H */
diff --git a/include/asm-avr32/arch-at32ap7000/platform.h b/include/asm-avr32/arch-at32ap7000/platform.h
deleted file mode 100644 (file)
index 7590501..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * 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
- */
-#ifndef _ASM_AVR32_ARCH_PM_H
-#define _ASM_AVR32_ARCH_PM_H
-
-#include <config.h>
-
-enum clock_domain_id {
-       CLOCK_CPU,
-       CLOCK_HSB,
-       CLOCK_PBA,
-       CLOCK_PBB,
-       NR_CLOCK_DOMAINS,
-};
-
-enum resource_type {
-       RESOURCE_GPIO,
-       RESOURCE_CLOCK,
-};
-
-enum gpio_func {
-       GPIO_FUNC_GPIO,
-       GPIO_FUNC_A,
-       GPIO_FUNC_B,
-};
-
-enum device_id {
-       DEVICE_HEBI,
-       DEVICE_PBA_BRIDGE,
-       DEVICE_PBB_BRIDGE,
-       DEVICE_HRAMC,
-       /* GPIO controllers must be kept together */
-       DEVICE_PIOA,
-       DEVICE_PIOB,
-       DEVICE_PIOC,
-       DEVICE_PIOD,
-       DEVICE_PIOE,
-       DEVICE_SM,
-       DEVICE_INTC,
-       DEVICE_HMATRIX,
-#if defined(CFG_HPDC)
-       DEVICE_HPDC,
-#endif
-#if defined(CFG_MACB0)
-       DEVICE_MACB0,
-#endif
-#if defined(CFG_MACB1)
-       DEVICE_MACB1,
-#endif
-#if defined(CFG_LCDC)
-       DEVICE_LCDC,
-#endif
-#if defined(CFG_USART0)
-       DEVICE_USART0,
-#endif
-#if defined(CFG_USART1)
-       DEVICE_USART1,
-#endif
-#if defined(CFG_USART2)
-       DEVICE_USART2,
-#endif
-#if defined(CFG_USART3)
-       DEVICE_USART3,
-#endif
-#if defined(CFG_MMCI)
-       DEVICE_MMCI,
-#endif
-#if defined(CFG_DMAC)
-       DEVICE_DMAC,
-#endif
-       NR_DEVICES,
-       NO_DEVICE = -1,
-};
-
-struct resource {
-       enum resource_type type;
-       union {
-               struct {
-                       unsigned long base;
-               } iomem;
-               struct {
-                       unsigned char nr_pins;
-                       enum device_id gpio_dev;
-                       enum gpio_func func;
-                       unsigned short start;
-               } gpio;
-               struct {
-                       enum clock_domain_id id;
-                       unsigned char index;
-               } clock;
-       } u;
-};
-
-struct device {
-       void *regs;
-       unsigned int nr_resources;
-       const struct resource *resource;
-};
-
-struct clock_domain {
-       unsigned short reg;
-       enum clock_domain_id id;
-       enum device_id bridge;
-};
-
-extern const struct device chip_device[NR_DEVICES];
-extern const struct clock_domain chip_clock[NR_CLOCK_DOMAINS];
-
-/**
- * Set up PIO, clock management and I/O memory for a device.
- */
-const struct device *get_device(enum device_id devid);
-void put_device(const struct device *dev);
-
-int gpio_set_func(enum device_id gpio_devid, unsigned int start,
-                 unsigned int nr_pins, enum gpio_func func);
-void gpio_free(enum device_id gpio_devid, unsigned int start,
-              unsigned int nr_pins);
-
-void pm_init(void);
-int pm_enable_clock(enum clock_domain_id id, unsigned int index);
-void pm_disable_clock(enum clock_domain_id id, unsigned int index);
-unsigned long pm_get_clock_freq(enum clock_domain_id domain);
-
-void cpu_enable_sdram(void);
-
-#endif /* _ASM_AVR32_ARCH_PM_H */
index 01d836c6395a07d7922eb44a19b1f0e4dbc0428e..681c514ccf45d962abd5e5a10c44a8b282581673 100644 (file)
 typedef        struct  global_data {
        bd_t            *bd;
        unsigned long   flags;
-       const struct device     *console_uart;
-       const struct device     *sm;
        unsigned long   baudrate;
-       unsigned long   sdram_size;
+       unsigned long   stack_end;      /* highest stack address */
        unsigned long   have_console;   /* serial_init() was called */
        unsigned long   reloc_off;      /* Relocation Offset */
        unsigned long   env_addr;       /* Address of env struct */
index 7ba25cde53e2316d14b8f204441edeccce7ae96f..583e5dc1010415a29991df3925b9baaba97b47c0 100644 (file)
@@ -26,8 +26,6 @@
 
 extern int cpu_init(void);
 extern int timer_init(void);
-extern void board_init_memories(void);
-extern void board_init_pio(void);
 extern void board_init_info(void);
 
 #endif /* __ASM_AVR32_INITCALLS_H__ */
index ce58863b10503fb327c6148b1ba1440ed436c579..65749ee458cdd899e57d2310db5a83a549ebcbec 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot bf533_serial.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BF533_SERIAL_H_
index bc09922a5eafc16924262d4f0efbda8d7c58b324..f4440a8d474b1d2c96487f23abd1a71b0e272f1d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - bf533_rtc.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BF533_RTC_H_
diff --git a/include/asm-blackfin/arch-bf533/cplbtab.h b/include/asm-blackfin/arch-bf533/cplbtab.h
deleted file mode 100644 (file)
index 89f0325..0000000
+++ /dev/null
@@ -1,482 +0,0 @@
-/*This file is subject to the terms and conditions of the GNU General Public
- * License.
- *
- * Blackfin BF533/2.6 support : LG Soft India
- * Updated : Ashutosh Singh / Jahid Khan : Rrap Software Pvt Ltd
- * Updated : 1. SDRAM_KERNEL, SDRAM_DKENEL are added as initial cplb's
- *             shouldn't be victimized. cplbmgr.S search logic is corrected
- *             to findout the appropriate victim.
- *          2. SDRAM_IGENERIC in dpdt_table is replaced with SDRAM_DGENERIC
- *          : LG Soft India
- */
-#include <config.h>
-
-#ifndef __ARCH_BFINNOMMU_CPLBTAB_H
-#define __ARCH_BFINNOMMU_CPLBTAB_H
-
-/*************************************************************************
- *                     ICPLB TABLE
- *************************************************************************/
-
-.data
-/* This table is configurable */
-    .align 4;
-
-/* Data Attibutes*/
-
-#define SDRAM_IGENERIC         (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_USER_RD | CPLB_VALID)
-#define SDRAM_IKERNEL          (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_USER_RD | CPLB_VALID | CPLB_LOCK)
-#define L1_IMEMORY             (PAGE_SIZE_1MB | CPLB_L1_CHBL | CPLB_USER_RD | CPLB_VALID | CPLB_LOCK)
-#define SDRAM_INON_CHBL                (PAGE_SIZE_4MB | CPLB_USER_RD | CPLB_VALID)
-
-/*Use the menuconfig cache policy here - CONFIG_BLKFIN_WT/CONFIG_BLKFIN_WB*/
-
-#define ANOMALY_05000158               0x200
-#ifdef CONFIG_BLKFIN_WB                /*Write Back Policy */
-#define SDRAM_DGENERIC         (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_DIRTY | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158)
-#define SDRAM_DNON_CHBL         (PAGE_SIZE_4MB | CPLB_DIRTY | CPLB_SUPV_WR | CPLB_USER_RD | CPLB_USER_WR | CPLB_VALID | ANOMALY_05000158)
-#define SDRAM_DKERNEL          (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_USER_RD | CPLB_USER_WR | CPLB_DIRTY | CPLB_SUPV_WR | CPLB_VALID | CPLB_LOCK | ANOMALY_05000158)
-#define L1_DMEMORY             (PAGE_SIZE_4KB | CPLB_L1_CHBL | CPLB_DIRTY | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158)
-#define SDRAM_EBIU             (PAGE_SIZE_4MB | CPLB_DIRTY | CPLB_USER_RD | CPLB_USER_WR | CPLB_SUPV_WR | CPLB_VALID | ANOMALY_05000158)
-
-#else                          /*Write Through */
-#define SDRAM_DGENERIC                 (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_WT | CPLB_L1_AOW | CPLB_SUPV_WR | CPLB_USER_RD | CPLB_USER_WR | CPLB_VALID | ANOMALY_05000158)
-#define SDRAM_DNON_CHBL         (PAGE_SIZE_4MB | CPLB_WT | CPLB_L1_AOW | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158)
-#define SDRAM_DKERNEL          (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_WT | CPLB_L1_AOW | CPLB_USER_RD | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_VALID | CPLB_LOCK | ANOMALY_05000158)
-#define L1_DMEMORY             (PAGE_SIZE_4KB | CPLB_L1_CHBL | CPLB_L1_AOW | CPLB_WT | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_VALID | ANOMALY_05000158)
-#define SDRAM_EBIU             (PAGE_SIZE_4MB | CPLB_WT | CPLB_L1_AOW | CPLB_USER_RD | CPLB_USER_WR | CPLB_SUPV_WR | CPLB_VALID | ANOMALY_05000158)
-#endif
-
-.align 4;
-.global _ipdt_table _ipdt_table:.byte4 0x00000000;
-.byte4(SDRAM_IKERNEL);         /*SDRAM_Page0 */
-.byte4 0x00400000;
-.byte4(SDRAM_IKERNEL);         /*SDRAM_Page1 */
-.byte4 0x00800000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page2 */
-.byte4 0x00C00000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page3 */
-.byte4 0x01000000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page4 */
-.byte4 0x01400000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page5 */
-.byte4 0x01800000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page6 */
-.byte4 0x01C00000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page7 */
-#ifndef CONFIG_EZKIT           /*STAMP Memory regions */
-.byte4 0x02000000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page8 */
-.byte4 0x02400000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page9 */
-.byte4 0x02800000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page10 */
-.byte4 0x02C00000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page11 */
-.byte4 0x03000000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page12 */
-.byte4 0x03400000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page13 */
-.byte4 0x03800000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page14 */
-.byte4 0x03C00000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page15 */
-#endif
-.byte4 0x20000000;
-.byte4(SDRAM_EBIU);            /* Async Memory Bank 2 (Secnd) */
-
-#ifdef CONFIG_STAMP
-.byte4 0x04000000;
-.byte4(SDRAM_IGENERIC);
-.byte4 0x04400000;
-.byte4(SDRAM_IGENERIC);
-.byte4 0x04800000;
-.byte4(SDRAM_IGENERIC);
-.byte4 0x04C00000;
-.byte4(SDRAM_IGENERIC);
-.byte4 0x05000000;
-.byte4(SDRAM_IGENERIC);
-.byte4 0x05400000;
-.byte4(SDRAM_IGENERIC);
-.byte4 0x05800000;
-.byte4(SDRAM_IGENERIC);
-.byte4 0x05C00000;
-.byte4(SDRAM_IGENERIC);
-.byte4 0x06000000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page25 */
-.byte4 0x06400000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page26 */
-.byte4 0x06800000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page27 */
-.byte4 0x06C00000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page28 */
-.byte4 0x07000000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page29 */
-.byte4 0x07400000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page30 */
-.byte4 0x07800000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page31 */
-.byte4 0x07C00000;
-.byte4(SDRAM_IKERNEL);         /*SDRAM_Page32 */
-#endif
-.byte4 0xffffffff;             /* end of section - termination */
-
-/**********************************************************************
- *             PAGE DESCRIPTOR TABLE
- *
- **********************************************************************/
-
-/* Till here we are discussing about the static memory management model.
- * However, the operating envoronments commonly define more CPLB
- * descriptors to cover the entire addressable memory than will fit into
- * the available on-chip 16 CPLB MMRs. When this happens, the below table
- * will be used which will hold all the potentially required CPLB descriptors
- *
- * This is how Page descriptor Table is implemented in uClinux/Blackfin.
- */
-.global _dpdt_table _dpdt_table:.byte4 0x00000000;
-.byte4(SDRAM_DKERNEL);         /*SDRAM_Page0 */
-.byte4 0x00400000;
-.byte4(SDRAM_DKERNEL);         /*SDRAM_Page1 */
-.byte4 0x00800000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page2 */
-.byte4 0x00C00000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page3 */
-.byte4 0x01000000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page4 */
-.byte4 0x01400000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page5 */
-.byte4 0x01800000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page6 */
-.byte4 0x01C00000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page7 */
-
-#ifndef CONFIG_EZKIT
-.byte4 0x02000000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page8 */
-.byte4 0x02400000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page9 */
-.byte4 0x02800000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page10 */
-.byte4 0x02C00000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page11 */
-.byte4 0x03000000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page12 */
-.byte4 0x03400000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page13 */
-.byte4 0x03800000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page14 */
-.byte4 0x03C00000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page15 */
-#endif
-
-#ifdef CONFIG_STAMP
-.byte4 0x04000000;
-.byte4(SDRAM_DGENERIC);
-.byte4 0x04400000;
-.byte4(SDRAM_DGENERIC);
-.byte4 0x04800000;
-.byte4(SDRAM_DGENERIC);
-.byte4 0x04C00000;
-.byte4(SDRAM_DGENERIC);
-.byte4 0x05000000;
-.byte4(SDRAM_DGENERIC);
-.byte4 0x05400000;
-.byte4(SDRAM_DGENERIC);
-.byte4 0x05800000;
-.byte4(SDRAM_DGENERIC);
-.byte4 0x05C00000;
-.byte4(SDRAM_DGENERIC);
-.byte4 0x06000000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page25 */
-.byte4 0x06400000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page26 */
-.byte4 0x06800000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page27 */
-.byte4 0x06C00000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page28 */
-.byte4 0x07000000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page29 */
-.byte4 0x07400000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page30 */
-.byte4 0x07800000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page31 */
-.byte4 0x07C00000;
-.byte4(SDRAM_DKERNEL);         /*SDRAM_Page32 */
-#endif
-
-.byte4 0x20000000;
-.byte4(SDRAM_EBIU);            /* Async Memory Bank 0 (Prim A) */
-
-#if (BFIN_CPU == ADSP_BF533)
-.byte4 0xFF800000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF801000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF802000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF803000;
-.byte4(L1_DMEMORY);
-#endif
-.byte4 0xFF804000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF805000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF806000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF807000;
-.byte4(L1_DMEMORY);
-#if (BFIN_CPU == ADSP_BF533)
-.byte4 0xFF900000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF901000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF902000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF903000;
-.byte4(L1_DMEMORY);
-#endif
-#if ((BFIN_CPU == ADSP_BF532) || (BFIN_CPU == ADSP_BF533))
-.byte4 0xFF904000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF905000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF906000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF907000;
-.byte4(L1_DMEMORY);
-#endif
-.byte4 0xFFB00000;
-.byte4(L1_DMEMORY);
-
-.byte4 0xffffffff;             /*end of section - termination */
-
-#ifdef CONFIG_CPLB_INFO
-.global _ipdt_swapcount_table; /* swapin count first, then swapout count */
-_ipdt_swapcount_table:
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 10 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 20 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 30 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 40 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 50 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 60 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 70 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 80 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 90 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 100 */
-
-.global _dpdt_swapcount_table; /* swapin count first, then swapout count */
-_dpdt_swapcount_table:
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 10 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 20 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 30 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 40 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 50 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 60 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 70 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 80 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 80 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 100 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 110 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 120 */
-#endif
-
-#endif /*__ARCH_BFINNOMMU_CPLBTAB_H*/
index 9c5230db414cce6867d419cc4cdb9a4bc6a0804e..323574590bfbd6afb00d0778968d494ec5b0dab6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot bf533_irq.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * linux/arch/$(ARCH)/platform/$(PLATFORM)/irq.c
@@ -33,8 +33,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BF533_IRQ_H_
index 1610411ee967427a5ec867774419d975a1c9335d..64088f243c4561990558e7deafb4bd39f164df6b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot bf537_serial.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BF537_SERIAL_H_
index 0043e42bf2f8ca443626c7846970878b6e026ffe..db5cc6f226c8b8c4960decda0b8e2699b44237c2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - bf537_rtc.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BF537_RTC_H_
diff --git a/include/asm-blackfin/arch-bf537/cplbtab.h b/include/asm-blackfin/arch-bf537/cplbtab.h
deleted file mode 100644 (file)
index c5151bb..0000000
+++ /dev/null
@@ -1,408 +0,0 @@
-/*This file is subject to the terms and conditions of the GNU General Public
- * License.
- *
- * Blackfin BF533/2.6 support : LG Soft India
- * Updated : Ashutosh Singh / Jahid Khan : Rrap Software Pvt Ltd
- * Updated : 1. SDRAM_KERNEL, SDRAM_DKENEL are added as initial cplb's
- *             shouldn't be victimized. cplbmgr.S search logic is corrected
- *             to findout the appropriate victim.
- *          2. SDRAM_IGENERIC in dpdt_table is replaced with SDRAM_DGENERIC
- *          : LG Soft India
- */
-#include <config.h>
-
-#ifndef __ARCH_BFINNOMMU_CPLBTAB_H
-#define __ARCH_BFINNOMMU_CPLBTAB_H
-
-/*
- * ICPLB TABLE
- */
-
-.data
-/* This table is configurable */
-    .align 4;
-
-/* Data Attibutes*/
-
-#define SDRAM_IGENERIC         (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_USER_RD | CPLB_VALID)
-#define SDRAM_IKERNEL          (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_USER_RD | CPLB_VALID | CPLB_LOCK)
-#define L1_IMEMORY             (PAGE_SIZE_1MB | CPLB_L1_CHBL | CPLB_USER_RD | CPLB_VALID | CPLB_LOCK)
-#define SDRAM_INON_CHBL                (PAGE_SIZE_4MB | CPLB_USER_RD | CPLB_VALID)
-
-/*Use the menuconfig cache policy here - CONFIG_BLKFIN_WT/CONFIG_BLKFIN_WB*/
-
-#define ANOMALY_05000158       0x200
-#ifdef CONFIG_BLKFIN_WB                /*Write Back Policy */
-#define SDRAM_DGENERIC         (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_DIRTY | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158)
-#define SDRAM_DNON_CHBL                (PAGE_SIZE_4MB | CPLB_DIRTY | CPLB_SUPV_WR | CPLB_USER_RD | CPLB_USER_WR | CPLB_VALID | ANOMALY_05000158)
-#define SDRAM_DKERNEL          (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_USER_RD | CPLB_USER_WR | CPLB_DIRTY | CPLB_SUPV_WR | CPLB_VALID | CPLB_LOCK | ANOMALY_05000158)
-#define L1_DMEMORY             (PAGE_SIZE_4KB | CPLB_L1_CHBL | CPLB_DIRTY | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158)
-#define SDRAM_EBIU             (PAGE_SIZE_4MB | CPLB_DIRTY | CPLB_USER_RD | CPLB_USER_WR | CPLB_SUPV_WR | CPLB_VALID | ANOMALY_05000158)
-
-#else                          /*Write Through */
-#define SDRAM_DGENERIC         (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_WT | CPLB_L1_AOW | CPLB_SUPV_WR | CPLB_USER_RD | CPLB_USER_WR | CPLB_VALID | ANOMALY_05000158)
-#define SDRAM_DNON_CHBL                (PAGE_SIZE_4MB | CPLB_WT | CPLB_L1_AOW | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158)
-#define SDRAM_DKERNEL          (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_WT | CPLB_L1_AOW | CPLB_USER_RD | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_VALID | CPLB_LOCK | ANOMALY_05000158)
-#define L1_DMEMORY             (PAGE_SIZE_4KB | CPLB_L1_CHBL | CPLB_L1_AOW | CPLB_WT | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_VALID | ANOMALY_05000158)
-#define SDRAM_EBIU             (PAGE_SIZE_4MB | CPLB_WT | CPLB_L1_AOW | CPLB_USER_RD | CPLB_USER_WR | CPLB_SUPV_WR | CPLB_VALID | ANOMALY_05000158)
-#endif
-
-.align 4;
-.global _ipdt_table _ipdt_table:.byte4 0x00000000;
-.byte4(SDRAM_IKERNEL);         /*SDRAM_Page0 */
-.byte4 0x00400000;
-.byte4(SDRAM_IKERNEL);         /*SDRAM_Page1 */
-.byte4 0x00800000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page2 */
-.byte4 0x00C00000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page3 */
-.byte4 0x01000000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page4 */
-.byte4 0x01400000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page5 */
-.byte4 0x01800000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page6 */
-.byte4 0x01C00000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page7 */
-.byte4 0x02000000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page8 */
-.byte4 0x02400000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page9 */
-.byte4 0x02800000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page10 */
-.byte4 0x02C00000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page11 */
-.byte4 0x03000000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page12 */
-.byte4 0x03400000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page13 */
-.byte4 0x03800000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page14 */
-.byte4 0x03C00000;
-.byte4(SDRAM_IGENERIC);                /*SDRAM_Page15 */
-.byte4 0x20000000;
-.byte4(SDRAM_EBIU);            /* Async Memory Bank 2 (Secnd) */
-
-.byte4 0xffffffff;             /* end of section - termination */
-
-/*
- * PAGE DESCRIPTOR TABLE
- *
- */
-
-/*
- * Till here we are discussing about the static memory management model.
- * However, the operating envoronments commonly define more CPLB
- * descriptors to cover the entire addressable memory than will fit into
- * the available on-chip 16 CPLB MMRs. When this happens, the below table
- * will be used which will hold all the potentially required CPLB descriptors
- *
- * This is how Page descriptor Table is implemented in uClinux/Blackfin.
- */
-.global _dpdt_table _dpdt_table:.byte4 0x00000000;
-.byte4(SDRAM_DKERNEL);         /*SDRAM_Page0 */
-.byte4 0x00400000;
-.byte4(SDRAM_DKERNEL);         /*SDRAM_Page1 */
-.byte4 0x00800000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page2 */
-.byte4 0x00C00000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page3 */
-.byte4 0x01000000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page4 */
-.byte4 0x01400000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page5 */
-.byte4 0x01800000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page6 */
-.byte4 0x01C00000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page7 */
-.byte4 0x02000000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page8 */
-.byte4 0x02400000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page9 */
-.byte4 0x02800000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page10 */
-.byte4 0x02C00000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page11 */
-.byte4 0x03000000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page12 */
-.byte4 0x03400000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page13 */
-.byte4 0x03800000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page14 */
-.byte4 0x03C00000;
-.byte4(SDRAM_DGENERIC);                /*SDRAM_Page15 */
-.byte4 0x20000000;
-.byte4(SDRAM_EBIU);            /* Async Memory Bank 0 (Prim A) */
-
-#if ((BFIN_CPU == ADSP_BF534) || (BFIN_CPU == ADSP_BF537))
-.byte4 0xFF800000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF801000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF802000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF803000;
-.byte4(L1_DMEMORY);
-#endif
-.byte4 0xFF804000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF805000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF806000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF807000;
-.byte4(L1_DMEMORY);
-#if ((BFIN_CPU == ADSP_BF534) || (BFIN_CPU == ADSP_BF537))
-.byte4 0xFF900000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF901000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF902000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF903000;
-.byte4(L1_DMEMORY);
-#endif
-.byte4 0xFF904000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF905000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF906000;
-.byte4(L1_DMEMORY);
-.byte4 0xFF907000;
-.byte4(L1_DMEMORY);
-
-.byte4 0xFFB00000;
-.byte4(L1_DMEMORY);
-
-.byte4 0xffffffff;             /*end of section - termination */
-
-#ifdef CONFIG_CPLB_INFO
-.global _ipdt_swapcount_table; /* swapin count first, then swapout count */
-_ipdt_swapcount_table:
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 10 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 20 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 30 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 40 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 50 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 60 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 70 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 80 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 90 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 100 */
-
-.global _dpdt_swapcount_table; /* swapin count first, then swapout count */
-_dpdt_swapcount_table:
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 10 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 20 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 30 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 40 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 50 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 60 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 70 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 80 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 80 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 100 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 110 */
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;
-.byte4 0x00000000;             /* 120 */
-
-#endif
-
-#endif /*__ARCH_BFINNOMMU_CPLBTAB_H*/
index 4cb4c1502f90a9f11da37e5520eead4bca70ba50..527d8a21f27661e951c758f83f9755b365c17691 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot bf537_irq.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * linux/arch/$(ARCH)/platform/$(PLATFORM)/irq.c
@@ -33,8 +33,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BF537_IRQ_H_
index 08102283977a670d4c103496150f0250a95b4b06..eb01ca25ba4d175ade4d872623f4ac8d77e6b5f7 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot bf561_serial.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BF561_SERIAL_H_
index bc09922a5eafc16924262d4f0efbda8d7c58b324..f4440a8d474b1d2c96487f23abd1a71b0e272f1d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - bf533_rtc.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BF533_RTC_H_
index 7766c4ab0647a7992479c67b7da11b78d2cba31c..438e50b8e83ad8e65c20612df584449af85cd69b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - bitops.h Routines for bit operations
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_BITOPS_H
index 0ec92071b59d7475da67ce5e0a1d8c66c448d460..bf502a4e621b6d88fd798c8efae83734bf666cee 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - blackfin.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_H_
index 21902159716bf486a8a0626e54f418557063366a..451d29c3cfeaaa6133217a1775439cf969223f25 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - blackfin_defs.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef __BLACKFIN_DEFS_H__
index 3b4df4e134477b2a3b9d72500f5dce6d8ae315a5..a1a52a5c1aa3aabc13734c67a3ee98a47cb15d5c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot -  byteorder.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_BYTEORDER_H
index dd695e10ade98625289b3cb23f1a5ccc352cbcac..9d8d9ecc87bac687c28956cb3d653c383268cb73 100644 (file)
@@ -50,7 +50,7 @@
 
 #define SDRAM_IGENERIC          (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_USER_RD | CPLB_VALID)
 #define SDRAM_IKERNEL           (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_USER_RD | CPLB_VALID | CPLB_LOCK)
-#define L1_IMEMORY              (PAGE_SIZE_1MB | CPLB_L1_CHBL | CPLB_USER_RD | CPLB_VALID | CPLB_LOCK)
+#define L1_IMEMORY              (PAGE_SIZE_1MB | CPLB_USER_RD | CPLB_VALID | CPLB_LOCK)
 #define SDRAM_INON_CHBL         (PAGE_SIZE_4MB | CPLB_USER_RD | CPLB_VALID)
 
 /*Use the menuconfig cache policy here - CONFIG_BLKFIN_WT/CONFIG_BLKFIN_WB*/
 #define SDRAM_DGENERIC          (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_DIRTY | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158)
 #define SDRAM_DNON_CHBL         (PAGE_SIZE_4MB | CPLB_DIRTY | CPLB_SUPV_WR | CPLB_USER_RD | CPLB_USER_WR | CPLB_VALID | ANOMALY_05000158)
 #define SDRAM_DKERNEL           (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_USER_RD | CPLB_USER_WR | CPLB_DIRTY | CPLB_SUPV_WR | CPLB_VALID | CPLB_LOCK | ANOMALY_05000158)
-#define L1_DMEMORY              (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_DIRTY | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158)
+#define L1_DMEMORY              (PAGE_SIZE_4MB | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158)
 #define SDRAM_EBIU              (PAGE_SIZE_4MB | CPLB_DIRTY | CPLB_USER_RD | CPLB_USER_WR | CPLB_SUPV_WR | CPLB_VALID | ANOMALY_05000158)
 
 #else                          /*Write Through */
 #define SDRAM_DGENERIC          (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_WT | CPLB_L1_AOW | CPLB_SUPV_WR | CPLB_USER_RD | CPLB_USER_WR | CPLB_VALID | ANOMALY_05000158)
 #define SDRAM_DNON_CHBL         (PAGE_SIZE_4MB | CPLB_WT | CPLB_L1_AOW | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158)
 #define SDRAM_DKERNEL           (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_WT | CPLB_L1_AOW | CPLB_USER_RD | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_VALID | CPLB_LOCK | ANOMALY_05000158)
-#define L1_DMEMORY              (PAGE_SIZE_4MB | CPLB_L1_CHBL | CPLB_L1_AOW | CPLB_WT | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_VALID | ANOMALY_05000158)
+#define L1_DMEMORY              (PAGE_SIZE_4MB | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_VALID | ANOMALY_05000158)
 #define SDRAM_EBIU              (PAGE_SIZE_4MB | CPLB_WT | CPLB_L1_AOW | CPLB_USER_RD | CPLB_USER_WR | CPLB_SUPV_WR | CPLB_VALID | ANOMALY_05000158)
 #endif
 
 #if defined(CONFIG_BF561)
-#define page_descriptor_table_size (CONFIG_MEM_SIZE/4 + 2)     /* SDRAM +L1 + ASYNC_Memory */
+#define page_descriptor_table_size (CONFIG_MEM_SIZE/4 + 1 + 4) /* SDRAM +L1 + ASYNC_Memory */
 #else
-#define page_descriptor_table_size (CONFIG_MEM_SIZE/4 + 1 + 3) /* SDRAM + L1 + ASYNC_Memory */
+#define page_descriptor_table_size (CONFIG_MEM_SIZE/4 + 2)     /* SDRAM + L1 + ASYNC_Memory */
 #endif
 #endif                         /* _CPLB_H */
index 108c2792a09000a8006caaf7dd9223e7c6f467e1..ed2b851e9559643aee67ce4b0b91491fa8037a37 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - current.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_CURRENT_H
index 0c01e9fb7d076b48432b950b541b9131e93ef2cd..ea0b3664e01bf690254cdeff9540d3f0f49e2059 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - delay.h Routines for introducing delays
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_DELAY_H
index b64d406992864d04ab38d01c07727a4379149acf..eb84f11bdb30d6733c83520ac20d27870cd4a400 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - entry.h Routines for context saving and restoring
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef __BLACKFIN_ENTRY_H
@@ -27,7 +27,6 @@
 
 #include <linux/config.h>
 #include <asm/setup.h>
-#include <asm/page.h>
 
 /*
  * Stack layout in 'ret_from_exception':
index 713bba0b221c96882bec38a01536945089486009..0d2c618030f18d0be0453945ca53fc14791cf733 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - errno.h Error number defines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_ERRNO_H
index 1c738533c8401a4a8bf0abfdcf3bbd910f33bf05..9024d0a06e3cc6a398c43b967abc8a481da9aa51 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - global_data.h Declarations for global data of u-boot
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef        __ASM_GBL_DATA_H
index baa3e0c5c38f8413393f46ea34b52cf86095e7a9..9b360553cb549b0fa4d7ec63f2add7255d66425e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - hw_irq.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * linux/arch/$(ARCH)/platform/$(PLATFORM)/hw_irq.h
@@ -24,8 +24,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <linux/config.h>
index 3c087c33ee93019127a2f9c36de0260eaca9c5a7..5d0ad0618438cc3e04b69eea7b445dad60ccd23e 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - io-kernel.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_IO_H
index 6bab6e766a8032af7e5f81d053b1eca032c22297..332d2c643745f6aa12b4a865c9710b5e2a55fa8f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - io.h IO routines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_IO_H
@@ -37,6 +37,7 @@ extern void cf_outb(unsigned char val, volatile unsigned char *addr);
 
 static inline void sync(void)
 {
+       __builtin_bfin_ssync();
 }
 
 /*
index aede742120754b12e08a258864e076e9dae089e3..1fff316881505d701827cecc0a1f7c323cba333c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - irq.h Interrupt related header file
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file was based on
  * linux/arch/$(ARCH)/platform/$(PLATFORM)/irq.c
@@ -31,8 +31,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_IRQ_H_
index 18f0c36d24a0edaecc04c0de4e983129050d240f..4fc1acf0ba3c868c4467fb21cb2afae37b5b6101 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - linkage.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _LINUX_LINKAGE_H
index 4fea74c6c90adc11f2e184ad08e4181b5659116f..8bf94738ec9d0f6acbf0468a6665e55571d4191c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - machdep.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_MACHDEP_H
index d9d8bf9ba2587740acd7699f05c04a2ce142bb19..cb448ad61ec4d601d146853ed4b6f326fa35c9fa 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - mem_init.h Header file for memory initialization
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #if (CONFIG_MEM_MT48LC16M16A2TG_75 || \
diff --git a/include/asm-blackfin/page.h b/include/asm-blackfin/page.h
deleted file mode 100644 (file)
index d59828c..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * U-boot -  page.h
- *
- * Copyright (c) 2005 blackfin.uclinux.org
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef _BLACKFIN_PAGE_H
-#define _BLACKFIN_PAGE_H
-
-#include <linux/config.h>
-
-/* PAGE_SHIFT determines the page size */
-
-#define PAGE_SHIFT                     (12)
-#define PAGE_SIZE                      (4096)
-#define PAGE_MASK                      (~(PAGE_SIZE-1))
-
-#ifdef __KERNEL__
-
-#include <asm/setup.h>
-
-#if PAGE_SHIFT < 13
-#define                                        KTHREAD_SIZE (8192)
-#else
-#define                                        KTHREAD_SIZE PAGE_SIZE
-#endif
-
-#ifndef __ASSEMBLY__
-
-#define get_user_page(vaddr)           __get_free_page(GFP_KERNEL)
-#define free_user_page(page, addr)     free_page(addr)
-
-#define clear_page(page)               memset((page), 0, PAGE_SIZE)
-#define copy_page(to,from)             memcpy((to), (from), PAGE_SIZE)
-
-#define clear_user_page(page, vaddr)   clear_page(page)
-#define copy_user_page(to, from, vaddr)        copy_page(to, from)
-
-/*
- * These are used to make use of C type-checking..
- */
-typedef struct {
-       unsigned long pte;
-} pte_t;
-typedef struct {
-       unsigned long pmd[16];
-} pmd_t;
-typedef struct {
-       unsigned long pgd;
-} pgd_t;
-typedef struct {
-       unsigned long pgprot;
-} pgprot_t;
-
-#define pte_val(x)                     ((x).pte)
-#define pmd_val(x)                     ((&x)->pmd[0])
-#define pgd_val(x)                     ((x).pgd)
-#define pgprot_val(x)                  ((x).pgprot)
-
-#define __pte(x)                       ((pte_t) { (x) } )
-#define __pmd(x)                       ((pmd_t) { (x) } )
-#define __pgd(x)                       ((pgd_t) { (x) } )
-#define __pgprot(x)                    ((pgprot_t) { (x) } )
-
-/* to align the pointer to the (next) page boundary */
-#define PAGE_ALIGN(addr)               (((addr)+PAGE_SIZE-1)&PAGE_MASK)
-
-/* Pure 2^n version of get_order */
-extern __inline__ int get_order(unsigned long size)
-{
-       int order;
-
-       size = (size - 1) >> (PAGE_SHIFT - 1);
-       order = -1;
-       do {
-               size >>= 1;
-               order++;
-       } while (size);
-       return order;
-}
-
-#endif /* !__ASSEMBLY__ */
-
-#include <asm/page_offset.h>
-
-#define PAGE_OFFSET                    (PAGE_OFFSET_RAW)
-
-#ifndef __ASSEMBLY__
-
-#define __pa(vaddr)                    virt_to_phys((void *)vaddr)
-#define __va(paddr)                    phys_to_virt((unsigned long)paddr)
-
-#define MAP_NR(addr)                   (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT)
-#define virt_to_page(addr)             (mem_map + (((unsigned long)(addr)-PAGE_OFFSET) >> PAGE_SHIFT))
-#define VALID_PAGE(page)               ((page - mem_map) < max_mapnr)
-
-#define PAGE_BUG(page) do      { \
-       BUG(); \
-} while (0)
-
-#endif
-
-#endif
-
-#endif
index 262473fc3d0b27783198d7ddb4d6445212a194c2..cfd8f1fef3fb39b9d3a8c72b67f5f0f63f964019 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - page_offset.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 /*
index f1f2b5ffc20f11b4f3e5f626a72b145b73fdb420..27889e8e8544dff03b291ccbf03e73026fc3abaa 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - posix_types.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef __ARCH_BLACKFIN_POSIX_TYPES_H
index df49bedc0a7f51c10e49fc03f259bbdaa074712e..6cd4f567fcd50b914bedd6594f8ede2dbe775c81 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - processor.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * include/asm-m68k/processor.h
@@ -23,8 +23,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef __ASM_BLACKFIN_PROCESSOR_H
index afd57773ac946b609ef6653fea72d8dbf52c3395..f1b7d0064bc607501066cf6e3717dd86d9b622c9 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - ptrace.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_PTRACE_H
index 9e6d817fc7455039d6aaad29a565ef5e1990071a..f309543742267a55b68b616ca683ba5aa366c07c 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - segment.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_SEGMENT_H
index a3c1715b4ae6a6662086028e796975ce5309afb7..b6b82679ec3ca23fa640752152ad12e6cd7ae97f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - setup.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * asm/setup.h -- Definition of the Linux/Blackfin setup information
@@ -22,8 +22,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_SETUP_H
index fbef18618ceb24ad5c73b03871a472abbf2d828d..d280ffeeaa9a55bfbd9873a6f92db8a9cf724af6 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - setup.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _SHARED_RESOURCES_H_
index aac6bc99f54f180343e604703ac9484deda13ebb..dd50207092916f3798aa5fe67764ac5aa66aab82 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - string.h String functions
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 /* Changed by Lineo Inc. May 2001 */
@@ -30,7 +30,6 @@
 #ifdef __KERNEL__              /* only set these up for kernel code */
 
 #include <asm/setup.h>
-#include <asm/page.h>
 #include <config.h>
 #include <asm/blackfin.h>
 
index 0e53adfe0f197489102ae4471b98c40b72a75567..eda887fb62fb0d70cf37dab55cd2e0811cfd6e67 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - system.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_SYSTEM_H
index 29e6eba6fac434bf40ff5ee1eaf789771e8725ad..b90cedacbceb10d82a65c0d9f4fe6dcd87363540 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - traps.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * linux/include/asm/traps.h
@@ -23,8 +23,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 /*
index 942ed275af7a8c1c3d6d6a726fa3ee7e96e17ccc..665a419f2bcd0d51917894586dc849db37317229 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - types.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _BLACKFIN_TYPES_H
index e1a435a137aea09e1d6d43d320b4460d270bc236..b4928da4f5a2d8d5f9a85fb00813ce3003783993 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - u-boot.h Structure declarations for board specific data
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef _U_BOOT_H_
 #define _U_BOOT_H_     1
 
 typedef struct bd_info {
-       int bi_baudrate;        /* serial console baudrate */
+       int bi_baudrate;                /* serial console baudrate */
        unsigned long bi_ip_addr;       /* IP Address */
        unsigned char bi_enetaddr[6];   /* Ethernet adress */
        unsigned long bi_arch_number;   /* unique id for this board */
index 61e2bfea7cf41b8a3e06a606001fbdcd58eefd3a..6e913bb85b0d9d971eb96a1c2ff934da9b700b90 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - uaccess.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * This file is based on
  * Based on: include/asm-m68knommu/uaccess.h
@@ -22,8 +22,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef __BLACKFIN_UACCESS_H
index 769f5a089c097d579b5221f24f44755b48fb15bb..9eda9f85542d65ca94979b5aec81ea222ce0beaa 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - virtconvert.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef __BLACKFIN_VIRT_CONVERT__
@@ -33,7 +33,6 @@
 
 #include <linux/config.h>
 #include <asm/setup.h>
-#include <asm/page.h>
 
 #define mm_vtop(vaddr)         ((unsigned long) vaddr)
 #define mm_ptov(vaddr)         ((unsigned long) vaddr)
diff --git a/include/asm-microblaze/asm.h b/include/asm-microblaze/asm.h
new file mode 100755 (executable)
index 0000000..f10f89c
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+ * (C) Copyright 2007 Michal Simek
+ *
+ * Michal  SIMEK <monstr@monstr.eu>
+ *
+ * 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
+ */
+
+/* FSL macros */
+#define NGET(val, fslnum) \
+       __asm__ __volatile__ ("nget %0, rfsl" #fslnum :"=r" (val));
+
+#define GET(val, fslnum) \
+       __asm__ __volatile__ ("get %0, rfsl" #fslnum :"=r" (val));
+
+#define NCGET(val, fslnum) \
+       __asm__ __volatile__ ("ncget %0, rfsl" #fslnum :"=r" (val));
+
+#define CGET(val, fslnum) \
+       __asm__ __volatile__ ("cget %0, rfsl" #fslnum :"=r" (val));
+
+#define NPUT(val, fslnum) \
+       __asm__ __volatile__ ("nput %0, rfsl" #fslnum ::"r" (val));
+
+#define PUT(val, fslnum) \
+       __asm__ __volatile__ ("put %0, rfsl" #fslnum ::"r" (val));
+
+#define NCPUT(val, fslnum) \
+       __asm__ __volatile__ ("ncput %0, rfsl" #fslnum ::"r" (val));
+
+#define CPUT(val, fslnum) \
+       __asm__ __volatile__ ("cput %0, rfsl" #fslnum ::"r" (val));
+
+/* CPU dependent */
+/* machine status register */
+#define MFS(val, reg) \
+       __asm__ __volatile__ ("mfs %0," #reg :"=r" (val));
+
+#define MTS(val, reg) \
+       __asm__ __volatile__ ("mts " #reg ", %0"::"r" (val));
+
+/* get return address from interrupt */
+#define R14(val) \
+       __asm__ __volatile__ ("addi %0, r14, 0":"=r" (val));
+
+#define NOP    __asm__ __volatile__ ("nop");
+
+/* use machine status registe USE_MSR_REG */
+#ifdef XILINX_USE_MSR_INSTR
+#define MSRSET(val) \
+       __asm__ __volatile__ ("msrset r0," #val );
+
+#define MSRCLR(val) \
+       __asm__ __volatile__ ("msrclr r0," #val );
+
+#else
+#define MSRSET(val)                                            \
+{                                                              \
+       register unsigned tmp;                                  \
+       __asm__ __volatile__ ("                                 \
+                       mfs     %0, rmsr;                       \
+                       ori     %0, %0, "#val";                 \
+                       mts     rmsr, %0;                       \
+                       nop;"                                   \
+                       : "=r" (tmp)                            \
+                       : "d" (val)                             \
+                       : "memory");                            \
+}
+
+#define MSRCLR(val)                                            \
+{                                                              \
+       register unsigned tmp;                                  \
+       __asm__ __volatile__ ("                                 \
+                       mfs     %0, rmsr;                       \
+                       andi    %0, %0, ~"#val";                \
+                       mts     rmsr, %0;                       \
+                       nop;"                                   \
+                       : "=r" (tmp)                            \
+                       : "d" (val)                             \
+                       : "memory");                            \
+}
+#endif
index 6635aeacba1b4978fcb0f029c880d1e7738b696f..4c385aa24f012218f58e3e59abc3422586305de9 100644 (file)
@@ -38,3 +38,6 @@ struct irq_action {
        void *arg;
        int count; /* number of interrupt */
 };
+
+void install_interrupt_handler (int irq, interrupt_handler_t * hdlr,
+                                      void *arg);
index ff9512f203cd06d41f1ed9a125486471436c3b1b..d1bb159aefa82b90cf019fba87dae5f2bf1349ce 100644 (file)
@@ -6,19 +6,9 @@
 #ifndef        __E300_H__
 #define __E300_H__
 
-/*
- * e300 Processor Version & Revision Numbers
- */
-#define PVR_83xx 0x80830000
-#define PVR_8349_REV10 (PVR_83xx | 0x0010)
-#define PVR_8349_REV11 (PVR_83xx | 0x0011)
-#define PVR_8360_REV10 (PVR_83xx | 0x0020)
-#define PVR_8360_REV11 (PVR_83xx | 0x0020)
-
-#if defined(CONFIG_MPC832X)
-#undef PVR_83xx
-#define PVR_83xx 0x80840000
-#endif
+#define PVR_E300C1     0x80830000
+#define PVR_E300C2     0x80840000
+#define PVR_E300C3     0x80850000
 
 /*
  * Hardware Implementation-Dependent Register 0 (HID0)
index c113b7ee0e4942d34ccb129b77aa6fbb9fa6c579..cd2463643ced57c1097c2d4fdfec681bc43975dc 100644 (file)
@@ -49,14 +49,19 @@ typedef     struct  global_data {
        unsigned long   scc_clk;
        unsigned long   brg_clk;
 #endif
+#if defined(CONFIG_MPC7448HPC2)
+       unsigned long   mem_clk;
+#endif
 #if defined(CONFIG_MPC83XX)
        /* There are other clocks in the MPC83XX */
        u32 csb_clk;
-#if defined (CONFIG_MPC834X)
+#if defined (CONFIG_MPC834X) || defined(CONFIG_MPC831X)
        u32 tsec1_clk;
        u32 tsec2_clk;
-       u32 usbmph_clk;
        u32 usbdr_clk;
+#endif
+#if defined (CONFIG_MPC834X)
+       u32 usbmph_clk;
 #endif /* CONFIG_MPC834X */
        u32 core_clk;
        u32 i2c1_clk;
index 5e088d67d24b395335ed498d9bbd81960efb64c1..0de93385f3f43dc8d7b1552c02422d7b9fe0276b 100644 (file)
@@ -206,7 +206,9 @@ typedef struct pmc83xx {
        u32 pmccr;              /* PMC Configuration Register */
        u32 pmcer;              /* PMC Event Register */
        u32 pmcmr;              /* PMC Mask Register */
-       u8 res0[0xF4];
+       u32 pmccr1;             /* PMC Configuration Register 1 */
+       u32 pmccr2;             /* PMC Configuration Register 2 */
+       u8 res0[0xEC];
 } pmc83xx_t;
 
 /*
@@ -355,7 +357,8 @@ typedef struct lbus83xx {
        u8 res2[0x8];
        u32 mrtpr;              /* Memory Refresh Timer Prescaler Register */
        u32 mdr;                /* UPM Data Register */
-       u8 res3[0x8];
+       u8 res3[0x4];
+       u32 lsor;               /* Special Operation Initiation Register */
        u32 lsdmr;              /* SDRAM Mode Register */
        u8 res4[0x8];
        u32 lurt;               /* UPM Refresh Timer */
@@ -369,8 +372,14 @@ typedef struct lbus83xx {
        u8 res6[0xC];
        u32 lbcr;               /* Configuration Register */
        u32 lcrr;               /* Clock Ratio Register */
-       u8 res7[0x28];
-       u8 res8[0xF00];
+       u8 res7[0x8];
+       u32 fmr;                /* Flash Mode Register */
+       u32 fir;                /* Flash Instruction Register */
+       u32 fcr;                /* Flash Command Register */
+       u32 fbar;               /* Flash Block Addr Register */
+       u32 fpar;               /* Flash Page Addr Register */
+       u32 fbcr;               /* Flash Byte Count Register */
+       u8 res8[0xF08];
 } lbus83xx_t;
 
 /*
@@ -527,7 +536,7 @@ typedef struct pcictrl83xx {
  * USB
  */
 typedef struct usb83xx {
-       u8 fixme[0x2000];
+       u8 fixme[0x1000];
 } usb83xx_t;
 
 /*
@@ -574,7 +583,42 @@ typedef struct immap {
        ios83xx_t               ios;            /* Sequencer */
        pcictrl83xx_t           pci_ctrl[2];    /* PCI Controller Control and Status Registers */
        u8                      res5[0x19900];
-       usb83xx_t               usb;
+       usb83xx_t               usb[2];
+       tsec83xx_t              tsec[2];
+       u8                      res6[0xA000];
+       security83xx_t          security;
+       u8                      res7[0xC0000];
+} immap_t;
+
+#elif defined(CONFIG_MPC831X)
+typedef struct immap {
+       sysconf83xx_t           sysconf;        /* System configuration */
+       wdt83xx_t               wdt;            /* Watch Dog Timer (WDT) Registers */
+       rtclk83xx_t             rtc;            /* Real Time Clock Module Registers */
+       rtclk83xx_t             pit;            /* Periodic Interval Timer */
+       gtm83xx_t               gtm[2];         /* Global Timers Module */
+       ipic83xx_t              ipic;           /* Integrated Programmable Interrupt Controller */
+       arbiter83xx_t           arbiter;        /* System Arbiter Registers */
+       reset83xx_t             reset;          /* Reset Module */
+       clk83xx_t               clk;            /* System Clock Module */
+       pmc83xx_t               pmc;            /* Power Management Control Module */
+       gpio83xx_t              gpio[1];        /* General purpose I/O module */
+       u8                      res0[0x1300];
+       ddr83xx_t               ddr;            /* DDR Memory Controller Memory */
+       fsl_i2c_t               i2c[2];         /* I2C Controllers */
+       u8                      res1[0x1300];
+       duart83xx_t             duart[2];       /* DUART */
+       u8                      res2[0x900];
+       lbus83xx_t              lbus;           /* Local Bus Controller Registers */
+       u8                      res3[0x1000];
+       spi83xx_t               spi;            /* Serial Peripheral Interface */
+       dma83xx_t               dma;            /* DMA */
+       pciconf83xx_t           pci_conf[1];    /* PCI Software Configuration Registers */
+       u8                      res4[0x80];
+       ios83xx_t               ios;            /* Sequencer */
+       pcictrl83xx_t           pci_ctrl[1];    /* PCI Controller Control and Status Registers */
+       u8                      res5[0x1aa00];
+       usb83xx_t               usb[1];
        tsec83xx_t              tsec[2];
        u8                      res6[0xA000];
        security83xx_t          security;
index b226825ee20681a7db246e5082f9a414a1890915..48fd9829506992bcd95da0fe8eaabbdd3d701933 100644 (file)
@@ -396,8 +396,8 @@ extern int write_bat(ppc_bat_t bat, unsigned long upper, unsigned long lower);
 #define BOOKE_PAGESZ_16M        7
 #define BOOKE_PAGESZ_64M        8
 #define BOOKE_PAGESZ_256M       9
-#define BOOKE_PAGESZ_1GB        10
-#define BOOKE_PAGESZ_4GB        11
+#define BOOKE_PAGESZ_1G                10
+#define BOOKE_PAGESZ_4G                11
 
 #if defined(CONFIG_MPC86xx)
 #define LAWBAR_BASE_ADDR       0x00FFFFFF
@@ -413,6 +413,7 @@ extern int write_bat(ppc_bat_t bat, unsigned long upper, unsigned long lower);
 #define LAWAR_TRGT_IF_PCI1     0x00000000
 #define LAWAR_TRGT_IF_PCIX     0x00000000
 #define LAWAR_TRGT_IF_PCI2     0x00100000
+#define LAWAR_TRGT_IF_PEX      0x00200000
 #define LAWAR_TRGT_IF_LBC      0x00400000
 #define LAWAR_TRGT_IF_CCSR     0x00800000
 #define LAWAR_TRGT_IF_DDR_INTERLEAVED 0x00B00000
index 058596275f48d63711a263db92a438247be4ac0c..5efc3ee2ca7d287b6add45f2adbbbe0abba62043 100644 (file)
 #define   HID0_BHTE    (1<<2)          /* Branch History Table Enable */
 #define   HID0_BTCD    (1<<1)          /* Branch target cache disable */
 #define SPRN_HID1      0x3F1   /* Hardware Implementation Register 1 */
+#define          HID1_RFXE     (1<<17)         /* Read Fault Exception Enable */
+#define          HID1_ASTME    (1<<13)         /* Address bus streaming mode */
+#define          HID1_ABE      (1<<12)         /* Address broadcast enable */
 #define SPRN_IABR      0x3F2   /* Instruction Address Breakpoint Register */
 #ifndef CONFIG_BOOKE
 #define SPRN_IAC1      0x3F4   /* Instruction Address Compare 1 */
 #define SPRN_IVOR15    0x19f   /* Interrupt Vector Offset Register 15 */
 
 /* e500 definitions */
-#define SPRN_L1CSR0     0x3f2   /* L1 Cache Control and Status Register 0 */
+#define SPRN_L1CSR0     0x3f2   /* L1 Data Cache Control and Status Register 0 */
+#define   L1CSR0_CPE            0x00010000     /* Data Cache Parity Enable */
 #define   L1CSR0_DCFI           0x00000002      /* Data Cache Flash Invalidate */
 #define   L1CSR0_DCE            0x00000001      /* Data Cache Enable */
-#define SPRN_L1CSR1     0x3f3   /* L1 Cache Control and Status Register 1 */
+#define SPRN_L1CSR1     0x3f3   /* L1 Instruction Cache Control and Status Register 1 */
+#define   L1CSR1_CPE            0x00010000     /* Instruction Cache Parity Enable */
 #define   L1CSR1_ICFI           0x00000002      /* Instruction Cache Flash Invalidate */
 #define   L1CSR1_ICE            0x00000001      /* Instruction Cache Enable */
 
 #define SVR_MJREV(svr) (((svr) >>  4) & 0x0F)   /* Major SOC design revision indicator */
 #define SVR_MNREV(svr) (((svr) >>  0) & 0x0F)   /* Minor SOC design revision indicator */
 
-/* System-On-Chip Version Numbers (version field only) */
-#define SVR_MPC5200    0x8011
 
 /* Processor Version Register */
 
 #define PVR_8260_HIP7R1 0x80822013
 #define PVR_8260_HIP7RA        0x80822014
 
+/*
+ * MPC 52xx
+ */
+#define PVR_5200       0x80822011
+#define PVR_5200B      0x80822014
+
 
 /*
  * System Version Register
 #define SVR_8560       0x8070
 #define SVR_8555       0x8079
 #define SVR_8541       0x807A
+#define SVR_8544       0x8034
+#define SVR_8544_E     0x803C
 #define SVR_8548       0x8031
 #define SVR_8548_E     0x8039
 #define SVR_8641       0x8090
+#define SVR_8568_E     0x807D
 
 
 /* I am just adding a single entry for 8260 boards.  I think we may be
index cf36583108c7bd1513eb1f1863fc1eb4053a66b9..b3ccdcea2b0d3e42157e7bca1d84517c02b4a545 100644 (file)
@@ -94,6 +94,7 @@
 #define CFG_CMD_EXT2   0x1000000000000000ULL   /* EXT2 Support                 */
 #define CFG_CMD_SNTP   0x2000000000000000ULL   /* SNTP support                 */
 #define CFG_CMD_DISPLAY        0x4000000000000000ULL   /* Display support              */
+#define CFG_CMD_MFSL   0x8000000000000000ULL   /* FSL support for Microblaze   */
 
 #define CFG_CMD_ALL    0xFFFFFFFFFFFFFFFFULL   /* ALL commands                 */
 
                        CFG_CMD_IRQ     | \
                        CFG_CMD_JFFS2   | \
                        CFG_CMD_KGDB    | \
+                       CFG_CMD_MFSL    | \
                        CFG_CMD_MII     | \
                        CFG_CMD_MMC     | \
                        CFG_CMD_NAND    | \
index b162dbd7cfc421592dc3cf4afa37f5930113d36d..3c4b37b0dcbb11ab5c1321e05c5d6e6e9bfcb006 100644 (file)
@@ -402,6 +402,10 @@ void               ppcDcbi(unsigned long value);
 void           ppcSync(void);
 void           ppcDcbz(unsigned long value);
 #endif
+#if defined (CONFIG_MICROBLAZE)
+unsigned short in16(unsigned int);
+void           out16(unsigned int, unsigned short value);
+#endif
 
 #if defined (CONFIG_MPC83XX)
 void           ppcDWload(unsigned int *addr, unsigned int *ret);
@@ -440,8 +444,6 @@ int sdram_adjust_866 (void);
 int    adjust_sdram_tbs_8xx (void);
 #if defined(CONFIG_8260)
 int    prt_8260_clks (void);
-#elif defined(CONFIG_MPC83XX)
-int print_clock_conf(void);
 #elif defined(CONFIG_MPC5xxx)
 int    prt_mpc5xxx_clks (void);
 #endif
index 5b54f30e08d6bcd5ee7da1a9f38fd59b3024765b..bc30977fd7ad416bf8443e5b4c06bb72327b55eb 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#define CFG_IPBSPEED_133               /* define for 133MHz speed */
+#define CFG_IPBCLK_EQUALS_XLBCLK               /* define for 133MHz speed */
 
 /*
  * PCI Bus clocking configuration
  *
  * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if
- * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet
- * hasn't been tested with a IPB Bus Clock of 66 MHz.
+ * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock
+ *  of 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.
  */
-#if defined(CFG_IPBSPEED_133)
-# define CFG_PCISPEED_66                       /* define for 66MHz speed */
+#if defined(CFG_IPBCLK_EQUALS_XLBCLK)
+# define CFG_PCICLK_EQUALS_IPBCLK_DIV2 /* define for 66MHz speed */
 #endif
 
 /*
 
 #define CFG_BOOTCS_START       CFG_FLASH_BASE
 #define CFG_BOOTCS_SIZE                CFG_FLASH_SIZE
-#ifdef CFG_PCISPEED_66
+#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2
 # define CFG_BOOTCS_CFG                0x0008DF30      /* for pci_clk  = 66 MHz */
 #else
 # define CFG_BOOTCS_CFG                0x0004DF30      /* for pci_clk = 33 MHz  */
index 0d3825413eac04421ab77264ca1552543266f52d..73be06950bc1c35612b99650592719125fb1624e 100644 (file)
  * IPB Bus clocking configuration.
  */
 #if defined(CONFIG_LITE5200B)
-#define CFG_IPBSPEED_133       /* define for 133MHz speed */
+#define CFG_IPBCLK_EQUALS_XLBCLK       /* define for 133MHz speed */
 #else
-#undef CFG_IPBSPEED_133        /* define for 133MHz speed */
+#undef CFG_IPBCLK_EQUALS_XLBCLK        /* define for 133MHz speed */
 #endif
 #endif /* CONFIG_MPC5200 */
 
 
 #define OF_CPU                 "PowerPC,5200@0"
 #define OF_SOC                 "soc5200@f0000000"
-#define OF_TBCLK               (bd->bi_busfreq / 8)
+#define OF_TBCLK               (bd->bi_busfreq / 4)
 #define OF_STDOUT_PATH         "/soc5200@f0000000/serial@2000"
 
 /*
diff --git a/include/configs/MPC8313ERDB.h b/include/configs/MPC8313ERDB.h
new file mode 100644 (file)
index 0000000..6976313
--- /dev/null
@@ -0,0 +1,561 @@
+/*
+ * Copyright (C) Freescale Semiconductor, Inc. 2006.
+ *
+ * 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
+ */
+/*
+ * mpc8313epb board configuration file
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * High Level Configuration Options
+ */
+#define CONFIG_E300            1
+#define CONFIG_MPC83XX         1
+#define CONFIG_MPC831X         1
+#define CONFIG_MPC8313         1
+#define CONFIG_MPC8313ERDB     1
+
+#define CONFIG_PCI
+#define CONFIG_83XX_GENERIC_PCI
+
+#ifdef CFG_66MHZ
+#define CONFIG_83XX_CLKIN      66666667        /* in Hz */
+#elif defined(CFG_33MHZ)
+#define CONFIG_83XX_CLKIN      33333333        /* in Hz */
+#else
+#error Unknown oscillator frequency.
+#endif
+
+#define CONFIG_SYS_CLK_FREQ    CONFIG_83XX_CLKIN
+
+#define CONFIG_BOARD_EARLY_INIT_F              /* call board_pre_init */
+
+#define CFG_IMMR               0xE0000000
+
+#define CFG_MEMTEST_START      0x00001000
+#define CFG_MEMTEST_END                0x07f00000
+
+/* Early revs of this board will lock up hard when attempting
+ * to access the PMC registers, unless a JTAG debugger is
+ * connected, or some resistor modifications are made.
+ */
+#define CFG_8313ERDB_BROKEN_PMC 1
+
+#define CFG_ACR_PIPE_DEP       3       /* Arbiter pipeline depth (0-3) */
+#define CFG_ACR_RPTCNT         3       /* Arbiter repeat count (0-7) */
+
+/*
+ * DDR Setup
+ */
+#define CFG_DDR_BASE           0x00000000      /* DDR is system memory*/
+#define CFG_SDRAM_BASE         CFG_DDR_BASE
+#define CFG_DDR_SDRAM_BASE     CFG_DDR_BASE
+
+/*
+ * Manually set up DDR parameters, as this board does not
+ * seem to have the SPD connected to I2C.
+ */
+#define CFG_DDR_SIZE           128             /* MB */
+#define CFG_DDR_CONFIG         ( CSCONFIG_EN | CSCONFIG_AP \
+                               | 0x00040000 /* TODO */ \
+                               | CSCONFIG_ROW_BIT_13 | CSCONFIG_COL_BIT_10 )
+                               /* 0x80840102 */
+
+#define CFG_DDR_TIMING_3       0x00000000
+#define CFG_DDR_TIMING_0       ( ( 0 << TIMING_CFG0_RWT_SHIFT ) \
+                               | ( 0 << TIMING_CFG0_WRT_SHIFT ) \
+                               | ( 0 << TIMING_CFG0_RRT_SHIFT ) \
+                               | ( 0 << TIMING_CFG0_WWT_SHIFT ) \
+                               | ( 2 << TIMING_CFG0_ACT_PD_EXIT_SHIFT ) \
+                               | ( 2 << TIMING_CFG0_PRE_PD_EXIT_SHIFT ) \
+                               | ( 8 << TIMING_CFG0_ODT_PD_EXIT_SHIFT ) \
+                               | ( 2 << TIMING_CFG0_MRS_CYC_SHIFT ) )
+                               /* 0x00220802 */
+#define CFG_DDR_TIMING_1       ( ( 3 << TIMING_CFG1_PRETOACT_SHIFT ) \
+                               | ( 9 << TIMING_CFG1_ACTTOPRE_SHIFT ) \
+                               | ( 3 << TIMING_CFG1_ACTTORW_SHIFT ) \
+                               | ( 5 << TIMING_CFG1_CASLAT_SHIFT ) \
+                               | (13 << TIMING_CFG1_REFREC_SHIFT ) \
+                               | ( 3 << TIMING_CFG1_WRREC_SHIFT ) \
+                               | ( 2 << TIMING_CFG1_ACTTOACT_SHIFT ) \
+                               | ( 2 << TIMING_CFG1_WRTORD_SHIFT ) )
+                               /* 0x3935d322 */
+#define CFG_DDR_TIMING_2       ( ( 0 << TIMING_CFG2_ADD_LAT_SHIFT ) \
+                               | (31 << TIMING_CFG2_CPO_SHIFT ) \
+                               | ( 2 << TIMING_CFG2_WR_LAT_DELAY_SHIFT ) \
+                               | ( 2 << TIMING_CFG2_RD_TO_PRE_SHIFT ) \
+                               | ( 2 << TIMING_CFG2_WR_DATA_DELAY_SHIFT ) \
+                               | ( 3 << TIMING_CFG2_CKE_PLS_SHIFT ) \
+                               | (10 << TIMING_CFG2_FOUR_ACT_SHIFT) )
+                               /* 0x0f9048ca */ /* P9-45,may need tuning */
+#define CFG_DDR_INTERVAL       ( ( 800 << SDRAM_INTERVAL_REFINT_SHIFT ) \
+                               | ( 100 << SDRAM_INTERVAL_BSTOPRE_SHIFT ) )
+                               /* 0x03200064 */
+#if defined(CONFIG_DDR_2T_TIMING)
+#define CFG_SDRAM_CFG          ( SDRAM_CFG_SREN \
+                               | 3 << SDRAM_CFG_SDRAM_TYPE_SHIFT \
+                               | SDRAM_CFG_2T_EN \
+                               | SDRAM_CFG_DBW_32 )
+#else
+#define CFG_SDRAM_CFG          ( SDRAM_CFG_SREN \
+                               | 3 << SDRAM_CFG_SDRAM_TYPE_SHIFT \
+                               | SDRAM_CFG_32_BE )
+                               /* 0x43080000 */
+#endif
+#define CFG_SDRAM_CFG2         0x00401000;
+/* set burst length to 8 for 32-bit data path */
+#define CFG_DDR_MODE           ( ( 0x4440 << SDRAM_MODE_ESD_SHIFT ) \
+                               | ( 0x0232 << SDRAM_MODE_SD_SHIFT ) )
+                               /* 0x44400232 */
+#define CFG_DDR_MODE_2         0x8000C000;
+
+#define CFG_DDR_CLK_CNTL       DDR_SDRAM_CLK_CNTL_CLK_ADJUST_05
+                               /*0x02000000*/
+#define CFG_DDRCDR_VALUE       ( DDRCDR_EN \
+                               | DDRCDR_PZ_NOMZ \
+                               | DDRCDR_NZ_NOMZ \
+                               | DDRCDR_M_ODR )
+
+/*
+ * FLASH on the Local Bus
+ */
+#define CFG_FLASH_CFI                          /* use the Common Flash Interface */
+#define CFG_FLASH_CFI_DRIVER                   /* use the CFI driver */
+#define CFG_FLASH_BASE         0xFE000000      /* start of FLASH   */
+#define CFG_FLASH_SIZE         8               /* flash size in MB */
+#define CFG_FLASH_EMPTY_INFO                   /* display empty sectors */
+#define CFG_FLASH_USE_BUFFER_WRITE             /* buffer up multiple bytes */
+
+#define CFG_BR0_PRELIM         (CFG_FLASH_BASE |       /* flash Base address */ \
+                               (2 << BR_PS_SHIFT) |    /* 16 bit port size */ \
+                               BR_V)                   /* valid */
+#define CFG_OR0_PRELIM         ( 0xFF000000            /* 16 MByte */ \
+                               | OR_GPCM_XACS \
+                               | OR_GPCM_SCY_9 \
+                               | OR_GPCM_EHTR \
+                               | OR_GPCM_EAD )
+                               /* 0xFF006FF7   TODO SLOW 16 MB flash size */
+#define CFG_LBLAWBAR0_PRELIM   CFG_FLASH_BASE  /* window base at flash base */
+#define CFG_LBLAWAR0_PRELIM    0x80000017      /* 16 MB window size */
+
+#define CFG_MAX_FLASH_BANKS    1               /* number of banks */
+#define CFG_MAX_FLASH_SECT     135             /* sectors per device */
+
+#define CFG_FLASH_ERASE_TOUT   60000   /* Flash Erase Timeout (ms) */
+#define CFG_FLASH_WRITE_TOUT   500     /* Flash Write Timeout (ms) */
+
+#define CFG_MONITOR_BASE       TEXT_BASE       /* start of monitor */
+
+#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
+#define CFG_RAMBOOT
+#endif
+
+#define CFG_INIT_RAM_LOCK      1
+#define CFG_INIT_RAM_ADDR      0xFD000000      /* Initial RAM address */
+#define CFG_INIT_RAM_END       0x1000          /* End of used area in RAM*/
+
+#define CFG_GBL_DATA_SIZE      0x100           /* 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_MONITOR_LEN                (256 * 1024)    /* Reserve 256 kB for Mon */
+#define CFG_MALLOC_LEN         (512 * 1024)    /* Reserved for malloc */
+
+/*
+ * Local Bus LCRR and LBCR regs
+ */
+#define CFG_LCRR       LCRR_EADC_1 | LCRR_CLKDIV_2     /* 0x00010002 */
+#define CFG_LBC_LBCR   ( 0x00040000 /* TODO */ \
+                       | (0xFF << LBCR_BMT_SHIFT) \
+                       | 0xF ) /* 0x0004ff0f */
+
+#define CFG_LBC_MRTPR  0x20000000  /*TODO */   /* LB refresh timer prescal, 266MHz/32 */
+
+/* drivers/nand/nand.c */
+#define CFG_NAND_BASE          0xE2800000      /* 0xF0000000 */
+#define CFG_MAX_NAND_DEVICE    1
+#define NAND_MAX_CHIPS         1
+#define CONFIG_MTD_NAND_VERIFY_WRITE
+
+#define CFG_BR1_PRELIM         ( CFG_NAND_BASE \
+                               | (2<<BR_DECC_SHIFT)    /* Use HW ECC */ \
+                               | BR_PS_8               /* Port Size = 8 bit */ \
+                               | BR_MS_FCM             /* MSEL = FCM */ \
+                               | BR_V )                /* valid */
+#define CFG_OR1_PRELIM         ( 0xFFFF8000            /* length 32K */ \
+                               | OR_FCM_CSCT \
+                               | OR_FCM_CST \
+                               | OR_FCM_CHT \
+                               | OR_FCM_SCY_1 \
+                               | OR_FCM_TRLX \
+                               | OR_FCM_EHTR )
+                               /* 0xFFFF8396 */
+#define CFG_LBLAWBAR1_PRELIM   CFG_NAND_BASE
+#define CFG_LBLAWAR1_PRELIM    0x8000000E      /* 32KB  */
+
+#define CFG_VSC7385_BASE       0xF0000000
+
+#define CONFIG_VSC7385_ENET                    /* VSC7385 ethernet support */
+#define CFG_BR2_PRELIM         0xf0000801      /* VSC7385 Base address */
+#define CFG_OR2_PRELIM         0xfffe09ff      /* VSC7385, 128K bytes*/
+#define CFG_LBLAWBAR2_PRELIM   CFG_VSC7385_BASE/* Access window base at VSC7385 base */
+#define CFG_LBLAWAR2_PRELIM    0x80000010      /* Access window size 128K */
+
+/* local bus read write buffer mapping */
+#define CFG_BR3_PRELIM         0xFA000801      /* map at 0xFA000000 */
+#define CFG_OR3_PRELIM         0xFFFF8FF7      /* 32kB */
+#define CFG_LBLAWBAR3_PRELIM   0xFA000000
+#define CFG_LBLAWAR3_PRELIM    0x8000000E      /* 32KB  */
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_FLAT_TREE    1
+#define CONFIG_OF_BOARD_SETUP  1
+
+/* maximum size of the flat tree (8K) */
+#define OF_FLAT_TREE_MAX_SIZE  8192
+
+#define OF_CPU                 "PowerPC,8313@0"
+#define OF_SOC                 "soc8313@e0000000"
+#define OF_TBCLK               (bd->bi_busfreq / 4)
+#define OF_STDOUT_PATH         "/soc8313@e0000000/serial@4500"
+
+/*
+ * Serial Port
+ */
+#define CONFIG_CONS_INDEX      1
+#define CFG_NS16550
+#define CFG_NS16550_SERIAL
+#define CFG_NS16550_REG_SIZE   1
+#define CFG_NS16550_CLK                get_bus_freq(0)
+
+#define CFG_BAUDRATE_TABLE     \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 115200}
+
+#define CFG_NS16550_COM1       (CFG_IMMR+0x4500)
+#define CFG_NS16550_COM2       (CFG_IMMR+0x4600)
+
+/* Use the HUSH parser */
+#define CFG_HUSH_PARSER
+#define CFG_PROMPT_HUSH_PS2 "> "
+
+/* I2C */
+#define CONFIG_HARD_I2C                        /* I2C with hardware support*/
+#define CONFIG_FSL_I2C
+#define CONFIG_I2C_MULTI_BUS
+#define CONFIG_I2C_CMD_TREE
+#define CFG_I2C_SPEED          400000  /* I2C speed and slave address */
+#define CFG_I2C_SLAVE          0x7F
+#define CFG_I2C_NOPROBES       {0x69}  /* Don't probe these addrs */
+#define CFG_I2C_OFFSET         0x3000
+#define CFG_I2C2_OFFSET                0x3100
+
+/* TSEC */
+#define CFG_TSEC1_OFFSET       0x24000
+#define CFG_TSEC1              (CFG_IMMR+CFG_TSEC1_OFFSET)
+#define CFG_TSEC2_OFFSET       0x25000
+#define CFG_TSEC2              (CFG_IMMR+CFG_TSEC2_OFFSET)
+#define CONFIG_NET_MULTI
+
+/*
+ * General PCI
+ * Addresses are mapped 1-1.
+ */
+#define CFG_PCI1_MEM_BASE      0x80000000
+#define CFG_PCI1_MEM_PHYS      CFG_PCI1_MEM_BASE
+#define CFG_PCI1_MEM_SIZE      0x10000000      /* 256M */
+#define CFG_PCI1_MMIO_BASE     0x90000000
+#define CFG_PCI1_MMIO_PHYS     CFG_PCI1_MMIO_BASE
+#define CFG_PCI1_MMIO_SIZE     0x10000000      /* 256M */
+#define CFG_PCI1_IO_BASE       0x00000000
+#define CFG_PCI1_IO_PHYS       0xE2000000
+#define CFG_PCI1_IO_SIZE       0x00100000      /* 1M */
+
+#define CONFIG_PCI_PNP         /* do pci plug-and-play */
+#define CFG_PCI_SUBSYS_VENDORID 0x1057 /* Motorola */
+
+/*
+ * TSEC configuration
+ */
+#define CONFIG_TSEC_ENET               /* TSEC ethernet support */
+
+#ifndef CONFIG_NET_MULTI
+#define CONFIG_NET_MULTI               1
+#endif
+
+#define CONFIG_GMII                    1       /* MII PHY management */
+#define CONFIG_MPC83XX_TSEC1           1
+
+#define CONFIG_MPC83XX_TSEC1_NAME      "TSEC0"
+#define CONFIG_MPC83XX_TSEC2           1
+#define CONFIG_MPC83XX_TSEC2_NAME      "TSEC1"
+#define TSEC1_PHY_ADDR                 0x1c
+#define TSEC2_PHY_ADDR                 4
+#define TSEC1_PHYIDX                   0
+#define TSEC2_PHYIDX                   0
+
+/* Options are: TSEC[0-1] */
+#define CONFIG_ETHPRIME                        "TSEC1"
+
+/*
+ * Configure on-board RTC
+ */
+#define CONFIG_RTC_DS1337
+#define CFG_I2C_RTC_ADDR               0x68
+
+/*
+ * Environment
+ */
+#ifndef CFG_RAMBOOT
+       #define CFG_ENV_IS_IN_FLASH     1
+       #define CFG_ENV_ADDR            (CFG_MONITOR_BASE + 0x40000)
+       #define CFG_ENV_SECT_SIZE       0x10000 /* 64K(one sector) for env */
+       #define CFG_ENV_SIZE            0x2000
+
+/* Address and size of Redundant Environment Sector */
+#else
+       #define CFG_ENV_IS_NOWHERE      1       /* Store ENV in memory only */
+       #define CFG_ENV_ADDR            (CFG_MONITOR_BASE - 0x1000)
+       #define CFG_ENV_SIZE            0x2000
+#endif
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change */
+
+#define CFG_BASE_COMMANDS      ( CONFIG_CMD_DFL        \
+                               | CFG_CMD_PING          \
+                               | CFG_CMD_DHCP          \
+                               | CFG_CMD_I2C           \
+                               | CFG_CMD_MII           \
+                               | CFG_CMD_DATE          \
+                               | CFG_CMD_PCI)
+
+#define CONFIG_CMDLINE_EDITING 1
+
+#define CFG_RAMBOOT_COMMANDS   (CFG_BASE_COMMANDS & \
+                                ~(CFG_CMD_ENV | CFG_CMD_LOADS))
+
+#if defined(CFG_RAMBOOT)
+#define CONFIG_COMMANDS CFG_RAMBOOT_COMMANDS
+#else
+#define CONFIG_COMMANDS CFG_BASE_COMMANDS
+#endif
+
+#include <cmd_confdefs.h>
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory */
+#define CFG_LOAD_ADDR  0x2000000       /* default load address */
+#define CFG_PROMPT     "=> "           /* Monitor Command Prompt */
+#define CFG_CBSIZE     1024            /* 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_BARGSIZE   CFG_CBSIZE      /* Boot Argument Buffer Size */
+#define CFG_HZ         1000            /* decrementer freq: 1ms ticks */
+
+/*
+ * 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*/
+
+/* Cache Configuration */
+#define CFG_DCACHE_SIZE                16384
+#define CFG_CACHELINE_SIZE     32
+#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
+
+#define CFG_RCWH_PCIHOST 0x80000000    /* PCIHOST  */
+
+#ifdef CFG_66MHZ
+
+/* 66MHz IN, 133MHz CSB, 266 DDR, 266 CORE */
+/* 0x62040000 */
+#define CFG_HRCW_LOW (\
+       0x20000000 /* reserved, must be set */ |\
+       HRCWL_DDRCM |\
+       HRCWL_LCL_BUS_TO_SCB_CLK_1X1 |\
+       HRCWL_DDR_TO_SCB_CLK_2X1 |\
+       HRCWL_CSB_TO_CLKIN_2X1 |\
+       HRCWL_CORE_TO_CSB_2X1)
+
+#elif defined(CFG_33MHZ)
+
+/* 33MHz IN, 165MHz CSB, 330 DDR, 330 CORE */
+/* 0x65040000 */
+#define CFG_HRCW_LOW (\
+       0x20000000 /* reserved, must be set */ |\
+       HRCWL_DDRCM |\
+       HRCWL_LCL_BUS_TO_SCB_CLK_1X1 |\
+       HRCWL_DDR_TO_SCB_CLK_2X1 |\
+       HRCWL_CSB_TO_CLKIN_5X1 |\
+       HRCWL_CORE_TO_CSB_2X1)
+
+#endif
+
+/* 0xa0606c00 */
+#define CFG_HRCW_HIGH (\
+       HRCWH_PCI_HOST |\
+       HRCWH_PCI1_ARBITER_ENABLE |\
+       HRCWH_CORE_ENABLE |\
+       HRCWH_FROM_0X00000100 |\
+       HRCWH_BOOTSEQ_DISABLE |\
+       HRCWH_SW_WATCHDOG_DISABLE |\
+       HRCWH_ROM_LOC_LOCAL_16BIT |\
+       HRCWH_RL_EXT_LEGACY |\
+       HRCWH_TSEC1M_IN_RGMII |\
+       HRCWH_TSEC2M_IN_RGMII |\
+       HRCWH_BIG_ENDIAN |\
+       HRCWH_LALE_NORMAL)
+
+/* System IO Config */
+#define CFG_SICRH      (SICRH_TSOBI1 | SICRH_TSOBI2)   /* RGMII */
+#define CFG_SICRL      SICRL_USBDR                     /* Enable Internal USB Phy  */
+
+#define CFG_HID0_INIT  0x000000000
+#define CFG_HID0_FINAL (HID0_ENABLE_MACHINE_CHECK | \
+                        HID0_ENABLE_DYNAMIC_POWER_MANAGMENT)
+
+#define CFG_HID2 HID2_HBE
+
+/* DDR @ 0x00000000 */
+#define CFG_IBAT0L     (CFG_SDRAM_BASE | BATL_PP_10)
+#define CFG_IBAT0U     (CFG_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
+
+/* PCI @ 0x80000000 */
+#define CFG_IBAT1L     (CFG_PCI1_MEM_BASE | BATL_PP_10)
+#define CFG_IBAT1U     (CFG_PCI1_MEM_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
+#define CFG_IBAT2L     (CFG_PCI1_MMIO_BASE | BATL_PP_10 | BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
+#define CFG_IBAT2U     (CFG_PCI1_MMIO_BASE | BATU_BL_256M | BATU_VS | BATU_VP)
+
+/* PCI2 not supported on 8313 */
+#define CFG_IBAT3L     (0)
+#define CFG_IBAT3U     (0)
+#define CFG_IBAT4L     (0)
+#define CFG_IBAT4U     (0)
+
+/* IMMRBAR @ 0xE0000000, PCI IO @ 0xE2000000 & BCSR @ 0xE2400000 */
+#define CFG_IBAT5L     (CFG_IMMR | BATL_PP_10 | BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE)
+#define CFG_IBAT5U     (CFG_IMMR | BATU_BL_256M | BATU_VS | BATU_VP)
+
+/* SDRAM @ 0xF0000000, stack in DCACHE 0xFDF00000 & FLASH @ 0xFE000000 */
+#define CFG_IBAT6L     (0xF0000000 | BATL_PP_10)
+#define CFG_IBAT6U     (0xF0000000 | BATU_BL_256M | BATU_VS | BATU_VP)
+
+#define CFG_IBAT7L     (0)
+#define CFG_IBAT7U     (0)
+
+#define CFG_DBAT0L     CFG_IBAT0L
+#define CFG_DBAT0U     CFG_IBAT0U
+#define CFG_DBAT1L     CFG_IBAT1L
+#define CFG_DBAT1U     CFG_IBAT1U
+#define CFG_DBAT2L     CFG_IBAT2L
+#define CFG_DBAT2U     CFG_IBAT2U
+#define CFG_DBAT3L     CFG_IBAT3L
+#define CFG_DBAT3U     CFG_IBAT3U
+#define CFG_DBAT4L     CFG_IBAT4L
+#define CFG_DBAT4U     CFG_IBAT4U
+#define CFG_DBAT5L     CFG_IBAT5L
+#define CFG_DBAT5U     CFG_IBAT5U
+#define CFG_DBAT6L     CFG_IBAT6L
+#define CFG_DBAT6U     CFG_IBAT6U
+#define CFG_DBAT7L     CFG_IBAT7L
+#define CFG_DBAT7U     CFG_IBAT7U
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01    /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02    /* Software reboot */
+
+/*
+ * Environment Configuration
+ */
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_ETHADDR         00:E0:0C:00:95:01
+#define CONFIG_HAS_ETH1
+#define CONFIG_ETH1ADDR                00:E0:0C:00:95:02
+
+#define CONFIG_IPADDR          10.0.0.2
+#define CONFIG_SERVERIP                10.0.0.1
+#define CONFIG_GATEWAYIP       10.0.0.1
+#define CONFIG_NETMASK         255.0.0.0
+#define CONFIG_NETDEV          eth1
+
+#define CONFIG_HOSTNAME                mpc8313erdb
+#define CONFIG_ROOTPATH                /nfs/root/path
+#define CONFIG_BOOTFILE                uImage
+#define CONFIG_UBOOTPATH       u-boot.bin      /* U-Boot image on TFTP server */
+#define CONFIG_FDTFILE         mpc8313erdb.dtb
+
+#define CONFIG_LOADADDR                200000  /* default location for tftp and bootm */
+#define CONFIG_BOOTDELAY       -1      /* -1 disables auto-boot */
+#define CONFIG_BAUDRATE                115200
+
+#define XMK_STR(x)     #x
+#define MK_STR(x)      XMK_STR(x)
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+       "netdev=" MK_STR(CONFIG_NETDEV) "\0"                            \
+       "ethprime=TSEC1\0"                                              \
+       "uboot=" MK_STR(CONFIG_UBOOTPATH) "\0"                          \
+       "tftpflash=tftpboot $loadaddr $uboot; "                         \
+               "protect off " MK_STR(TEXT_BASE) " +$filesize; "        \
+               "erase " MK_STR(TEXT_BASE) " +$filesize; "              \
+               "cp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize; "      \
+               "protect on " MK_STR(TEXT_BASE) " +$filesize; "         \
+               "cmp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize\0"     \
+       "fdtaddr=400000\0"                                              \
+       "fdtfile=" MK_STR(CONFIG_FDTFILE) "\0"                          \
+       "console=ttyS0\0"                                               \
+       "setbootargs=setenv bootargs "                                  \
+               "root=$rootdev rw console=$console,$baudrate $othbootargs\0" \
+       "setipargs=setenv bootargs nfsroot=$serverip:$rootpath " \
+               "ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off " \
+               "root=$rootdev rw console=$console,$baudrate $othbootargs\0"
+
+#define CONFIG_NFSBOOTCOMMAND                                          \
+       "setenv rootdev /dev/nfs;"                                      \
+       "run setbootargs;"                                                      \
+       "run setipargs;"                                                        \
+       "tftp $loadaddr $bootfile;"                                     \
+       "tftp $fdtaddr $fdtfile;"                                       \
+       "bootm $loadaddr - $fdtaddr"
+
+#define CONFIG_RAMBOOTCOMMAND                                          \
+       "setenv rootdev /dev/ram;"                                      \
+       "run setbootargs;"                                              \
+       "tftp $ramdiskaddr $ramdiskfile;"                               \
+       "tftp $loadaddr $bootfile;"                                     \
+       "tftp $fdtaddr $fdtfile;"                                       \
+       "bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#undef MK_STR
+#undef XMK_STR
+
+#endif /* __CONFIG_H */
index 37bbfb336d2d6f1c5daa04f22d6e110551cc7762..906339e9d8827b281d58620b4fcce25c3998dac3 100644 (file)
 #define CFG_MEMTEST_START      0x1000          /* memtest region */
 #define CFG_MEMTEST_END                0x2000
 
+#define CFG_DDR_SDRAM_CLK_CNTL (DDR_SDRAM_CLK_CNTL_SS_EN | \
+                               DDR_SDRAM_CLK_CNTL_CLK_ADJUST_05)
+
 #ifdef CONFIG_HARD_I2C
 #define CONFIG_SPD_EEPROM              /* use SPD EEPROM for DDR setup*/
 #endif
index 74a84f4e86ab259c8477c9cc4a064a20c09297dd..5aeea586800eb9587ae1e289305387736753c14b 100644 (file)
 
 /*
  * General PCI
- * Addresses are mapped 1-1.
+ * Memory space is mapped 1-1, but I/O space must start from 0.
  */
 #define CFG_PCI1_MEM_BASE      0x80000000
 #define CFG_PCI1_MEM_PHYS      CFG_PCI1_MEM_BASE
 #define CFG_PCI1_MEM_SIZE      0x20000000      /* 512M */
-
-#define CFG_PCI1_IO_BASE       0x0
+#define CFG_PCI1_IO_BASE       0x00000000
 #define CFG_PCI1_IO_PHYS       0xe2000000
 #define CFG_PCI1_IO_SIZE       0x100000        /* 1M */
 
index db389cfe676255598816e957c01205055548491f..fb360d282cd4cf653d2a09a569127555172c3cd2 100644 (file)
@@ -334,7 +334,7 @@ extern unsigned long get_clock_freq(void);
 
 /*
  * General PCI
- * Addresses are mapped 1-1.
+ * Memory space is mapped 1-1, but I/O space must start from 0.
  */
 #define CFG_PCI1_MEM_BASE      0x80000000
 #define CFG_PCI1_MEM_PHYS      CFG_PCI1_MEM_BASE
diff --git a/include/configs/MPC8544DS.h b/include/configs/MPC8544DS.h
new file mode 100644 (file)
index 0000000..4c34308
--- /dev/null
@@ -0,0 +1,591 @@
+/*
+ * 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
+ */
+
+/*
+ * mpc8544ds board configuration file
+ *
+ */
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* High Level Configuration Options */
+#define CONFIG_BOOKE           1       /* BOOKE */
+#define CONFIG_E500            1       /* BOOKE e500 family */
+#define CONFIG_MPC85xx         1       /* MPC8540/60/55/41/48 */
+#define CONFIG_MPC8544         1
+#define CONFIG_MPC8544DS       1
+
+#undef CONFIG_PCI                      /* Enable PCI/PCIE */
+#undef CONFIG_PCI1                     /* PCI controller 1 */
+#undef CONFIG_PCIE1                    /* PCIE controler 1 (slot 1) */
+#undef CONFIG_PCIE2                    /* PCIE controler 2 (slot 2) */
+#undef CONFIG_PCIE3                    /* PCIE controler 3 (ULI bridge) */
+#undef CONFIG_FSL_PCI_INIT             /* 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 */
+#undef CONFIG_DDR_DLL
+#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
+
+#define CONFIG_DDR_ECC                 /* only for ECC DDR module */
+#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER      /* DDR controller or DMA? */
+#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
+
+#define CONFIG_DDR_ECC_CMD
+
+/*
+ * When initializing flash, if we cannot find the manufacturer ID,
+ * assume this is the AMD flash associated with the CDS board.
+ * This allows booting from a promjet.
+ */
+#define CONFIG_ASSUME_AMD_FLASH
+
+#define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
+
+#ifndef __ASSEMBLY__
+extern unsigned long get_board_sys_clk(unsigned long dummy);
+#endif
+#define CONFIG_SYS_CLK_FREQ    get_board_sys_clk(0) /* sysclk for MPC85xx */
+
+/*
+ * These can be toggled for performance analysis, otherwise use default.
+ */
+#define CONFIG_L2_CACHE                        /* toggle L2 cache      */
+#define CONFIG_BTB                     /* toggle branch predition */
+#define CONFIG_ADDR_STREAMING          /* toggle addr streaming */
+#define CONFIG_CLEAR_LAW0              /* Clear LAW0 in cpu_init_r */
+
+/*
+ * Only possible on E500 Version 2 or newer cores.
+ */
+#define CONFIG_ENABLE_36BIT_PHYS       1
+
+#define CONFIG_BOARD_EARLY_INIT_F      1       /* Call board_pre_init */
+
+#undef CFG_DRAM_TEST                   /* memory test, takes time */
+#define CFG_MEMTEST_START      0x00200000      /* memtest works on */
+#define CFG_MEMTEST_END                0x00400000
+#define CFG_ALT_MEMTEST
+#define CONFIG_PANIC_HANG      /* do not reset board on panic */
+
+/*
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ */
+#define CFG_CCSRBAR_DEFAULT    0xff700000      /* CCSRBAR Default */
+#define CFG_CCSRBAR            0xe0000000      /* relocated CCSRBAR */
+#define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR */
+
+#define CFG_PCI1_ADDR          (CFG_CCSRBAR+0x8000)
+#define CFG_PCIE1_ADDR         (CFG_CCSRBAR+0xa000)
+#define CFG_PCIE2_ADDR         (CFG_CCSRBAR+0x9000)
+#define CFG_PCIE3_ADDR         (CFG_CCSRBAR+0xb000)
+
+/*
+ * DDR Setup
+ */
+#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+
+#define SPD_EEPROM_ADDRESS     0x51            /* DDR DIMM */
+
+/*
+ * Make sure required options are set
+ */
+#ifndef CONFIG_SPD_EEPROM
+#error ("CONFIG_SPD_EEPROM is required")
+#endif
+
+#undef CONFIG_CLOCKS_IN_MHZ
+
+/*
+ * Memory map
+ *
+ * 0x0000_0000 0x7fff_ffff     DDR                     2G Cacheable
+ *
+ * 0x8000_0000 0xbfff_ffff     PCI Express Mem         1G non-cacheable
+ *
+ * 0xc000_0000 0xdfff_ffff     PCI                     512M non-cacheable
+ *
+ * 0xe000_0000 0xe00f_ffff     CCSR                    1M non-cacheable
+ * 0xe100_0000 0xe3ff_ffff     PCI IO range            4M non-cacheable
+ *
+ * Localbus cacheable
+ *
+ * 0xf000_0000 0xf3ff_ffff     SDRAM                   64M Cacheable
+ * 0xf401_0000 0xf401_3fff     L1 for stack            4K Cacheable TLB0
+ *
+ * Localbus non-cacheable
+ *
+ * 0xf800_0000 0xf80f_ffff     NVRAM/CADMUS (*)        1M non-cacheable
+ * 0xff00_0000 0xff7f_ffff     FLASH (2nd bank)        8M non-cacheable
+ * 0xff80_0000 0xffff_ffff     FLASH (boot bank)       8M non-cacheable
+ *
+ */
+
+/*
+ * Local Bus Definitions
+ */
+#define CFG_BOOT_BLOCK         0xfc000000      /* boot TLB */
+
+#define CFG_LBC_CACHE_BASE     0xf0000000      /* Localbus cacheable */
+
+#define CFG_FLASH_BASE         0xff800000      /* start of FLASH 8M */
+
+#define CFG_BR0_PRELIM         0xff801001
+#define CFG_BR1_PRELIM         0xfe801001
+
+#define CFG_OR0_PRELIM         0xff806e65
+#define CFG_OR1_PRELIM         0xff806e65
+
+#define CFG_FLASH_BANKS_LIST   {0xfe800000,CFG_FLASH_BASE}
+
+#define CFG_MAX_FLASH_BANKS    2               /* number of banks */
+#define CFG_MAX_FLASH_SECT     128             /* sectors per device */
+#undef CFG_FLASH_CHECKSUM
+#define CFG_FLASH_ERASE_TOUT   60000           /* Flash Erase Timeout (ms) */
+#define CFG_FLASH_WRITE_TOUT   500             /* Flash Write Timeout (ms) */
+
+#define CFG_MONITOR_BASE       TEXT_BASE       /* start of monitor */
+
+#define CFG_FLASH_CFI_DRIVER
+#define CFG_FLASH_CFI
+#define CFG_FLASH_EMPTY_INFO
+
+#define CFG_LBC_NONCACHE_BASE  0xf8000000
+
+#define CFG_BR2_PRELIM         0xf8201001      /* port size 16bit */
+#define CFG_OR2_PRELIM         0xfff06ff7      /* 1MB Compact Flash area*/
+
+#define CFG_BR3_PRELIM         0xf8100801      /* port size 8bit */
+#define CFG_OR3_PRELIM         0xfff06ff7      /* 1MB PIXIS area*/
+
+#define PIXIS_BASE     0xf8100000      /* PIXIS registers */
+#define PIXIS_ID               0x0     /* Board ID at offset 0 */
+#define PIXIS_VER              0x1     /* Board version at offset 1 */
+#define PIXIS_PVER             0x2     /* PIXIS FPGA version at offset 2 */
+#define PIXIS_RST              0x4     /* PIXIS Reset Control register */
+#define PIXIS_AUX              0x6     /* PIXIS Auxiliary register; Scratch
+                                        * register */
+#define PIXIS_SPD              0x7     /* Register for SYSCLK speed */
+#define PIXIS_VCTL             0x10    /* VELA Control Register */
+#define PIXIS_VCFGEN0          0x12    /* VELA Config Enable 0 */
+#define PIXIS_VCFGEN1          0x13    /* VELA Config Enable 1 */
+#define PIXIS_VBOOT            0x16    /* VELA VBOOT Register */
+#define PIXIS_VSPEED0          0x17    /* VELA VSpeed 0 */
+#define PIXIS_VSPEED1          0x18    /* VELA VSpeed 1 */
+#define PIXIS_VCLKH            0x19    /* VELA VCLKH register */
+#define PIXIS_VCLKL            0x1A    /* VELA VCLKL register */
+
+
+/* define to use L1 as initial stack */
+#define CONFIG_L1_INIT_RAM     1
+#define CFG_INIT_L1_LOCK       1
+#define CFG_INIT_L1_ADDR       0xf4010000      /* Initial L1 address */
+#define CFG_INIT_L1_END                0x00004000      /* End of used area in RAM */
+
+/* define to use L2SRAM as initial stack */
+#undef CONFIG_L2_INIT_RAM
+#define CFG_INIT_L2_ADDR       0xf8fc0000
+#define CFG_INIT_L2_END                0x00040000      /* End of used area in RAM */
+
+#ifdef CONFIG_L1_INIT_RAM
+#define CFG_INIT_RAM_ADDR      CFG_INIT_L1_ADDR
+#define CFG_INIT_RAM_END       CFG_INIT_L1_END
+#else
+#define CFG_INIT_RAM_ADDR      CFG_INIT_L2_ADDR
+#define CFG_INIT_RAM_END       CFG_INIT_L2_END
+#endif
+
+#define CFG_GBL_DATA_SIZE      128     /* 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_MONITOR_LEN                (256 * 1024) /* Reserve 256 kB for Mon */
+#define CFG_MALLOC_LEN         (128 * 1024)    /* Reserved for malloc */
+
+/* Serial Port - controlled on board with jumper J8
+ * open - index 2
+ * shorted - index 1
+ */
+#define CONFIG_CONS_INDEX      1
+#undef CONFIG_SERIAL_SOFTWARE_FIFO
+#define CFG_NS16550
+#define CFG_NS16550_SERIAL
+#define CFG_NS16550_REG_SIZE   1
+#define CFG_NS16550_CLK                get_bus_freq(0)
+
+#define CFG_BAUDRATE_TABLE     \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200}
+
+#define CFG_NS16550_COM1       (CFG_CCSRBAR+0x4500)
+#define CFG_NS16550_COM2       (CFG_CCSRBAR+0x4600)
+
+/* Use the HUSH parser */
+#define CFG_HUSH_PARSER
+#ifdef CFG_HUSH_PARSER
+#define CFG_PROMPT_HUSH_PS2 "> "
+#endif
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_FLAT_TREE    1
+#define CONFIG_OF_BOARD_SETUP  1
+
+/* maximum size of the flat tree (8K) */
+#define OF_FLAT_TREE_MAX_SIZE  8192
+
+#define OF_CPU                 "PowerPC,8544@0"
+#define OF_SOC                 "soc8544@e0000000"
+#define OF_TBCLK               (bd->bi_busfreq / 8)
+#define OF_STDOUT_PATH         "/soc8544@e0000000/serial@4500"
+
+/* I2C */
+#define CONFIG_FSL_I2C         /* Use FSL common I2C driver */
+#define CONFIG_HARD_I2C                /* I2C with hardware support */
+#undef CONFIG_SOFT_I2C         /* I2C bit-banged */
+#define CFG_I2C_SPEED          400000  /* I2C speed and slave address */
+#define CFG_I2C_EEPROM_ADDR    0x57
+#define CFG_I2C_SLAVE          0x7F
+#define CFG_I2C_NOPROBES       {0x69}  /* Don't probe these addrs */
+#define CFG_I2C_OFFSET         0x3100
+
+/*
+ * General PCI
+ * Memory space is mapped 1-1, but I/O space must start from 0.
+ */
+#define CFG_PCIE_PHYS          0x80000000      /* 1G PCIE TLB */
+#define CFG_PCI_PHYS           0xc0000000      /* 512M PCI TLB */
+
+#define CFG_PCI1_MEM_BASE      0xc0000000
+#define CFG_PCI1_MEM_PHYS      CFG_PCI1_MEM_BASE
+#define CFG_PCI1_MEM_SIZE      0x20000000      /* 512M */
+#define CFG_PCI1_IO_BASE       0x00000000
+#define CFG_PCI1_IO_PHYS       0xe1000000
+#define CFG_PCI1_IO_SIZE       0x00100000      /* 1M */
+
+/* PCI view of System Memory */
+#define CFG_PCI_MEMORY_BUS     0x00000000
+#define CFG_PCI_MEMORY_PHYS    0x00000000
+#define CFG_PCI_MEMORY_SIZE    0x80000000
+
+/* controller 2, Slot 1, tgtid 1, Base address 9000 */
+#define CFG_PCIE2_MEM_BASE     0x80000000
+#define CFG_PCIE2_MEM_PHYS     CFG_PCIE2_MEM_BASE
+#define CFG_PCIE2_MEM_SIZE     0x20000000      /* 512M */
+#define CFG_PCIE2_IO_BASE      0x00000000
+#define CFG_PCIE2_IO_PHYS      0xe2000000
+#define CFG_PCIE2_IO_SIZE      0x00100000      /* 1M */
+
+/* controller 1, Slot 2,tgtid 2, Base address a000 */
+#define CFG_PCIE1_MEM_BASE     0xa0000000
+#define CFG_PCIE1_MEM_PHYS     CFG_PCIE1_MEM_BASE
+#define CFG_PCIE1_MEM_SIZE     0x08000000      /* 128M */
+#define CFG_PCIE1_MEM_BASE2    0xa8000000
+#define CFG_PCIE1_MEM_PHYS2    CFG_PCIE1_MEM_BASE2
+#define CFG_PCIE1_MEM_SIZE2    0x04000000      /* 64M */
+#define CFG_PCIE1_IO_BASE      0x00000000      /* reuse mem LAW */
+#define CFG_PCIE1_IO_PHYS      0xaf000000
+#define CFG_PCIE1_IO_SIZE      0x00100000      /* 1M */
+
+/* controller 3, direct to uli, tgtid 3, Base address b000 */
+#define CFG_PCIE3_MEM_BASE     0xb0000000
+#define CFG_PCIE3_MEM_PHYS     CFG_PCIE3_MEM_BASE
+#define CFG_PCIE3_MEM_SIZE     0x10000000      /* 256M */
+#define CFG_PCIE3_IO_BASE      0x00000000
+#define CFG_PCIE3_IO_PHYS      0xe3000000
+#define CFG_PCIE3_IO_SIZE      0x00100000      /* 1M */
+
+#if defined(CONFIG_PCI)
+
+#define CONFIG_NET_MULTI
+#define CONFIG_PCI_PNP                 /* do pci plug-and-play */
+
+#undef CONFIG_EEPRO100
+#undef CONFIG_TULIP
+#define CONFIG_RTL8139
+
+#ifdef CONFIG_RTL8139
+/* This macro is used by RTL8139 but not defined in PPC architecture */
+#define KSEG1ADDR(x)           (x)
+#define _IO_BASE       0x00000000
+#endif
+
+#ifndef CONFIG_PCI_PNP
+       #define PCI_ENET0_IOADDR        CFG_PCI1_IO_BASE
+       #define PCI_ENET0_MEMADDR       CFG_PCI1_IO_BASE
+       #define PCI_IDSEL_NUMBER        0x11    /* IDSEL = AD11 */
+#endif
+
+#define CONFIG_PCI_SCAN_SHOW           /* show pci devices on startup */
+#define CONFIG_DOS_PARTITION
+#define CONFIG_SCSI_AHCI
+
+#ifdef CONFIG_SCSI_AHCI
+#define CONFIG_SATA_ULI5288
+#define CFG_SCSI_MAX_SCSI_ID   4
+#define CFG_SCSI_MAX_LUN       1
+#define CFG_SCSI_MAX_DEVICE    (CFG_SCSI_MAX_SCSI_ID * CFG_SCSI_MAX_LUN)
+#define CFG_SCSI_MAXDEVICE     CFG_SCSI_MAX_DEVICE
+#endif /* SCSCI */
+
+#endif /* CONFIG_PCI */
+
+
+#if defined(CONFIG_TSEC_ENET)
+
+#ifndef CONFIG_NET_MULTI
+#define CONFIG_NET_MULTI       1
+#endif
+
+#define CONFIG_MII             1       /* MII PHY management */
+#define CONFIG_MII_DEFAULT_TSEC        1       /* Allow unregistered phys */
+#define CONFIG_MPC85XX_TSEC1   1
+#define CONFIG_MPC85XX_TSEC1_NAME      "eTSEC1"
+#define CONFIG_MPC85XX_TSEC3   1
+#define CONFIG_MPC85XX_TSEC3_NAME      "eTSEC3"
+#undef CONFIG_MPC85XX_FEC
+
+#define TSEC1_PHY_ADDR         0
+#define TSEC3_PHY_ADDR         1
+
+#define TSEC1_PHYIDX           0
+#define TSEC3_PHYIDX           0
+
+#define CONFIG_ETHPRIME                "eTSEC1"
+
+#define CONFIG_PHY_GIGE                1       /* Include GbE speed/duplex detection */
+
+#endif /* CONFIG_TSEC_ENET */
+
+/*
+ * Environment
+ */
+#define CFG_ENV_IS_IN_FLASH    1
+#if CFG_MONITOR_BASE > 0xfff80000
+#define CFG_ENV_ADDR           0xfff80000
+#else
+#define CFG_ENV_ADDR           (CFG_MONITOR_BASE + 0x40000)
+#endif
+#define CFG_ENV_SIZE           0x2000
+#define CFG_ENV_SECT_SIZE      0x10000 /* 64K (one sector) */
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change */
+
+#if defined(CONFIG_PCI)
+#define        CONFIG_COMMANDS (CONFIG_CMD_DFL \
+                               | CFG_CMD_PCI \
+                               | CFG_CMD_PING \
+                               | CFG_CMD_I2C \
+                               | CFG_CMD_MII \
+                               | CFG_CMD_BEDBUG \
+                               | CFG_CMD_NET)
+#else
+#define        CONFIG_COMMANDS (CONFIG_CMD_DFL \
+                               | CFG_CMD_PING \
+                               | CFG_CMD_I2C \
+                               | CFG_CMD_MII)
+#endif
+#include <cmd_confdefs.h>
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory */
+#define CFG_LOAD_ADDR  0x2000000       /* default load address */
+#define CFG_PROMPT     "=> "           /* Monitor Command Prompt */
+#if (CONFIG_COMMANDS & CFG_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_HZ         1000            /* decrementer freq: 1ms ticks */
+
+/*
+ * 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*/
+
+/* Cache Configuration */
+#define CFG_DCACHE_SIZE        32768
+#define CFG_CACHELINE_SIZE     32
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
+#endif
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02            /* Software reboot */
+
+#if (CONFIG_COMMANDS & CFG_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
+
+/*
+ * Environment Configuration
+ */
+
+/* The mac addresses for all ethernet interface */
+#if defined(CONFIG_TSEC_ENET)
+#define CONFIG_ETHADDR 00:E0:0C:02:00:FD
+#define CONFIG_HAS_ETH1
+#define CONFIG_ETH1ADDR        00:E0:0C:02:01:FD
+#define CONFIG_HAS_ETH2
+#define CONFIG_ETH2ADDR        00:E0:0C:02:02:FD
+#define CONFIG_HAS_ETH3
+#define CONFIG_ETH3ADDR        00:E0:0C:02:03:FD
+#endif
+
+#define CONFIG_IPADDR  192.168.1.251
+
+#define CONFIG_HOSTNAME        8544ds_unknown
+#define CONFIG_ROOTPATH        /nfs/mpc85xx
+#define CONFIG_BOOTFILE        8544ds_tmt/uImage.uboot
+
+#define CONFIG_SERVERIP        192.168.0.1
+#define CONFIG_GATEWAYIP 192.168.0.1
+#define CONFIG_NETMASK 255.255.0.0
+
+#define CONFIG_LOADADDR        1000000 /*default location for tftp and bootm*/
+
+#define CONFIG_BOOTDELAY 10    /* -1 disables auto-boot */
+#undef CONFIG_BOOTARGS /* the boot command will set bootargs*/
+
+#define CONFIG_BAUDRATE        115200
+
+#if defined(CONFIG_PCIE1) || defined(CONFIG_PCIE2) || defined(CONFIG_PCIE3)
+#define PCIE_ENV \
+ "pciereg=md ${a}000 6; md ${a}020 4; md ${a}bf8 2; echo o;md ${a}c00 25;" \
+       "echo i; md ${a}da0 15; echo e;md ${a}e00 e; echo d; md ${a}f00 c\0" \
+ "pcie1regs=setenv a e000a; run pciereg\0"     \
+ "pcie2regs=setenv a e0009; run pciereg\0"     \
+ "pcie3regs=setenv a e000b; run pciereg\0"     \
+ "pcieerr=md ${a}020 1; md ${a}e00;"           \
+       "pci d.b $b.0 7 1; pci d.w $b.0 1e 1;"  \
+       "pci d.w $b.0 56 1;"                    \
+       "pci d $b.0 104 1;pci d $b.0 110 1;pci d $b.0 130 1\0" \
+ "pcieerrc=mw ${a}020 ffffffff; mw ${a}e00 ffffffff;"  \
+       "pci w.b $b.0 7 ff; pci w.w $b.0 1e ffff; pci w.w $b.0 56 ffff;" \
+       "pci w $b.0 104 ffffffff; pci w $b.0 110 ffffffff;" \
+       "pci w $b.0 130 ffffffff\0" \
+ "pciecfg=pci d $b.0 0 20; pci d $b.0 100 e; pci d $b.0 400 69\0"      \
+ "pcie1err=setenv a e000a; run pcieerr\0"      \
+ "pcie2err=setenv a e0009; run pcieerr\0"      \
+ "pcie3err=setenv a e000b; run pcieerr\0"      \
+ "pcie1errc=setenv a e000a; run pcieerrc\0"    \
+ "pcie2errc=setenv a e0009; run pcieerrc\0"    \
+ "pcie3errc=setenv a e000b; run pcieerrc\0"
+#else
+#define        PCIE_ENV ""
+#endif
+
+#if defined(CONFIG_PCI1)
+#define PCI_ENV \
+ "pcireg=md ${a}000 3; echo o;md ${a}c00 25; echo i; md ${a}da0 15;" \
+       "echo e;md ${a}e00 9\0"                 \
+ "pci1regs=setenv a e0008; run pcireg\0"       \
+ "pcierr=md ${a}e00 8; pci d.b $b.0 7 1; pci d.w $b.0 1e 1;" \
+       "pci d.w $b.0 56 1\0"                   \
+ "pcierrc=mw ${a}e00 ffffffff; pci w.b $b.0 7 ff; pci w.w $b.0 1e ffff;" \
+       "pci w.w $b.0 56 ffff\0"                \
+ "pci1err=setenv a e0008; run pcierr\0"                \
+ "pci1errc=setenv a e0008; run pcierrc\0"
+#else
+#define        PCI_ENV ""
+#endif
+
+#if defined(CONFIG_TSEC_ENET)
+#define ENET_ENV \
+ "enetreg1=md ${a}000 2; md ${a}010 9; md ${a}050 4; md ${a}08c 1;" \
+       "md ${a}098 2\0" \
+ "enetregt=echo t;md ${a}100 6; md ${a}140 2; md ${a}180 10; md ${a}200 10\0" \
+ "enetregr=echo r;md ${a}300 6; md ${a}330 5; md ${a}380 10; md ${a}400 10\0" \
+ "enetregm=echo mac;md ${a}500 5; md ${a}520 28;echo fifo;md ${a}a00 1;" \
+       "echo mib;md ${a}680 31\0" \
+ "enetreg=run enetreg1; run enetregm; run enetregt; run enetregr\0" \
+ "enet1regs=setenv a e0024; run enetreg\0" \
+ "enet3regs=setenv a e0026; run enetreg\0"
+#else
+#define ENET_ENV ""
+#endif
+
+#define        CONFIG_EXTRA_ENV_SETTINGS               \
+ "netdev=eth0\0"                               \
+ "consoledev=ttyS0\0"                          \
+ "ramdiskaddr=2000000\0"                       \
+ "ramdiskfile=8544ds_tmt/ramdisk.uboot\0"      \
+ "fdtaddr=400000\0"                            \
+ "fdtfile=8544ds_tmt/mpc8544ds.dtb\0"          \
+ "eoi=mw e00400b0 0\0"                                 \
+ "iack=md e00400a0 1\0"                        \
+ "ddrreg=md ${a}000 8; md ${a}080 8;md ${a}100 d; md ${a}140 4; md ${a}bf0 4;" \
+       "md ${a}e00 3; md ${a}e20 3; md ${a}e40 7; md ${a}f00 5\0" \
+ "ddrregs=setenv a e0002; run ddrreg\0"        \
+ "gureg=md ${a}000 2c; md ${a}0b0 1; md ${a}0c0 1; md ${a}b20 3;" \
+       "md ${a}e00 1; md ${a}e60 1; md ${a}ef0 15\0"   \
+ "guregs=setenv a e00e0; run gureg\0"          \
+ "ecmreg=md ${a}000 1; md ${a}010 1; md ${a}bf8 2; md ${a}e00 6\0" \
+ "ecmregs=setenv a e0001; run ecmreg\0"        \
+ PCIE_ENV      \
+ PCI_ENV       \
+ ENET_ENV
+
+
+#define CONFIG_NFSBOOTCOMMAND          \
+ "setenv bootargs root=/dev/nfs rw "   \
+ "nfsroot=$serverip:$rootpath "                \
+ "ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off " \
+ "console=$consoledev,$baudrate $othbootargs;" \
+ "tftp $loadaddr $bootfile;"           \
+ "tftp $fdtaddr $fdtfile;"             \
+ "bootm $loadaddr - $fdtaddr"
+
+
+#define CONFIG_RAMBOOTCOMMAND          \
+ "setenv bootargs root=/dev/ram rw "   \
+ "console=$consoledev,$baudrate $othbootargs;" \
+ "tftp $ramdiskaddr $ramdiskfile;"     \
+ "tftp $loadaddr $bootfile;"           \
+ "tftp $fdtaddr $fdtfile;"             \
+ "bootm $loadaddr $ramdiskaddr $fdtaddr"
+
+#define CONFIG_BOOTCOMMAND             \
+ "setenv bootargs root=/dev/sda3 rw "  \
+ "console=$consoledev,$baudrate $othbootargs;" \
+ "tftp $loadaddr $bootfile;"           \
+ "tftp $fdtaddr $fdtfile;"             \
+ "bootm $loadaddr - $fdtaddr"
+
+#endif /* __CONFIG_H */
index 7c4849fadfb2e1a0b18d745d30125dddbd4ec524..680009d6006aa366ef681a46517dcc33e8f7cd86 100644 (file)
 #define CONFIG_MPC8548         1       /* MPC8548 specific */
 #define CONFIG_MPC8548CDS      1       /* MPC8548CDS board specific */
 
-#undef CONFIG_PCI
+#define CONFIG_PCI
 #define CONFIG_TSEC_ENET               /* tsec ethernet support */
 #define CONFIG_ENV_OVERWRITE
 #define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
 #define CONFIG_DDR_DLL                 /* possible DLL fix needed */
-#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
+#undef CONFIG_DDR_2T_TIMING            /* Sets the 2T timing bit */
 
 #define CONFIG_DDR_ECC                 /* only for ECC DDR module */
 #define CONFIG_ECC_INIT_VIA_DDRCONTROLLER      /* DDR controller or DMA? */
@@ -340,22 +340,34 @@ extern unsigned long get_clock_freq(void);
 
 /*
  * General PCI
- * Addresses are mapped 1-1.
+ * Memory space is mapped 1-1, but I/O space must start from 0.
  */
 #define CFG_PCI1_MEM_BASE      0x80000000
 #define CFG_PCI1_MEM_PHYS      CFG_PCI1_MEM_BASE
-#define CFG_PCI1_MEM_SIZE      0x20000000      /* 512M */
+#define CFG_PCI1_MEM_SIZE      0x10000000      /* 256M */
 #define CFG_PCI1_IO_BASE       0x00000000
 #define CFG_PCI1_IO_PHYS       0xe2000000
-#define CFG_PCI1_IO_SIZE       0x00100000      /* 1M */
+#define CFG_PCI1_IO_SIZE       0x00800000      /* 8M */
 
-#define CFG_PCI2_MEM_BASE      0xa0000000
+#define CFG_PCI2_MEM_BASE      0x90000000
 #define CFG_PCI2_MEM_PHYS      CFG_PCI2_MEM_BASE
-#define CFG_PCI2_MEM_SIZE      0x20000000      /* 512M */
+#define CFG_PCI2_MEM_SIZE      0x10000000      /* 256M */
 #define CFG_PCI2_IO_BASE       0x00000000
-#define CFG_PCI2_IO_PHYS       0xe2100000
-#define CFG_PCI2_IO_SIZE       0x00100000      /* 1M */
+#define CFG_PCI2_IO_PHYS       0xe2800000
+#define CFG_PCI2_IO_SIZE       0x00800000      /* 8M */
 
+#define CFG_PEX_MEM_BASE       0xa0000000
+#define CFG_PEX_MEM_PHYS       CFG_PEX_MEM_BASE
+#define CFG_PEX_MEM_SIZE       0x20000000      /* 512M */
+#define CFG_PEX_IO_BASE                0x00000000
+#define CFG_PEX_IO_PHYS                0xe3000000
+#define CFG_PEX_IO_SIZE                0x01000000      /* 16M */
+
+/*
+ * RapidIO MMU
+ */
+#define CFG_RIO_MEM_BASE       0xC0000000
+#define CFG_RIO_MEM_SIZE       0x20000000      /* 512M */
 
 #if defined(CONFIG_PCI)
 
index 835bf5cb64e6a27613c396e044403031a6d4a9db..21e663768059e23496457b3c02a9267e0caa4f17 100644 (file)
 
 /*
  * General PCI
- * Addresses are mapped 1-1.
+ * Memory space is mapped 1-1, but I/O space must start from 0.
  */
 #define CFG_PCI1_MEM_BASE      0x80000000
 #define CFG_PCI1_MEM_PHYS      CFG_PCI1_MEM_BASE
 #define CFG_PCI1_MEM_SIZE      0x20000000      /* 512M */
-#define CFG_PCI1_IO_BASE       0xe2000000
-#define CFG_PCI1_IO_PHYS       CFG_PCI1_IO_BASE
-#define CFG_PCI1_IO_SIZE       0x1000000       /* 16M */
+#define CFG_PCI1_IO_BASE       0x00000000
+#define CFG_PCI1_IO_PHYS       0xe2000000
+#define CFG_PCI1_IO_SIZE       0x100000        /* 1M */
 
 #if defined(CONFIG_PCI)
 
diff --git a/include/configs/MPC8568MDS.h b/include/configs/MPC8568MDS.h
new file mode 100644 (file)
index 0000000..3f65644
--- /dev/null
@@ -0,0 +1,505 @@
+/*
+ * Copyright 2004-2007 Freescale Semiconductor.
+ *
+ * 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
+ */
+
+/*
+ * mpc8568mds board configuration file
+ */
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* High Level Configuration Options */
+#define CONFIG_BOOKE           1       /* BOOKE */
+#define CONFIG_E500                    1       /* BOOKE e500 family */
+#define CONFIG_MPC85xx         1       /* MPC8540/60/55/41/48/68 */
+#define CONFIG_MPC8568         1       /* MPC8568 specific */
+#define CONFIG_MPC8568MDS      1       /* MPC8568MDS board specific */
+
+#undef CONFIG_PCI
+#define CONFIG_TSEC_ENET               /* tsec ethernet support */
+#define CONFIG_ENV_OVERWRITE
+#define CONFIG_SPD_EEPROM              /* Use SPD EEPROM for DDR setup*/
+#define CONFIG_DDR_DLL                 /* possible DLL fix needed */
+/*#define CONFIG_DDR_2T_TIMING          Sets the 2T timing bit */
+
+/*#define CONFIG_DDR_ECC*/                     /* only for ECC DDR module */
+/*#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER*/  /*       DDR controller or DMA? */
+#define CONFIG_MEM_INIT_VALUE          0xDeadBeef
+
+
+/*
+ * When initializing flash, if we cannot find the manufacturer ID,
+ * assume this is the AMD flash associated with the MDS board.
+ * This allows booting from a promjet.
+ */
+#define CONFIG_ASSUME_AMD_FLASH
+
+#define MPC85xx_DDR_SDRAM_CLK_CNTL     /* 85xx has clock control reg */
+
+#ifndef __ASSEMBLY__
+extern unsigned long get_clock_freq(void);
+#endif                                           /*Replace a call to get_clock_freq (after it is implemented)*/
+#define CONFIG_SYS_CLK_FREQ    66000000 /*TODO: restore if wanting to read from BCSR: get_clock_freq()*/ /* sysclk for MPC85xx */
+
+/*
+ * These can be toggled for performance analysis, otherwise use default.
+ */
+/*#define CONFIG_L2_CACHE*/                        /* toggle L2 cache  */
+#define CONFIG_BTB                                             /* toggle branch predition */
+#define CONFIG_ADDR_STREAMING              /* toggle addr streaming   */
+
+/*
+ * Only possible on E500 Version 2 or newer cores.
+ */
+#define CONFIG_ENABLE_36BIT_PHYS       1
+
+
+#define CONFIG_BOARD_EARLY_INIT_F      1       /* Call board_pre_init */
+
+#undef CFG_DRAM_TEST                   /* memory test, takes time */
+#define CFG_MEMTEST_START      0x00200000      /* memtest works on */
+#define CFG_MEMTEST_END                0x00400000
+
+/*
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ */
+#define CFG_CCSRBAR_DEFAULT    0xff700000      /* CCSRBAR Default */
+#define CFG_CCSRBAR            0xe0000000      /* relocated CCSRBAR */
+#define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR */
+
+/*
+ * DDR Setup
+ */
+#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory*/
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+
+#define SPD_EEPROM_ADDRESS     0x51            /* DDR DIMM */
+
+/*
+ * Make sure required options are set
+ */
+#ifndef CONFIG_SPD_EEPROM
+#error ("CONFIG_SPD_EEPROM is required")
+#endif
+
+#undef CONFIG_CLOCKS_IN_MHZ
+
+
+/*
+ * Local Bus Definitions
+ */
+
+/*
+ * FLASH on the Local Bus
+ * Two banks, 8M each, using the CFI driver.
+ * Boot from BR0/OR0 bank at 0xff00_0000
+ * Alternate BR1/OR1 bank at 0xff80_0000
+ *
+ * BR0, BR1:
+ *    Base address 0 = 0xff00_0000 = BR0[0:16] = 1111 1111 0000 0000 0
+ *    Base address 1 = 0xff80_0000 = BR1[0:16] = 1111 1111 1000 0000 0
+ *    Port Size = 16 bits = BRx[19:20] = 10
+ *    Use GPCM = BRx[24:26] = 000
+ *    Valid = BRx[31] = 1
+ *
+ * 0    4    8    12   16   20   24   28
+ * 1111 1111 1000 0000 0001 0000 0000 0001 = ff801001    BR0
+ * 1111 1111 0000 0000 0001 0000 0000 0001 = ff001001    BR1
+ *
+ * OR0, OR1:
+ *    Addr Mask = 8M = ORx[0:16] = 1111 1111 1000 0000 0
+ *    Reserved ORx[17:18] = 11, confusion here?
+ *    CSNT = ORx[20] = 1
+ *    ACS = half cycle delay = ORx[21:22] = 11
+ *    SCY = 6 = ORx[24:27] = 0110
+ *    TRLX = use relaxed timing = ORx[29] = 1
+ *    EAD = use external address latch delay = OR[31] = 1
+ *
+ * 0    4    8    12   16   20   24   28
+ * 1111 1111 1000 0000 0110 1110 0110 0101 = ff806e65    ORx
+ */
+#define CFG_BCSR_BASE          0xf8000000
+
+#define CFG_FLASH_BASE         0xfe000000      /* start of FLASH 32M */
+
+/*Chip select 0 - Flash*/
+#define CFG_BR0_PRELIM         0xfe001001
+#define        CFG_OR0_PRELIM          0xfe006ff7
+
+/*Chip slelect 1 - BCSR*/
+#define CFG_BR1_PRELIM         0xf8000801
+#define        CFG_OR1_PRELIM          0xffffe9f7
+
+/*#define CFG_FLASH_BANKS_LIST {0xff800000, CFG_FLASH_BASE} */
+#define CFG_MAX_FLASH_BANKS            1               /* number of banks */
+#define CFG_MAX_FLASH_SECT             512             /* sectors per device */
+#undef CFG_FLASH_CHECKSUM
+#define CFG_FLASH_ERASE_TOUT   60000   /* Flash Erase Timeout (ms) */
+#define CFG_FLASH_WRITE_TOUT   500             /* Flash Write Timeout (ms) */
+
+#define CFG_MONITOR_BASE       TEXT_BASE       /* start of monitor */
+
+#define CFG_FLASH_CFI_DRIVER
+#define CFG_FLASH_CFI
+#define CFG_FLASH_EMPTY_INFO
+
+
+/*
+ * SDRAM on the LocalBus
+ */
+#define CFG_LBC_SDRAM_BASE     0xf0000000      /* Localbus SDRAM        */
+#define CFG_LBC_SDRAM_SIZE     64                      /* LBC SDRAM is 64MB */
+
+
+/*Chip select 2 - SDRAM*/
+#define CFG_BR2_PRELIM      0xf0001861
+#define CFG_OR2_PRELIM         0xfc006901
+
+#define CFG_LBC_LCRR           0x00030004      /* LB clock ratio reg */
+#define CFG_LBC_LBCR           0x00000000      /* LB config reg */
+#define CFG_LBC_LSRT           0x20000000      /* LB sdram refresh timer */
+#define CFG_LBC_MRTPR          0x00000000      /* LB refresh timer prescal*/
+
+/*
+ * LSDMR masks
+ */
+#define CFG_LBC_LSDMR_RFEN     (1 << (31 -  1))
+#define CFG_LBC_LSDMR_BSMA1516 (3 << (31 - 10))
+#define CFG_LBC_LSDMR_BSMA1617 (4 << (31 - 10))
+#define CFG_LBC_LSDMR_RFCR16   (7 << (31 - 16))
+#define CFG_LBC_LSDMR_PRETOACT7        (7 << (31 - 19))
+#define CFG_LBC_LSDMR_ACTTORW7 (7 << (31 - 22))
+#define CFG_LBC_LSDMR_ACTTORW6 (6 << (31 - 22))
+#define CFG_LBC_LSDMR_BL8      (1 << (31 - 23))
+#define CFG_LBC_LSDMR_WRC4     (0 << (31 - 27))
+#define CFG_LBC_LSDMR_CL3      (3 << (31 - 31))
+
+#define CFG_LBC_LSDMR_OP_NORMAL        (0 << (31 - 4))
+#define CFG_LBC_LSDMR_OP_ARFRSH        (1 << (31 - 4))
+#define CFG_LBC_LSDMR_OP_SRFRSH        (2 << (31 - 4))
+#define CFG_LBC_LSDMR_OP_MRW   (3 << (31 - 4))
+#define CFG_LBC_LSDMR_OP_PRECH (4 << (31 - 4))
+#define CFG_LBC_LSDMR_OP_PCHALL        (5 << (31 - 4))
+#define CFG_LBC_LSDMR_OP_ACTBNK        (6 << (31 - 4))
+#define CFG_LBC_LSDMR_OP_RWINV (7 << (31 - 4))
+
+/*
+ * Common settings for all Local Bus SDRAM commands.
+ * At run time, either BSMA1516 (for CPU 1.1)
+ *                  or BSMA1617 (for CPU 1.0) (old)
+ * is OR'ed in too.
+ */
+#define CFG_LBC_LSDMR_COMMON   ( CFG_LBC_LSDMR_RFCR16          \
+                               | CFG_LBC_LSDMR_PRETOACT7       \
+                               | CFG_LBC_LSDMR_ACTTORW7        \
+                               | CFG_LBC_LSDMR_BL8             \
+                               | CFG_LBC_LSDMR_WRC4            \
+                               | CFG_LBC_LSDMR_CL3             \
+                               | CFG_LBC_LSDMR_RFEN            \
+                               )
+
+/*
+ * The bcsr registers are connected to CS3 on MDS.
+ * The new memory map places bcsr at 0xf8000000.
+ *
+ * For BR3, need:
+ *    Base address of 0xf8000000 = BR[0:16] = 1111 1000 0000 0000 0
+ *    port-size = 8-bits  = BR[19:20] = 01
+ *    no parity checking  = BR[21:22] = 00
+ *    GPMC for MSEL       = BR[24:26] = 000
+ *    Valid               = BR[31]    = 1
+ *
+ * 0    4    8    12   16   20   24   28
+ * 1111 1000 0000 0000 0000 1000 0000 0001 = f8000801
+ *
+ * For OR3, need:
+ *    1 MB mask for AM,   OR[0:16]  = 1111 1111 1111 0000 0
+ *    disable buffer ctrl OR[19]    = 0
+ *    CSNT                OR[20]    = 1
+ *    ACS                 OR[21:22] = 11
+ *    XACS                OR[23]    = 1
+ *    SCY 15 wait states  OR[24:27] = 1111     max is suboptimal but safe
+ *    SETA                OR[28]    = 0
+ *    TRLX                OR[29]    = 1
+ *    EHTR                OR[30]    = 1
+ *    EAD extra time      OR[31]    = 1
+ *
+ * 0    4    8    12   16   20   24   28
+ * 1111 1111 1111 0000 0000 1111 1111 0111 = fff00ff7
+ */
+#define CFG_BCSR (0xf8000000)
+
+/*Chip slelect 4 - PIB*/
+#define CFG_BR4_PRELIM   0xf8008801
+#define CFG_OR4_PRELIM   0xffffe9f7
+
+/*Chip select 5 - PIB*/
+#define CFG_BR5_PRELIM  0xf8010801
+#define CFG_OR5_PRELIM  0xffff69f7
+
+#define CONFIG_L1_INIT_RAM
+#define CFG_INIT_RAM_LOCK      1
+#define CFG_INIT_RAM_ADDR      0xe4010000      /* Initial RAM address */
+#define CFG_INIT_RAM_END       0x4000      /* End of used area in RAM */
+
+#define CFG_GBL_DATA_SIZE      128         /* 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_MONITOR_LEN                (256 * 1024) /* Reserve 256 kB for Mon */
+#define CFG_MALLOC_LEN         (128 * 1024)    /* Reserved for malloc */
+
+/* Serial Port */
+#define CONFIG_CONS_INDEX              1
+#undef CONFIG_SERIAL_SOFTWARE_FIFO
+#define CFG_NS16550
+#define CFG_NS16550_SERIAL
+#define CFG_NS16550_REG_SIZE    1
+#define CFG_NS16550_CLK                get_bus_freq(0)
+
+#define CFG_BAUDRATE_TABLE  \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200}
+
+#define CFG_NS16550_COM1        (CFG_CCSRBAR+0x4500)
+#define CFG_NS16550_COM2        (CFG_CCSRBAR+0x4600)
+
+/* Use the HUSH parser*/
+#define CFG_HUSH_PARSER
+#ifdef  CFG_HUSH_PARSER
+#define CFG_PROMPT_HUSH_PS2 "> "
+#endif
+
+/* pass open firmware flat tree */
+#define CONFIG_OF_FLAT_TREE    1
+#define CONFIG_OF_BOARD_SETUP  1
+
+/* maximum size of the flat tree (8K) */
+#define OF_FLAT_TREE_MAX_SIZE  8192
+
+#define OF_CPU                 "PowerPC,8568@0"
+#define OF_SOC                 "soc8568@e0000000"
+#define OF_TBCLK               (bd->bi_busfreq / 8)
+#define OF_STDOUT_PATH         "/soc8568@e0000000/serial@4600"
+
+/*
+ * I2C
+ */
+#define CONFIG_FSL_I2C         /* Use FSL common I2C driver */
+#define CONFIG_HARD_I2C                /* I2C with hardware support*/
+#undef CONFIG_SOFT_I2C                 /* I2C bit-banged */
+#define CFG_I2C_SPEED          400000  /* I2C speed and slave address */
+#define CFG_I2C_EEPROM_ADDR    0x57
+#define CFG_I2C_SLAVE          0x7F
+#define CFG_I2C_NOPROBES        {0x69} /* Don't probe these addrs */
+#define CFG_I2C_OFFSET         0x3000
+
+/*
+ * General PCI
+ * Memory Addresses are mapped 1-1. I/O is mapped from 0
+ */
+#define CFG_PCI1_MEM_BASE      0x80000000
+#define CFG_PCI1_MEM_PHYS      CFG_PCI1_MEM_BASE
+#define CFG_PCI1_MEM_SIZE      0x10000000      /* 256M */
+#define CFG_PCI1_IO_BASE       0x00000000
+#define CFG_PCI1_IO_PHYS       0xe2000000
+#define CFG_PCI1_IO_SIZE       0x00800000      /* 8M */
+
+#define CFG_PEX_MEM_BASE       0xa0000000
+#define CFG_PEX_MEM_PHYS       CFG_PEX_MEM_BASE
+#define CFG_PEX_MEM_SIZE       0x10000000      /* 256M */
+#define CFG_PEX_IO_BASE                0x00000000
+#define CFG_PEX_IO_PHYS                0xe2800000
+#define CFG_PEX_IO_SIZE                0x00800000      /* 8M */
+
+#define CFG_SRIO_MEM_BASE      0xc0000000
+
+#if defined(CONFIG_PCI)
+
+#define CONFIG_NET_MULTI
+#define CONFIG_PCI_PNP                 /* do pci plug-and-play */
+
+#undef CONFIG_EEPRO100
+#undef CONFIG_TULIP
+
+#undef CONFIG_PCI_SCAN_SHOW            /* show pci devices on startup */
+#define CFG_PCI_SUBSYS_VENDORID 0x1057  /* Motorola */
+
+#endif /* CONFIG_PCI */
+
+
+#if defined(CONFIG_TSEC_ENET)
+
+#ifndef CONFIG_NET_MULTI
+#define CONFIG_NET_MULTI       1
+#endif
+
+#define CONFIG_MII             1       /* MII PHY management */
+#define CONFIG_MPC85XX_TSEC1   1
+#define CONFIG_MPC85XX_TSEC1_NAME      "eTSEC0"
+#define CONFIG_MPC85XX_TSEC2   1
+#define CONFIG_MPC85XX_TSEC2_NAME      "eTSEC1"
+#undef  CONFIG_MPC85XX_TSEC3
+#undef  CONFIG_MPC85XX_TSEC4
+#undef  CONFIG_MPC85XX_FEC
+
+#define TSEC1_PHY_ADDR         2
+#define TSEC2_PHY_ADDR         3
+
+#define TSEC1_PHYIDX           0
+#define TSEC2_PHYIDX           0
+
+/* Options are: eTSEC[0-3] */
+#define CONFIG_ETHPRIME                "eTSEC0"
+
+#endif /* CONFIG_TSEC_ENET */
+
+/*
+ * Environment
+ */
+#define CFG_ENV_IS_IN_FLASH    1
+#define CFG_ENV_ADDR           (CFG_MONITOR_BASE + 0x40000)
+#define CFG_ENV_SECT_SIZE      0x40000 /* 256K(one sector) for env */
+#define CFG_ENV_SIZE           0x2000
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change */
+
+#if defined(CONFIG_PCI)
+#define  CONFIG_COMMANDS       (CONFIG_CMD_DFL \
+                               | CFG_CMD_PCI \
+                               | CFG_CMD_PING \
+                               | CFG_CMD_I2C \
+                               | CFG_CMD_MII)
+#else
+#define  CONFIG_COMMANDS       (CONFIG_CMD_DFL \
+                               | CFG_CMD_PING \
+                               | CFG_CMD_I2C \
+                               | CFG_CMD_MII)
+#endif
+#include <cmd_confdefs.h>
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory */
+#define CFG_LOAD_ADDR  0x2000000       /* default load address */
+#define CFG_PROMPT     "=> "           /* Monitor Command Prompt */
+#if (CONFIG_COMMANDS & CFG_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_HZ         1000            /* decrementer freq: 1ms ticks */
+
+/*
+ * 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*/
+
+/* Cache Configuration */
+#define CFG_DCACHE_SIZE        32768
+#define CFG_CACHELINE_SIZE     32
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5       /*log base 2 of the above value*/
+#endif
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02            /* Software reboot */
+
+#if (CONFIG_COMMANDS & CFG_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
+
+/*
+ * Environment Configuration
+ */
+
+/* The mac addresses for all ethernet interface */
+#if defined(CONFIG_TSEC_ENET)
+#define CONFIG_ETHADDR   00:E0:0C:00:00:FD
+#define CONFIG_HAS_ETH1
+#define CONFIG_ETH1ADDR  00:E0:0C:00:01:FD
+#define CONFIG_HAS_ETH2
+#define CONFIG_ETH2ADDR  00:E0:0C:00:02:FD
+#endif
+
+#define CONFIG_IPADDR    192.168.1.253
+
+#define CONFIG_HOSTNAME  unknown
+#define CONFIG_ROOTPATH  /nfsroot
+#define CONFIG_BOOTFILE  your.uImage
+
+#define CONFIG_SERVERIP  192.168.1.1
+#define CONFIG_GATEWAYIP 192.168.1.1
+#define CONFIG_NETMASK   255.255.255.0
+
+#define CONFIG_LOADADDR  200000   /*default location for tftp and bootm*/
+
+#define CONFIG_BOOTDELAY 10       /* -1 disables auto-boot */
+#undef  CONFIG_BOOTARGS           /* the boot command will set bootargs*/
+
+#define CONFIG_BAUDRATE        115200
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+   "netdev=eth0\0"                                                      \
+   "consoledev=ttyS0\0"                                                 \
+   "ramdiskaddr=600000\0"                                               \
+   "ramdiskfile=your.ramdisk.u-boot\0"                                 \
+   "fdtaddr=400000\0"                                                  \
+   "fdtfile=your.fdt.dtb\0"                                            \
+   "nfsargs=setenv bootargs root=/dev/nfs rw "                         \
+      "nfsroot=$serverip:$rootpath "                                   \
+      "ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off " \
+      "console=$consoledev,$baudrate $othbootargs\0"                   \
+   "ramargs=setenv bootargs root=/dev/ram rw "                         \
+      "console=$consoledev,$baudrate $othbootargs\0"                   \
+
+
+#define CONFIG_NFSBOOTCOMMAND                                          \
+   "run nfsargs;"                                                      \
+   "tftp $loadaddr $bootfile;"                                          \
+   "tftp $fdtaddr $fdtfile;"                                           \
+   "bootm $loadaddr - $fdtaddr"
+
+
+#define CONFIG_RAMBOOTCOMMAND \
+   "run ramargs;"                                                      \
+   "tftp $ramdiskaddr $ramdiskfile;"                                    \
+   "tftp $loadaddr $bootfile;"                                          \
+   "bootm $loadaddr $ramdiskaddr"
+
+#define CONFIG_BOOTCOMMAND  CONFIG_NFSBOOTCOMMAND
+
+#endif /* __CONFIG_H */
index 8da29c4afc01659c54fc730f976c76114aed3142..a12c8da13eccfde105145355259467446aabf199 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * (C) Copyright 2006 Detlev Zundel, dzu@denx.de
+ * (C) Copyright 2006, 2007 Detlev Zundel, dzu@denx.de
  * (C) Copyright 2005
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
 /*
  * NAND flash support
  */
-#define CFG_NAND_LEGACY
-
 #define CFG_MAX_NAND_DEVICE    1
-#define NAND_ChipID_UNKNOWN    0x00
-#define SECTORSIZE             512
-#define NAND_MAX_FLOORS                1
 #define NAND_MAX_CHIPS         1
-#define ADDR_PAGE              2
-#define ADDR_COLUMN_PAGE       3
-#define ADDR_COLUMN            1
-#define NAND_NO_RB
-
 
 /*-----------------------------------------------------------------------
  * SYPCR - System Protection Control                                   11-9
index 9c241e67e732359d1f2568f3a1d6006f0b03d53e..7d91a0160c4de04d0b10d580c70689f6a42a397e 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#undef CFG_IPBSPEED_133                /* define for 133MHz speed */
+#undef CFG_IPBCLK_EQUALS_XLBCLK                /* define for 133MHz speed */
 #endif
 /*
  * I2C configuration
diff --git a/include/configs/SBC8560.h b/include/configs/SBC8560.h
deleted file mode 100644 (file)
index 8b46a17..0000000
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * (C) Copyright 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
- */
-
-/* mpc8560ads board configuration file */
-/* please refer to doc/README.mpc85xx for more info */
-/* make sure you change the MAC address and other network params first,
- * search for CONFIG_ETHADDR,CONFIG_SERVERIP,etc in this file
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-
-#if XXX
-#define DEBUG                /* General debug */
-#define ET_DEBUG
-#endif
-#define TSEC_DEBUG
-
-/* High Level Configuration Options */
-#define CONFIG_BOOKE           1       /* BOOKE                        */
-#define CONFIG_E500            1       /* BOOKE e500 family            */
-#define CONFIG_MPC85xx         1       /* MPC8540/MPC8560              */
-#define CONFIG_MPC85xx_REV1    1       /* MPC85xx Rev 1.0 chip         */
-
-
-#define CONFIG_CPM2            1       /* has CPM2 */
-#define CONFIG_SBC8560         1       /* configuration for SBC8560 board */
-
-#define CONFIG_MPC8560ADS      1       /* MPC8560ADS board specific (supplement)       */
-
-#define CONFIG_TSEC_ENET               /* tsec ethernet support        */
-#undef CONFIG_PCI                      /* pci ethernet support         */
-#undef  CONFIG_ETHER_ON_FCC            /* cpm FCC ethernet support     */
-
-
-#define CONFIG_ENV_OVERWRITE
-
-/* Using Localbus SDRAM to emulate flash before we can program the flash,
- * normally you need a flash-boot image(u-boot.bin), if so undef this.
- */
-#undef CONFIG_RAM_AS_FLASH
-
-#if defined(CONFIG_PCI_66)             /* some PCI card is 33Mhz only  */
-  #define CONFIG_SYS_CLK_FREQ  66000000/* sysclk for MPC85xx           */
-#else
-  #define CONFIG_SYS_CLK_FREQ  33000000/* most pci cards are 33Mhz     */
-#endif
-
-/* below can be toggled for performance analysis. otherwise use default */
-#define CONFIG_L2_CACHE                            /* toggle L2 cache          */
-#undef CONFIG_BTB                          /* toggle branch predition  */
-#undef CONFIG_ADDR_STREAMING               /* toggle addr streaming    */
-
-#define CONFIG_BOARD_EARLY_INIT_F 1        /* Call board_early_init_f  */
-
-#undef CFG_DRAM_TEST                       /* memory test, takes time  */
-#define CFG_MEMTEST_START      0x00200000  /* memtest region */
-#define CFG_MEMTEST_END                0x00400000
-
-#if (defined(CONFIG_PCI) && defined(CONFIG_TSEC_ENET) || \
-     defined(CONFIG_PCI) && defined(CONFIG_ETHER_ON_FCC) || \
-     defined(CONFIG_TSEC_ENET) && defined(CONFIG_ETHER_ON_FCC))
-#error "You can only use ONE of PCI Ethernet Card or TSEC Ethernet or CPM FCC."
-#endif
-
-/*
- * Base addresses -- Note these are effective addresses where the
- * actual resources get mapped (not physical addresses)
- */
-#define CFG_CCSRBAR_DEFAULT    0xff700000      /* CCSRBAR Default      */
-
-#if XXX
-  #define CFG_CCSRBAR          0xfdf00000      /* relocated CCSRBAR    */
-#else
-  #define CFG_CCSRBAR          0xff700000      /* default CCSRBAR      */
-#endif
-#define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR   */
-
-#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory  */
-#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
-#define CFG_SDRAM_SIZE         512             /* DDR is 512MB */
-#define SPD_EEPROM_ADDRESS     0x55            /*  DDR DIMM */
-
-#undef  CONFIG_DDR_ECC                         /* only for ECC DDR module      */
-#undef  CONFIG_SPD_EEPROM                      /* Use SPD EEPROM for DDR setup */
-
-#if defined(CONFIG_MPC85xx_REV1)
-  #define CONFIG_DDR_DLL                       /* possible DLL fix needed      */
-#endif
-
-#undef CONFIG_CLOCKS_IN_MHZ
-
-#if defined(CONFIG_RAM_AS_FLASH)
-  #define CFG_LBC_SDRAM_BASE   0xfc000000      /* Localbus SDRAM */
-  #define CFG_FLASH_BASE       0xf8000000      /* start of FLASH 8M  */
-  #define CFG_BR0_PRELIM       0xf8000801      /* port size 8bit */
-  #define CFG_OR0_PRELIM       0xf8000ff7      /* 8MB Flash            */
-#else /* Boot from real Flash */
-  #define CFG_LBC_SDRAM_BASE   0xf8000000      /* Localbus SDRAM */
-  #define CFG_FLASH_BASE       0xff800000      /* start of FLASH 8M    */
-  #define CFG_BR0_PRELIM       0xff800801      /* port size 8bit      */
-  #define CFG_OR0_PRELIM       0xff800ff7      /* 8MB Flash            */
-#endif
-#define CFG_LBC_SDRAM_SIZE     64              /* LBC SDRAM is 64MB    */
-
-/* local bus definitions */
-#define CFG_BR1_PRELIM         0xe4001801      /* 64M, 32-bit flash */
-#define CFG_OR1_PRELIM         0xfc000ff7
-
-#define CFG_BR2_PRELIM         0x00000000      /* CS2 not used */
-#define CFG_OR2_PRELIM         0x00000000
-
-#define CFG_BR3_PRELIM         0xf0001861      /* 64MB localbus SDRAM  */
-#define CFG_OR3_PRELIM         0xfc000cc1
-
-#if defined(CONFIG_RAM_AS_FLASH)
-  #define CFG_BR4_PRELIM       0xf4001861      /* 64M localbus SDRAM */
-#else
-  #define CFG_BR4_PRELIM       0xf8001861      /* 64M localbus SDRAM */
-#endif
-#define CFG_OR4_PRELIM         0xfc000cc1
-
-#define CFG_BR5_PRELIM         0xfc000801      /* 16M CS5 misc devices */
-#if 1
-  #define CFG_OR5_PRELIM       0xff000ff7
-#else
-  #define CFG_OR5_PRELIM       0xff0000f0
-#endif
-
-#define CFG_BR6_PRELIM         0xe0001801      /* 64M, 32-bit flash */
-#define CFG_OR6_PRELIM         0xfc000ff7
-#define CFG_LBC_LCRR           0x00030002      /* local bus freq       */
-#define CFG_LBC_LBCR           0x00000000
-#define CFG_LBC_LSRT           0x20000000
-#define CFG_LBC_MRTPR          0x20000000
-#define CFG_LBC_LSDMR_1                0x2861b723
-#define CFG_LBC_LSDMR_2                0x0861b723
-#define CFG_LBC_LSDMR_3                0x0861b723
-#define CFG_LBC_LSDMR_4                0x1861b723
-#define CFG_LBC_LSDMR_5                0x4061b723
-
-/* just hijack the MOT BCSR def for SBC8560 misc devices */
-#define CFG_BCSR               ((CFG_BR5_PRELIM & 0xff000000)|0x00400000)
-/* the size of CS5 needs to be >= 16M for TLB and LAW setups */
-
-#define CONFIG_L1_INIT_RAM
-#define CFG_INIT_RAM_LOCK      1
-#define CFG_INIT_RAM_ADDR      0x70000000      /* Initial RAM address  */
-#define CFG_INIT_RAM_END       0x4000          /* End of used area in RAM */
-
-#define CFG_GBL_DATA_SIZE      128             /* 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_MONITOR_LEN                (256 * 1024)    /* Reserve 256 kB for Mon */
-#define CFG_MALLOC_LEN         (128 * 1024)    /* Reserved for malloc */
-
-/* Serial Port */
-#undef  CONFIG_CONS_ON_SCC                     /* define if console on SCC */
-#undef CONFIG_CONS_NONE                        /* define if console on something else */
-
-#define CONFIG_CONS_INDEX     1
-#undef CONFIG_SERIAL_SOFTWARE_FIFO
-#define CFG_NS16550
-#define CFG_NS16550_SERIAL
-#define CFG_NS16550_REG_SIZE   1
-#define CFG_NS16550_CLK                1843200 /* get_bus_freq(0) */
-#define CONFIG_BAUDRATE                9600
-
-#define CFG_BAUDRATE_TABLE  \
-       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200}
-
-#define CFG_NS16550_COM1       ((CFG_BR5_PRELIM & 0xff000000)+0x00700000)
-#define CFG_NS16550_COM2       ((CFG_BR5_PRELIM & 0xff000000)+0x00800000)
-
-/* Use the HUSH parser */
-#define CFG_HUSH_PARSER
-#ifdef CFG_HUSH_PARSER
-#define CFG_PROMPT_HUSH_PS2 "> "
-#endif
-
-/* I2C */
-#define         CONFIG_HARD_I2C                /* I2C with hardware support*/
-#undef CONFIG_SOFT_I2C                 /* I2C bit-banged */
-#define CFG_I2C_SPEED          400000  /* I2C speed and slave address  */
-#define CFG_I2C_SLAVE          0x7F
-#define CFG_I2C_NOPROBES       {0x69}  /* Don't probe these addrs */
-
-#define CFG_PCI_MEM_BASE       0xC0000000
-#define CFG_PCI_MEM_PHYS       0xC0000000
-#define CFG_PCI_MEM_SIZE       0x10000000
-
-#if defined(CONFIG_TSEC_ENET)          /* TSEC Ethernet port */
-
-#  define CONFIG_NET_MULTI     1
-#  define CONFIG_MII           1       /* MII PHY management           */
-#  define CONFIG_MPC85xx_TSEC1
-#  define CONFIG_MPC85xx_TSEC1_NAME    "TSEC0"
-#  define TSEC1_PHY_ADDR       25
-#  define TSEC1_PHYIDX         0
-/* Options are: TSEC0 */
-#  define CONFIG_ETHPRIME              "TSEC0"
-
-
-#elif defined(CONFIG_ETHER_ON_FCC)     /* CPM FCC Ethernet */
-
-  #undef  CONFIG_ETHER_NONE            /* define if ether on something else */
-  #define CONFIG_ETHER_ON_FCC2         /* cpm FCC ethernet support     */
-  #define CONFIG_ETHER_INDEX   2       /* which channel for ether  */
-
-  #if (CONFIG_ETHER_INDEX == 2)
-    /*
-     * - Rx-CLK is CLK13
-     * - Tx-CLK is CLK14
-     * - Select bus for bd/buffers
-     * - Full duplex
-     */
-    #define CFG_CMXFCR_MASK    (CMXFCR_FC2 | CMXFCR_RF2CS_MSK | CMXFCR_TF2CS_MSK)
-    #define CFG_CMXFCR_VALUE   (CMXFCR_RF2CS_CLK13 | CMXFCR_TF2CS_CLK14)
-    #define CFG_CPMFCR_RAMTYPE 0
-    #define CFG_FCC_PSMR       (FCC_PSMR_FDE)
-
-  #elif (CONFIG_ETHER_INDEX == 3)
-    /* need more definitions here for FE3 */
-  #endif                               /* CONFIG_ETHER_INDEX */
-
-  #define CONFIG_MII                   /* MII PHY management */
-  #define CONFIG_BITBANGMII            /* bit-bang MII PHY management  */
-  /*
-   * GPIO pins used for bit-banged MII communications
-   */
-  #define MDIO_PORT    2               /* Port C */
-  #define MDIO_ACTIVE  (iop->pdir |=  0x00400000)
-  #define MDIO_TRISTATE        (iop->pdir &= ~0x00400000)
-  #define MDIO_READ    ((iop->pdat &  0x00400000) != 0)
-
-  #define MDIO(bit)    if(bit) iop->pdat |=  0x00400000; \
-                       else    iop->pdat &= ~0x00400000
-
-  #define MDC(bit)     if(bit) iop->pdat |=  0x00200000; \
-                       else    iop->pdat &= ~0x00200000
-
-  #define MIIDELAY     udelay(1)
-
-#endif
-
-/*-----------------------------------------------------------------------
- * FLASH and environment organization
- */
-
-#define CFG_FLASH_CFI          1       /* Flash is CFI conformant              */
-#define CFG_FLASH_CFI_DRIVER   1       /* Use the common driver                */
-#if 0
-#define CFG_FLASH_USE_BUFFER_WRITE 1    /* use buffered writes (20x faster)     */
-#define CFG_FLASH_PROTECTION           /* use hardware protection              */
-#endif
-#define CFG_MAX_FLASH_SECT     64      /* max number of sectors on one chip    */
-#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks           */
-
-#undef CFG_FLASH_CHECKSUM
-#define CFG_FLASH_ERASE_TOUT   200000          /* Timeout for Flash Erase (in ms)      */
-#define CFG_FLASH_WRITE_TOUT   50000           /* Timeout for Flash Write (in ms)      */
-
-#define CFG_MONITOR_BASE       TEXT_BASE       /* start of monitor     */
-
-#if 0
-/* XXX This doesn't work and I don't want to fix it */
-#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
-  #define CFG_RAMBOOT
-#else
-  #undef  CFG_RAMBOOT
-#endif
-#endif
-
-/* Environment */
-#if !defined(CFG_RAMBOOT)
-  #if defined(CONFIG_RAM_AS_FLASH)
-    #define CFG_ENV_IS_NOWHERE
-    #define CFG_ENV_ADDR       (CFG_FLASH_BASE + 0x100000)
-    #define CFG_ENV_SIZE       0x2000
-  #else
-    #define CFG_ENV_IS_IN_FLASH        1
-    #define CFG_ENV_SECT_SIZE  0x20000 /* 128K(one sector) for env */
-    #define CFG_ENV_ADDR       (CFG_MONITOR_BASE - CFG_ENV_SECT_SIZE)
-    #define CFG_ENV_SIZE       0x2000 /* CFG_ENV_SECT_SIZE */
-  #endif
-#else
-  #define CFG_NO_FLASH         1       /* Flash is not usable now      */
-  #define CFG_ENV_IS_NOWHERE   1       /* Store ENV in memory only     */
-  #define CFG_ENV_ADDR         (CFG_MONITOR_BASE - 0x1000)
-  #define CFG_ENV_SIZE         0x2000
-#endif
-
-#define CONFIG_BOOTARGS "root=/dev/nfs rw nfsroot=192.168.0.251:/tftpboot ip=192.168.0.105:192.168.0.251::255.255.255.0:sbc8560:eth0:off console=ttyS0,9600"
-/*#define CONFIG_BOOTARGS      "root=/dev/ram rw console=ttyS0,115200"*/
-#define CONFIG_BOOTCOMMAND     "bootm 0xff800000 0xffa00000"
-#define CONFIG_BOOTDELAY       5       /* -1 disable autoboot */
-
-#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
-#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
-
-#if defined(CFG_RAMBOOT) || defined(CONFIG_RAM_AS_FLASH)
-  #if defined(CONFIG_PCI)
-    #define  CONFIG_COMMANDS   ((CONFIG_CMD_DFL | CFG_CMD_PCI | \
-                               CFG_CMD_PING | CFG_CMD_I2C) & \
-                                ~(CFG_CMD_ENV | \
-                                 CFG_CMD_LOADS ))
-  #elif (defined(CONFIG_TSEC_ENET) || defined(CONFIG_ETHER_ON_FCC))
-    #define  CONFIG_COMMANDS   ((CONFIG_CMD_DFL | CFG_CMD_MII | \
-                               CFG_CMD_PING | CFG_CMD_I2C) & \
-                               ~(CFG_CMD_ENV))
-  #endif
-#else
-  #if defined(CONFIG_PCI)
-    #define  CONFIG_COMMANDS   (CONFIG_CMD_DFL | CFG_CMD_PCI | \
-                               CFG_CMD_PING | CFG_CMD_I2C)
-  #elif (defined(CONFIG_TSEC_ENET) || defined(CONFIG_ETHER_ON_FCC))
-    #define  CONFIG_COMMANDS   (CONFIG_CMD_DFL | CFG_CMD_MII | \
-                               CFG_CMD_PING | CFG_CMD_I2C)
-  #endif
-#endif
-
-#include <cmd_confdefs.h>
-
-#undef CONFIG_WATCHDOG                 /* watchdog disabled            */
-
-/*
- * Miscellaneous configurable options
- */
-#define CFG_LONGHELP                   /* undef to save memory         */
-#define CFG_PROMPT     "SBC8560=> " /* Monitor Command Prompt  */
-#if (CONFIG_COMMANDS & CFG_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  0x1000000       /* default load address */
-#define CFG_HZ         1000            /* decrementer freq: 1 ms ticks */
-
-/*
- * 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 */
-
-/* Cache Configuration */
-#define CFG_DCACHE_SIZE                32768
-#define CFG_CACHELINE_SIZE     32
-#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
-  #define CFG_CACHELINE_SHIFT  5       /* log base 2 of the above value */
-#endif
-
-/*
- * Internal Definitions
- *
- * Boot Flags
- */
-#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
-#define BOOTFLAG_WARM  0x02            /* Software reboot              */
-
-#if (CONFIG_COMMANDS & CFG_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
-
-/*Note: change below for your network setting!!! */
-#if defined(CONFIG_TSEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
-#  define CONFIG_ETHADDR       00:vv:ww:xx:yy:8a
-#  define CONFIG_HAS_ETH1
-#  define CONFIG_ETH1ADDR      00:vv:ww:xx:yy:8b
-#  define CONFIG_HAS_ETH2
-#  define CONFIG_ETH2ADDR      00:vv:ww:xx:yy:8c
-#endif
-
-#define CONFIG_SERVERIP                YourServerIP
-#define CONFIG_IPADDR          YourTargetIP
-#define CONFIG_GATEWAYIP       YourGatewayIP
-#define CONFIG_NETMASK         255.255.255.0
-#define CONFIG_HOSTNAME                SBC8560
-#define CONFIG_ROOTPATH                YourRootPath
-#define CONFIG_BOOTFILE                YourImageName
-
-#endif /* __CONFIG_H */
index 8a6e5a61b7363cfb77de1e6397ee78b349fc4cc3..b42cfb6e1fb5ecbc8ceb34b9c9954343ea06c73c 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#define CFG_IPBSPEED_133               /* define for 133MHz speed */
+#define CFG_IPBCLK_EQUALS_XLBCLK               /* define for 133MHz speed */
 
-#if defined(CFG_IPBSPEED_133)
+#if defined(CFG_IPBCLK_EQUALS_XLBCLK)
 /*
  * PCI Bus clocking configuration
  *
  * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if
- * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet hasn't
- * been tested with a IPB Bus Clock of 66 MHz.
+ * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock 
+ * of 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.
  */
-#define CFG_PCISPEED_66                        /* define for 66MHz speed */
+#define CFG_PCICLK_EQUALS_IPBCLK_DIV2          /* define for 66MHz speed */
 #endif
 
 /*
 
 #define CFG_BOOTCS_START       CFG_FLASH_BASE
 #define CFG_BOOTCS_SIZE                CFG_FLASH_SIZE
-#ifdef CFG_PCISPEED_66
+#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2
 #define CFG_BOOTCS_CFG         0x0008DF30 /* for pci_clk  = 66 MHz */
 #else
 #define CFG_BOOTCS_CFG         0x0004DF30 /* for pci_clk = 33 MHz */
index f41dbd0ccb18f3f8a0f292fc30c8dc60e3cd2c8e..1cc9ce94f916aece0486b59b75264d4f6ab264da 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#undef CFG_IPBSPEED_133                /* define for 133MHz speed */
+#undef CFG_IPBCLK_EQUALS_XLBCLK                /* define for 133MHz speed */
 
 /*
  * I2C configuration
index 7069b35ad60ad7864f11d375bf27a0793f1790c1..7935593febe62b992bc20d858b8543734f372d3e 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#define CFG_IPBSPEED_133               /* define for 133MHz speed */
+#define CFG_IPBCLK_EQUALS_XLBCLK               /* define for 133MHz speed */
 
-#if defined(CFG_IPBSPEED_133) && !defined(CONFIG_CAM5200)
+#if defined(CFG_IPBCLK_EQUALS_XLBCLK) && !defined(CONFIG_CAM5200)
 /*
  * PCI Bus clocking configuration
  *
  * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if
- * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet hasn't
- * been tested with a IPB Bus Clock of 66 MHz.
+ * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock of
+ * 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.
  */
-#define CFG_PCISPEED_66                        /* define for 66MHz speed */
+#define CFG_PCICLK_EQUALS_IPBCLK_DIV2  /* define for 66MHz speed */
 #endif
 
 /*
 
 #define CFG_BOOTCS_START       CFG_FLASH_BASE
 #define CFG_BOOTCS_SIZE                CFG_FLASH_SIZE
-#ifdef CFG_PCISPEED_66
+#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2
 #define CFG_BOOTCS_CFG         0x0008DF30 /* for pci_clk  = 66 MHz */
 #else
 #define CFG_BOOTCS_CFG         0x0004DF30 /* for pci_clk = 33 MHz */
index 817570323621a8df5930f86d0b5d805ae4fc7b3d..d8686dd39c0072b5b6ce1f06c4db764578abf112 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#undef CFG_IPBSPEED_133                /* define for 133MHz speed */
+#undef CFG_IPBCLK_EQUALS_XLBCLK                /* define for 133MHz speed */
 #endif
 
 /*
index 35b6a519e321c96faad81eeef44eca30073b1f3f..c72d9339e6b09d80e4458eea8ee37ee7d8b735be 100644 (file)
@@ -34,7 +34,9 @@
 #define CONFIG_ACADIA          1               /* Board is Acadia      */
 #define CONFIG_4xx             1               /* ... PPC4xx family    */
 #define CONFIG_405EZ           1               /* Specifc 405EZ support*/
-#define CONFIG_SYS_CLK_FREQ    66666666        /* external freq to pll */
+/* Detect Acadia PLL input clock automatically via CPLD bit            */
+#define CONFIG_SYS_CLK_FREQ    ((in8(CFG_CPLD_BASE + 0) == 0x0c) ? \
+                               66666666 : 33333000)
 
 #define CONFIG_BOARD_EARLY_INIT_F 1            /* Call board_early_init_f */
 #define CONFIG_MISC_INIT_F     1               /* Call misc_init_f     */
 #define CONFIG_USB_OHCI
 #define CONFIG_USB_STORAGE
 
-#if 0 /* test-only */
-#define TEST_ONLY_NAND
-#endif
-
-#ifdef TEST_ONLY_NAND
-#define CMD_NAND               CFG_CMD_NAND
-#else
-#define CMD_NAND               0
-#endif
-
 /* Partitions */
 #define CONFIG_MAC_PARTITION
 #define CONFIG_DOS_PARTITION
                               CFG_CMD_I2C      |       \
                               CFG_CMD_IRQ      |       \
                               CFG_CMD_MII      |       \
-                              CMD_NAND         |       \
+                              CFG_CMD_NAND     |       \
                               CFG_CMD_NET      |       \
                               CFG_CMD_NFS      |       \
                               CFG_CMD_PCI      |       \
  */
 #define CFG_BOOTMAPSZ          (8 << 20)       /* Initial Memory map for Linux */
 
-#ifdef TEST_ONLY_NAND
 /*-----------------------------------------------------------------------
  * NAND FLASH
  *----------------------------------------------------------------------*/
 #define NAND_MAX_CHIPS         1
 #define CFG_NAND_BASE          (CFG_NAND_ADDR + CFG_NAND_CS)
 #define CFG_NAND_SELECT_DEVICE  1      /* nand driver supports mutipl. chips   */
-#endif
 
 /*-----------------------------------------------------------------------
  * Cache Configuration
 /*-----------------------------------------------------------------------
  * External Bus Controller (EBC) Setup
  *----------------------------------------------------------------------*/
-#define CFG_NAND_CS            0               /* NAND chip connected to CSx   */
+#define CFG_NAND_CS            3               /* NAND chip connected to CSx   */
 
 /* Memory Bank 0 (Flash) initialization                                                */
 #define CFG_EBC_PB0AP          0x03337200
 /*-----------------------------------------------------------------------
  * Definitions for GPIO_0 setup (PPC405EZ specific)
  *
- * GPIO0[0-3]  - External Bus Controller CS_4 - CS_7 Outputs
+ * GPIO0[0-2]  - External Bus Controller CS_4 - CS_6 Outputs
+ * GPIO0[3]    - NAND FLASH Controller CE3 (NFCE3) Output
  * GPIO0[4]    - External Bus Controller Hold Input
  * GPIO0[5]    - External Bus Controller Priority Input
  * GPIO0[6]    - External Bus Controller HLDA Output
  */
 #define CFG_GPIO0_TCR          0xC0000000
 #define CFG_GPIO0_OSRL         0x50000000
-#define CFG_GPIO0_OSRH         0x00000055
+#define CFG_GPIO0_OSRH         0x02000055
 #define CFG_GPIO0_ISR1L                0x00000000
 #define CFG_GPIO0_ISR1H                0x00000055
-#define CFG_GPIO0_TSRL         0x00000000
+#define CFG_GPIO0_TSRL         0x02000000
 #define CFG_GPIO0_TSRH         0x00000055
 
 /*-----------------------------------------------------------------------
index 8d9f0a166104dcc526146df094bbac0d19296063..6c2a3603787974ebbfe1a9da0a73033b2a0bf0c1 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#define CFG_IPBSPEED_133               /* define for 133MHz speed */
+#define CFG_IPBCLK_EQUALS_XLBCLK               /* define for 133MHz speed */
 
-#if defined(CFG_IPBSPEED_133)
+#if defined(CFG_IPBCLK_EQUALS_XLBCLK)
 /*
  * PCI Bus clocking configuration
  *
  * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if
- * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet hasn't
- * been tested with a IPB Bus Clock of 66 MHz.
+ * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock 
+ * of 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.
  */
-#define CFG_PCISPEED_66                        /* define for 66MHz speed */
+#define CFG_PCICLK_EQUALS_IPBCLK_DIV2  /* define for 66MHz speed */
 #endif
 
 /*
 
 #define CFG_BOOTCS_START       CFG_FLASH_BASE
 #define CFG_BOOTCS_SIZE                CFG_FLASH_SIZE
-#ifdef CFG_PCISPEED_66
+#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2
 #define CFG_BOOTCS_CFG         0x0008DF30 /* for pci_clk  = 66 MHz */
 #else
 #define CFG_BOOTCS_CFG         0x0004DF30 /* for pci_clk = 33 MHz */
index 458ebabeb9a217946d39d057ed6b84a72a63126a..beaf3851dc8ece66173b667179b36ab03a820e6d 100644 (file)
  */
 #define CFG_PLL0_OPT                   0x04
 
-#define CFG_USART1                     1
-
-#define CFG_CONSOLE_UART_DEV           DEVICE_USART1
+#undef CONFIG_USART0
+#define CONFIG_USART1                  1
+#undef CONFIG_USART2
+#undef CONFIG_USART3
 
 /* 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_BAUDRATE                        115200
 #define CONFIG_BOOTARGS                                                        \
-       "console=ttyUS0 root=/dev/mtdblock1 fbmem=600k"
+       "console=ttyS0 root=/dev/mtdblock1 rootfstype=jffs2 fbmem=600k"
+
+#define CONFIG_BOOTCOMMAND                                             \
+       "fsload; bootm $(fileaddr)"
+
+/*
+ * Only interrupt autoboot if <space> is pressed. Otherwise, garbage
+ * data on the serial line may interrupt the boot sequence.
+ */
+#define CONFIG_BOOTDELAY               2
+#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       " "
+
+/*
+ * These are "locally administered ethernet addresses" generated by
+ * ./tools/gen_eth_addr
+ *
+ * After booting the board for the first time, new addresses should be
+ * generated and assigned to the environment variables "ethaddr" and
+ * "eth1addr".
+ */
+#define CONFIG_ETHADDR                 "6a:87:71:14:cd:cb"
+#define CONFIG_ETH1ADDR                        "ca:f8:15:e6:3e:e6"
+#define CONFIG_OVERWRITE_ETHADDR_ONCE  1
+#define CONFIG_NET_MULTI               1
+
+#define CONFIG_BOOTP_MASK              (CONFIG_BOOTP_SUBNETMASK        \
+                                        | CONFIG_BOOTP_GATEWAY)
 
 #define CONFIG_COMMANDS                        (CFG_CMD_BDI                    \
                                         | CFG_CMD_LOADS                \
                                         | CFG_CMD_LOADB                \
-                                        /* | CFG_CMD_IMI */            \
+                                        | CFG_CMD_IMI                  \
                                         /* | CFG_CMD_CACHE */          \
                                         | CFG_CMD_FLASH                \
                                         | CFG_CMD_MEMORY               \
-                                        /* | CFG_CMD_NET */            \
+                                        | CFG_CMD_NET                  \
                                         | CFG_CMD_ENV                  \
                                         /* | CFG_CMD_IRQ */            \
                                         | CFG_CMD_BOOTD                \
                                         /* | CFG_CMD_I2C */            \
                                         | CFG_CMD_REGINFO              \
                                         /* | CFG_CMD_DATE */           \
-                                        /* | CFG_CMD_DHCP */           \
+                                        | CFG_CMD_DHCP                 \
                                         /* | CFG_CMD_AUTOSCRIPT */     \
                                         /* | CFG_CMD_MII */            \
                                         | CFG_CMD_MISC                 \
                                         /* | CFG_CMD_SAVES */          \
                                         /* | CFG_CMD_SPI */            \
                                         /* | CFG_CMD_PING */           \
-                                        /* | CFG_CMD_MMC */            \
-                                        /* | CFG_CMD_FAT */            \
-                                        /* | CFG_CMD_IMLS */           \
+                                        | CFG_CMD_MMC                  \
+                                        | CFG_CMD_FAT                  \
+                                        | CFG_CMD_IMLS                 \
                                         /* | CFG_CMD_ITEST */          \
-                                        /* | CFG_CMD_EXT2 */           \
+                                        | CFG_CMD_EXT2                 \
+                                        | CFG_CMD_JFFS2                \
                )
 
 #include <cmd_confdefs.h>
 
 #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 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)
-#define CFG_DMA_ALLOC_END              (CFG_MALLOC_START)
-#define CFG_DMA_ALLOC_START            (CFG_DMA_ALLOC_END - CFG_DMA_ALLOC_LEN)
+
 /* Allow 2MB for the kernel run-time image */
 #define CFG_LOAD_ADDR                  (CFG_SDRAM_BASE + 0x00200000)
 #define CFG_BOOTPARAMS_LEN             (16 * 1024)
index 2c160a44891a63fd37d46373b3d4fa76c748a703..ec6d57e1e69c9cf86d7f3b63eb1c3a1efb984101 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#undef CFG_IPBSPEED_133                /* define for 133MHz speed */
+#undef CFG_IPBCLK_EQUALS_XLBCLK                /* define for 133MHz speed */
 
 /*
  * Flash configuration, expect one 16 Megabyte Bank at most
index f9586fbcb94cea97293f22cba3d1c62329b8fd72..f5efcd911a5c0a1d56e9a031d357caff403c67e0 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#undef CFG_IPBSPEED_133                /* define for 133MHz speed */
+#undef CFG_IPBCLK_EQUALS_XLBCLK                /* define for 133MHz speed */
 #endif
 /*
  * I2C configuration
index 91284fdace858fe5e3052e0de788267a49d3001e..15681208b62355232030a7f39c160d9165500e8c 100644 (file)
 /*
  * NAND Flash
  */
-/* Use the new NAND code. (BOARDLIBS = drivers/nand/libnand.a required) */
 #undef CFG_NAND_LEGACY
 
 #define CFG_NAND0_BASE         0x0 /* 0x43100040 */ /* 0x10000000 */
index 095b5f6dc27b2d1557e58ebaf3062ddf81f05d7e..4d813d8be789aa1e7f410b26c4756120bcafd1e5 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#undef CFG_IPBSPEED_133                /* define for 133MHz speed */
+#undef CFG_IPBCLK_EQUALS_XLBCLK                /* define for 133MHz speed */
 
 /*
  * I2C configuration
index 773d5d2c1d963374b0923f8da78e359fbe0390b8..ad3cf06e95039ed7ac6db9766df708192ed09837 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#define CFG_IPBSPEED_133               /* define for 133MHz speed */
+#define CFG_IPBCLK_EQUALS_XLBCLK               /* define for 133MHz speed */
 
 /*
  * Flash configuration
index 9c8769b200bf65b82b87d48aee4371bfb0fd11d6..045a144aad8cd24263b2ae62c9cf101d2b81a149 100644 (file)
  *----------------------------------------------------------------------*/
 #define CONFIG_SPD_EEPROM      1       /* Use SPD EEPROM for setup     */
 #define SPD_EEPROM_ADDRESS     {0x53, 0x52}    /* SPD i2c spd addresses*/
-#undef CONFIG_DDR_ECC                  /* no ECC support for now       */
+#define CONFIG_DDR_ECC         1       /* with ECC support             */
+#define CFG_44x_DDR2_CKTR_180  1       /* use 180 deg advance          */
 
 /*-----------------------------------------------------------------------
  * I2C
index 621a81c9c56c18428a49ef28bbef542bea329b69..c2324a04c911396e38690d1ad165cc49ca8ef569 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#define CFG_IPBSPEED_133               /* define for 133MHz speed */
+#define CFG_IPBCLK_EQUALS_XLBCLK               /* define for 133MHz speed */
 
 /*
  * I2C configuration
index cb159e79dc65dc8a05bad59c2ae298ec97057fb0..3db287784da8ba5f3449771273a49df0d91293bc 100644 (file)
@@ -28,6 +28,7 @@
 #include "../board/xilinx/ml401/xparameters.h"
 
 #define        CONFIG_MICROBLAZE       1       /* MicroBlaze CPU */
+#define        MICROBLAZE_V5           1
 #define        CONFIG_ML401            1       /* ML401 Board */
 
 /* uart */
 #define        CFG_BAUDRATE_TABLE      { CONFIG_BAUDRATE }
 
 /* setting reset address */
-#define        CFG_RESET_ADDRESS       TEXT_BASE
+/*#define      CFG_RESET_ADDRESS       TEXT_BASE*/
 
 /* ethernet */
 #define CONFIG_EMACLITE                1
-#define XPAR_EMAC_0_DEVICE_ID  XPAR_XEMAC_NUM_INSTANCES
+#define XPAR_EMAC_0_DEVICE_ID  XPAR_OPB_ETHERNET_0_DEVICE_ID
 
 /* gpio */
 #define        CFG_GPIO_0              1
 #define        FREQUENCE               XILINX_CLOCK_FREQ
 #define        CFG_TIMER_0_PRELOAD     ( FREQUENCE/1000 )
 
+/* FSL */
+#define        CFG_FSL_2
+#define        FSL_INTR_2      1
+
 /*
  * memory layout - Example
  * TEXT_BASE = 0x1200_0000;
@@ -93,7 +98,8 @@
 
 /* global pointer */
 #define        CFG_GBL_DATA_SIZE       0x1000  /* size of global data */
-#define        CFG_GBL_DATA_OFFSET     (CFG_SDRAM_BASE + CFG_SDRAM_SIZE - CFG_GBL_DATA_SIZE) /* start of global data */
+/* start of global data */
+#define        CFG_GBL_DATA_OFFSET     (CFG_SDRAM_BASE + CFG_SDRAM_SIZE - CFG_GBL_DATA_SIZE)
 
 /* monitor code */
 #define        SIZE                    0x40000
        #define CFG_FLASH_EMPTY_INFO    1       /* ?empty sector */
        #define CFG_MAX_FLASH_BANKS     1       /* max number of memory banks */
        #define CFG_MAX_FLASH_SECT      128     /* max number of sectors on one chip */
+       #define CFG_FLASH_PROTECTION            /* hardware flash protection */
 
        #ifdef  RAMENV
                #define CFG_ENV_IS_NOWHERE      1
        #define CFG_ENV_IS_NOWHERE      1
        #define CFG_ENV_SIZE            0x1000
        #define CFG_ENV_ADDR            (CFG_MONITOR_BASE - CFG_ENV_SIZE)
+       #define CFG_FLASH_PROTECTION            /* hardware flash protection */
 #endif /* !FLASH */
 
 #ifdef FLASH
                                CFG_CMD_IMI |\
                                CFG_CMD_NET |\
                                CFG_CMD_CACHE |\
+                               CFG_CMD_FAT |\
+                               CFG_CMD_EXT2 |\
+                               CFG_CMD_JFFS2 |\
+                               CFG_CMD_ECHO |\
                                CFG_CMD_IMLS |\
                                CFG_CMD_FLASH |\
+                               CFG_CMD_MFSL |\
                                CFG_CMD_PING \
                                )
        #else   /* !RAMENV */
                                CFG_CMD_FLASH |\
                                CFG_CMD_PING |\
                                CFG_CMD_ENV |\
+                               CFG_CMD_FAT |\
+                               CFG_CMD_EXT2 |\
+                               CFG_CMD_JFFS2 |\
+                               CFG_CMD_ECHO |\
+                               CFG_CMD_MFSL |\
                                CFG_CMD_SAVES \
                                )
 
                                CFG_CMD_BDI |\
                                CFG_CMD_RUN |\
                                CFG_CMD_LOADS |\
+                               CFG_CMD_FAT |\
+                               CFG_CMD_EXT2 |\
                                CFG_CMD_LOADB |\
                                CFG_CMD_IMI |\
                                CFG_CMD_NET |\
                                CFG_CMD_CACHE |\
+                               CFG_CMD_MFSL |\
                                CFG_CMD_PING \
                                )
 #endif /* !FLASH */
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
 
+#if (CONFIG_COMMANDS & CFG_CMD_JFFS2)
+/* JFFS2 partitions */
+#define CONFIG_JFFS2_CMDLINE   /* mtdparts command line support */
+#define MTDIDS_DEFAULT         "nor0=ml401-0"
+
+/* default mtd partition table */
+#define MTDPARTS_DEFAULT       "mtdparts=ml401-0:256k(u-boot),"\
+                               "256k(env),3m(kernel),1m(romfs),"\
+                               "1m(cramfs),-(jffs2)"
+#endif
+
 /* Miscellaneous configurable options */
 #define        CFG_PROMPT      "U-Boot-mONStR> "
 #define        CFG_CBSIZE      512     /* size of console buffer */
 #define        CFG_LONGHELP
 #define        CFG_LOAD_ADDR   0x12000000 /* default load address */
 
-#define        CONFIG_BOOTDELAY        30
+#define        CONFIG_BOOTDELAY        30
 #define        CONFIG_BOOTARGS         "root=romfs"
 #define        CONFIG_HOSTNAME         "ml401"
 #define        CONFIG_BOOTCOMMAND      "base 0;tftp 11000000 image.img;bootm"
 #define CFG_HZ 1000
 
 /* system ace */
-/*#define CONFIG_SYSTEMACE
-#define DEBUG_SYSTEMACE
-#define CFG_SYSTEMACE_BASE     XILINX_SYSACE_BASEADDR
-#define CFG_SYSTEMACE_WIDTH    XILINX_SYSACE_MEM_WIDTH
-#define CONFIG_DOS_PARTITION
-*/
+#define        CONFIG_SYSTEMACE
+/* #define DEBUG_SYSTEMACE */
+#define        SYSTEMACE_CONFIG_FPGA
+#define        CFG_SYSTEMACE_BASE      XILINX_SYSACE_BASEADDR
+#define        CFG_SYSTEMACE_WIDTH     XILINX_SYSACE_MEM_WIDTH
+#define        CONFIG_DOS_PARTITION
+
+#define        CONFIG_PREBOOT          "echo U-BOOT for ML401;setenv preboot;echo"
+
+#define        CONFIG_EXTRA_ENV_SETTINGS       "unlock=yes\0" /* hardware flash protection */\
+                                       "nor0=ml401-0\0"\
+                                       "mtdparts=mtdparts=ml401-0:"\
+                                       "256k(u-boot),256k(env),3m(kernel),"\
+                                       "1m(romfs),1m(cramfs),-(jffs2)\0"
+
 #endif /* __CONFIG_H */
index 5328e8d6b1cebac97c073b6c9d1c93ee4391cd85..e3899a5ab4066da21b7d8b21f12687c83f923697 100644 (file)
 #ifndef __CONFIG_H
 #define __CONFIG_H
 
-
 /*
  * High Level Configuration Options
  */
 
-
 /* CPU and board */
 #define CONFIG_MPC5xxx         1       /* This is an MPC5xxx CPU */
 #define CONFIG_MPC5200         1       /* More exactly a MPC5200 */
                                CFG_CMD_MII     | \
                                CFG_CMD_BEDBUG  | \
                                CFG_CMD_NET     | \
-                               CFG_CMD_PING)
+                               CFG_CMD_PING    | \
+                               CFG_CMD_IDE     | \
+                               CFG_CMD_FAT     | \
+                               CFG_CMD_JFFS2   | \
+                               CFG_CMD_I2C     | \
+                               CFG_CMD_DATE    | \
+                               CFG_CMD_EEPROM  | \
+                               CFG_CMD_DTT)
 
 /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
 #include <cmd_confdefs.h>
@@ -71,7 +76,7 @@
 #define CONFIG_MPC5xxx_FEC     1
 #define CONFIG_PHY_ADDR                0x2
 #define CONFIG_PHY_TYPE                0x79c874
-
+#define CONFIG_RESET_PHY_R     1
 
 /*
  * Autobooting
  * Default environment settings
  */
 #define CONFIG_EXTRA_ENV_SETTINGS                                      \
-       "sdram_test=0\0"                                                \
        "netdev=eth0\0"                                                 \
        "hostname=motionpro\0"                                          \
        "netmask=255.255.0.0\0"                                         \
        "ipaddr=192.168.160.22\0"                                       \
        "serverip=192.168.1.1\0"                                        \
        "gatewayip=192.168.1.1\0"                                       \
-       "kernel_addr=200000\0"                                          \
+       "console=ttyPSC0,115200\0"                                      \
        "u-boot_addr=100000\0"                                          \
-       "kernel_sector=20\0"                                            \
-       "kernel_size=1000\0"                                            \
-       "console=ttyS0,115200\0"                                        \
+       "kernel_addr=200000\0"                                          \
+       "fdt_addr=400000\0"                                             \
+       "ramdisk_addr=500000\0"                                         \
+       "multi_image_addr=800000\0"                                     \
        "rootpath=/opt/eldk-4.1/ppc_6xx\0"                              \
-       "bootfile=/tftpboot/motionpro/uImage\0"                         \
        "u-boot=/tftpboot/motionpro/u-boot.bin\0"                       \
-       "load=tftp $(u-boot_addr) $(u-boot)\0"                          \
+       "bootfile=/tftpboot/motionpro/uImage\0"                         \
+       "fdt_file=/tftpboot/motionpro/motionpro.dtb\0"                  \
+       "ramdisk_file=/tftpboot/motionpro/uRamdisk\0"                   \
+       "multi_image_file=kernel+initrd+dtb.img\0"                      \
+       "load=tftp ${u-boot_addr} ${u-boot}\0"                          \
        "update=prot off fff00000 fff3ffff; era fff00000 fff3ffff; "    \
-               "cp.b $(u-boot_addr) fff00000 $(filesize);"             \
+               "cp.b ${u-boot_addr} fff00000 ${filesize};"             \
                "prot on fff00000 fff3ffff\0"                           \
        "ramargs=setenv bootargs root=/dev/ram rw\0"                    \
-       "addip=setenv bootargs $(bootargs) console=$(console) "         \
-               "ip=$(ipaddr):$(serverip):$(gatewayip):"                \
-               "$(netmask):$(hostname):$(netdev):off panic=1\0"        \
-       "flash_nfs=run nfsargs addip;bootm $(kernel_addr)\0"            \
-       "flash_self=run ramargs addip;bootm $(kernel_addr) "            \
-               "$(ramdisk_addr)\0"                                     \
-       "net_nfs=tftp $(kernel_addr) $(bootfile); run nfsargs addip; "  \
-               "bootm $(kernel_addr)\0"                                \
        "nfsargs=setenv bootargs root=/dev/nfs rw "                     \
-               "nfsroot=$(serverip):$(rootpath)\0"                     \
-       "fstype=ext3\0"                                                 \
-       "fatargs=setenv bootargs init=/linuxrc rw\0"                    \
+               "nfsroot=${serverip}:${rootpath}\0"                     \
+       "fat_args=setenv bootargs rw\0"                                 \
+       "addmtd=setenv bootargs ${bootargs} ${mtdparts}\0"              \
+       "addip=setenv bootargs ${bootargs} "                            \
+               "ip=${ipaddr}:${serverip}:${gatewayip}:"                \
+               "${netmask}:${hostname}:${netdev}:off panic=1 "         \
+               "console=${console}\0"                                  \
+       "net_nfs=tftp ${kernel_addr} ${bootfile}; "                     \
+               "tftp ${fdt_addr} ${fdt_file}; run nfsargs addip; "     \
+               "bootm ${kernel_addr} - ${fdt_addr}\0"                  \
+       "net_self=tftp ${kernel_addr} ${bootfile}; "                    \
+               "tftp ${fdt_addr} ${fdt_file}; "                        \
+               "tftp ${ramdisk_addr} ${ramdisk_file}; "                \
+               "run ramargs addip; "                                   \
+               "bootm ${kernel_addr} ${ramdisk_addr} ${fdt_addr}\0"    \
+       "fat_multi=run fat_args addip; fatload ide 0:1 "                \
+               "${multi_image_addr} ${multi_image_file}; "             \
+               "bootm ${multi_image_addr}\0"                           \
        ""
 #define CONFIG_BOOTCOMMAND     "run net_nfs"
 
-
 /*
  * do board-specific init
  */
 #define CFG_MPC5XXX_CLKIN      25000000
 
 
+/*
+ * Set IPB speed to 100MHz
+ */
+#define CFG_IPBCLK_EQUALS_XLBCLK
+
+
 /*
  * Memory map
  */
 #define CFG_MAX_FLASH_SECT     256     /* max num of sects on one chip */
 #define CONFIG_FLASH_16BIT             /* Flash is 16-bit */
 
+/*
+ * MTD configuration
+ */
+#define CONFIG_JFFS2_CMDLINE
+#define MTDIDS_DEFAULT         "nor0=motionpro-0"
+#define MTDPARTS_DEFAULT       "mtdparts=motionpro-0:"                   \
+                                       "13m(fs),2m(kernel),256k(uboot)," \
+                                       "64k(env),64k(redund_env),64k(dtb)," \
+                                       "-(user_data)"
+
+/*
+ * IDE/ATA configuration
+ */
+#define CFG_ATA_BASE_ADDR      MPC5XXX_ATA
+#define CFG_IDE_MAXBUS         1
+#define CFG_IDE_MAXDEVICE      1
+#define CONFIG_IDE_PREINIT
+
+#define CFG_ATA_DATA_OFFSET    0x0060
+#define CFG_ATA_REG_OFFSET     CFG_ATA_DATA_OFFSET
+#define CFG_ATA_STRIDE         4
+#define CONFIG_DOS_PARTITION
+
+
+/*
+ * I2C configuration
+ */
+#define CONFIG_HARD_I2C                1       /* I2C with hardware support */
+#define CFG_I2C_MODULE         2       /* select I2C module #2 */
+#define CFG_I2C_SPEED          100000  /* 100 kHz */
+#define CFG_I2C_SLAVE          0x7F
+
+
+/*
+ * EEPROM configuration
+ */
+#define CFG_I2C_EEPROM_ADDR_LEN                1
+#define CFG_EEPROM_PAGE_WRITE_ENABLE   1       /* DTT driver needs this */
+#define CFG_EEPROM_PAGE_WRITE_BITS     1       /* 2 bytes per write cycle */
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 5       /* 2ms/cycle + 3ms extra */
+#define CFG_I2C_MULTI_EEPROMS          1       /* 2 EEPROMs (addr:50,52) */
+
+
+/*
+ * RTC configuration
+ */
+#define CONFIG_RTC_DS1337      1
+#define CFG_I2C_RTC_ADDR       0x68
+
+
+/*
+ * Status LED configuration
+ */
+#define CONFIG_STATUS_LED              /* Status LED enabled */
+#define CONFIG_BOARD_SPECIFIC_LED
+
+#define ENABLE_GPIO_OUT                0x00000024
+#define LED_ON                 0x00000010
+
+#ifndef __ASSEMBLY__
+/*
+ * In case of Motion-PRO, a LED is identified by its corresponding
+ * GPT Enable and Mode Select Register.
+ */
+typedef volatile unsigned long * led_id_t;
+
+extern void __led_init(led_id_t id, int state);
+extern void __led_toggle(led_id_t id);
+extern void __led_set(led_id_t id, int state);
+#endif /* __ASSEMBLY__ */
+
+
+/*
+ * Temperature sensor
+ */
+#define CONFIG_DTT_LM75                1
+#define CONFIG_DTT_SENSORS     { 0x49 }
+
 
 /*
  * Environment settings
 #define CFG_ENV_SIZE           0x1000
 #define CFG_ENV_SECT_SIZE      0x10000
 
+/* Configuration of redundant environment */
+#define CFG_ENV_ADDR_REDUND    (CFG_ENV_ADDR + CFG_ENV_SECT_SIZE)
+#define CFG_ENV_SIZE_REDUND    (CFG_ENV_SIZE)
 
 /*
  * Pin multiplexing configuration
 #define CFG_GPS_PORT_CONFIG    0x1105a004
 
 
+/*
+ * Motion-PRO's CPLD revision control register
+ */
+#define CPLD_REV_REGISTER      (CFG_CS2_START + 0x06)
+
+
 /*
  * Miscellaneous configurable options
  */
 #define CFG_LONGHELP                   /* undef to save memory    */
 #define CFG_PROMPT             "=> "   /* Monitor Command Prompt   */
-#define CFG_CBSIZE             256     /* Console I/O Buffer Size  */
+#define CFG_CBSIZE             1024    /* 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_BARGSIZE           CFG_CBSIZE      /* Boot Argument Buffer Size */
 /* Not needed for MPC 5xxx U-Boot, but used by tools/updater */
 #define CFG_RESET_ADDRESS      0xfff00100
 
+/* pass open firmware flat tree */
+#define CONFIG_OF_FLAT_TREE    1
+#define CONFIG_OF_BOARD_SETUP  1
+
+/* maximum size of the flat tree (8K) */
+#define OF_FLAT_TREE_MAX_SIZE  8192
+#define OF_CPU                 "PowerPC,5200@0"
+#define OF_SOC                 "soc5200@f0000000"
+#define OF_TBCLK               (bd->bi_busfreq / 4)
+#define OF_STDOUT_PATH         "/soc5200@f0000000/serial@2000"
+
 #endif /* __CONFIG_H */
diff --git a/include/configs/mpc7448hpc2.h b/include/configs/mpc7448hpc2.h
new file mode 100644 (file)
index 0000000..243a3f6
--- /dev/null
@@ -0,0 +1,411 @@
+/*
+ * Copyright (c) 2005 Freescale Semiconductor, Inc.
+ *
+ * (C) Copyright 2006
+ * Alex Bounine , Tundra Semiconductor Corp.
+ * Roy Zang    , <tie-fei.zang@freescale.com> Freescale Corp.
+ *
+ * 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 specific configuration options for Freescale
+ * MPC7448HPC2 (High-Performance Computing II) (Taiga) board
+ *
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#undef DEBUG
+
+/* Board Configuration Definitions */
+/* MPC7448HPC2 (High-Performance Computing II) (Taiga) board */
+
+#define CONFIG_MPC7448HPC2
+
+#define CONFIG_74xx
+#define CONFIG_750FX           /* this option to enable init of extended BATs */
+#define CONFIG_ALTIVEC         /* undef to disable */
+
+#define CFG_BOARD_NAME         "MPC7448 HPC II"
+#define CONFIG_IDENT_STRING    " Freescale MPC7448 HPC II"
+
+#define CFG_OCN_CLK            133000000       /* 133 MHz */
+#define CFG_CONFIG_BUS_CLK     133000000
+
+#define CFG_CLK_SPREAD         /* Enable Spread-Spectrum Clock generation */
+
+#undef  CONFIG_ECC             /* disable ECC support */
+
+/* Board-specific Initialization Functions to be called */
+#define CFG_BOARD_ASM_INIT
+#define CONFIG_BOARD_EARLY_INIT_F
+#define CONFIG_BOARD_EARLY_INIT_R
+#define CONFIG_MISC_INIT_R
+
+#define CONFIG_HAS_ETH1
+
+#define CONFIG_ENV_OVERWRITE
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+
+#define CONFIG_BAUDRATE                115200  /* console baudrate = 115000 */
+
+/*#define CFG_HUSH_PARSER */
+#undef CFG_HUSH_PARSER
+
+#define CFG_PROMPT_HUSH_PS2    "> "
+
+/* Pass open firmware flat tree */
+#define CONFIG_OF_FLAT_TREE    1
+#define CONFIG_OF_BOARD_SETUP  1
+
+/* maximum size of the flat tree (8K) */
+#define OF_FLAT_TREE_MAX_SIZE  8192
+
+#define OF_CPU                 "PowerPC,7448@0"
+#define OF_TSI                 "tsi108@c0000000"
+#define OF_TBCLK               (bd->bi_busfreq / 8)
+#define OF_STDOUT_PATH         "/tsi108@c0000000/serial@7808"
+
+/*
+ * The following defines let you select what serial you want to use
+ * for your console driver.
+ *
+ * what to do:
+ * If you have hacked a serial cable onto the second DUART channel,
+ * change the CFG_DUART port from 1 to 0 below.
+ *
+ */
+
+#define CONFIG_CONS_INDEX      1
+#define CFG_NS16550
+#define CFG_NS16550_SERIAL
+#define CFG_NS16550_REG_SIZE   1
+#define CFG_NS16550_CLK                CFG_OCN_CLK * 8
+
+#define CFG_NS16550_COM1       (CFG_TSI108_CSR_RST_BASE+0x7808)
+#define CFG_NS16550_COM2       (CFG_TSI108_CSR_RST_BASE+0x7C08)
+#define CFG_BAUDRATE_TABLE     { 9600, 19200, 38400, 57600, 115200 }
+
+#define CONFIG_BOOTDELAY       3       /* autoboot after 3 seconds */
+#define CONFIG_ZERO_BOOTDELAY_CHECK
+
+#undef CONFIG_BOOTARGS
+/* #define CONFIG_PREBOOT  "echo;echo Type \"run flash_nfs\"
+ * to mount root filesystem over NFS;echo" */
+
+#if (CONFIG_BOOTDELAY >= 0)
+#define CONFIG_BOOTCOMMAND     "tftpboot 0x400000 zImage.initrd.elf;\
+ setenv bootargs $(bootargs) $(bootargs_root) nfsroot=$(serverip):$(rootpath) \
+ ip=$(ipaddr):$(serverip)$(bootargs_end);  bootm 0x400000; "
+
+#define CONFIG_BOOTARGS "console=ttyS0,115200"
+#endif
+
+#undef CONFIG_EXTRA_ENV_SETTINGS
+
+#define CONFIG_SERIAL  "No. 1"
+
+/* Networking Configuration */
+
+#define KSEG1ADDR(a)   (a)     /* Needed by the rtl8139 driver */
+
+#define CONFIG_TSI108_ETH
+#define CONFIG_TSI108_ETH_NUM_PORTS    2
+
+#define CONFIG_NET_MULTI
+
+#define CONFIG_BOOTFILE                zImage.initrd.elf
+#define CONFIG_LOADADDR                0x400000
+
+/*-------------------------------------------------------------------------- */
+
+#define CONFIG_LOADS_ECHO      0       /* echo off for serial download */
+#define CFG_LOADS_BAUD_CHANGE  /* allow baudrate changes */
+
+#undef CONFIG_WATCHDOG         /* watchdog disabled */
+
+#define CONFIG_BOOTP_MASK      (CONFIG_BOOTP_DEFAULT | \
+                               CONFIG_BOOTP_BOOTFILESIZE)
+
+#define CONFIG_COMMANDS (CONFIG_CMD_DFL \
+               | CFG_CMD_ASKENV \
+               | CFG_CMD_CACHE \
+               | CFG_CMD_PCI \
+               | CFG_CMD_I2C \
+               | CFG_CMD_SDRAM \
+               | CFG_CMD_EEPROM \
+               | CFG_CMD_FLASH \
+               | CFG_CMD_ENV \
+               | CFG_CMD_BSP \
+               | CFG_CMD_DHCP \
+               | CFG_CMD_PING \
+               | CFG_CMD_DATE)
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+/*set date in u-boot*/
+#define CONFIG_RTC_M48T35A
+#define CFG_NVRAM_BASE_ADDR    0xfc000000
+#define CFG_NVRAM_SIZE         0x8000
+/*
+ * Miscellaneous configurable options
+ */
+#define CONFIG_VERSION_VARIABLE                1
+#define CONFIG_TSI108_I2C
+
+#define CFG_I2C_EEPROM_ADDR            0x50    /* I2C EEPROM page 1 */
+#define CFG_I2C_EEPROM_ADDR_LEN                1       /* Bytes of address */
+
+#define CFG_LONGHELP           /* undef to save memory */
+#define CFG_PROMPT     "=> "   /* Monitor Command Prompt */
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CBSIZE             1024    /* Console I/O Buffer Size */
+#define CONFIG_KGDB_BAUDRATE   115200  /* speed to run kgdb serial port at */
+#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_MEMTEST_START      0x00400000      /* memtest works on */
+#define CFG_MEMTEST_END                0x07c00000      /* 4 ... 124 MB in DRAM */
+
+#define CFG_LOAD_ADDR  0x00400000      /* default load address */
+
+#define CFG_HZ         1000            /* decr freq: 1ms ticks */
+
+/*
+ * 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
+ */
+
+/*
+ * When locking data in cache you should point the CFG_INIT_RAM_ADDRESS
+ * To an unused memory region. The stack will remain in cache until RAM
+ * is initialized
+ */
+#undef  CFG_INIT_RAM_LOCK
+#define CFG_INIT_RAM_ADDR      0x07d00000      /* unused memory region */
+#define CFG_INIT_RAM_END       0x4000/* larger space - we have SDRAM initialized */
+
+#define CFG_GBL_DATA_SIZE      128/* size in bytes reserved for init data */
+#define CFG_GBL_DATA_OFFSET (CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE)
+
+/*-----------------------------------------------------------------------
+ * 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      /* first 256 MB of SDRAM */
+#define CFG_SDRAM1_BASE                0x10000000      /* next 256MB of SDRAM */
+
+#define CFG_SDRAM2_BASE        0x40000000      /* beginning of non-cacheable alias for SDRAM - first 256MB */
+#define CFG_SDRAM3_BASE        0x50000000      /* next Non-Cacheable 256MB of SDRAM */
+
+#define CFG_PCI_PFM_BASE       0x80000000      /* Prefetchable (cacheable) PCI/X PFM and SDRAM OCN (128MB+128MB) */
+
+#define CFG_PCI_MEM32_BASE     0xE0000000      /* Non-Cacheable PCI/X MEM and SDRAM OCN (128MB+128MB) */
+
+#define CFG_MISC_REGION_BASE   0xf0000000      /* Base Address for (PCI/X + Flash) region */
+
+#define CFG_FLASH_BASE 0xff000000      /* Base Address of Flash device */
+#define CFG_FLASH_BASE2        0xfe000000      /* Alternate Flash Base Address */
+
+#define CONFIG_VERY_BIG_RAM    /* we will use up to 256M memory for cause we are short of BATS */
+
+#define PCI0_IO_BASE_BOOTM     0xfd000000
+
+#define CFG_RESET_ADDRESS      0x3fffff00
+#define CFG_MONITOR_LEN                (256 << 10)     /* Reserve 256 kB for Monitor */
+#define CFG_MONITOR_BASE       TEXT_BASE       /* u-boot code base */
+#define CFG_MALLOC_LEN         (256 << 10)     /* Reserve 256 kB for malloc */
+
+/* Peripheral Device section */
+
+/*
+ * Resources on the Tsi108
+ */
+
+#define CFG_TSI108_CSR_RST_BASE        0xC0000000      /* Tsi108 CSR base after reset */
+#define CFG_TSI108_CSR_BASE    CFG_TSI108_CSR_RST_BASE /* Runtime Tsi108 CSR base */
+
+#define ENABLE_PCI_CSR_BAR     /* enables access to Tsi108 CSRs from the PCI/X bus */
+
+#undef  DISABLE_PBM
+
+/*
+ * PCI stuff
+ *
+ */
+
+#define CONFIG_PCI             /* include pci support */
+#define CONFIG_TSI108_PCI      /* include tsi108 pci support */
+
+#define PCI_HOST_ADAPTER       0       /* configure as pci adapter */
+#define PCI_HOST_FORCE         1       /* configure as pci host */
+#define PCI_HOST_AUTO          2       /* detected via arbiter enable */
+
+#define CONFIG_PCI_HOST PCI_HOST_FORCE /* select pci host function */
+#define CONFIG_PCI_PNP         /* do pci plug-and-play */
+
+/* PCI MEMORY MAP section */
+
+/* PCI view of System Memory */
+#define CFG_PCI_MEMORY_BUS     0x00000000
+#define CFG_PCI_MEMORY_PHYS    0x00000000
+#define CFG_PCI_MEMORY_SIZE    0x80000000
+
+/* PCI Memory Space */
+#define CFG_PCI_MEM_BUS                (CFG_PCI_MEM_PHYS)
+#define CFG_PCI_MEM_PHYS       (CFG_PCI_MEM32_BASE)    /* 0xE0000000 */
+#define CFG_PCI_MEM_SIZE       0x10000000      /* 256 MB space for PCI/X Mem + SDRAM OCN */
+
+/* PCI I/O Space */
+#define CFG_PCI_IO_BUS         0x00000000
+#define CFG_PCI_IO_PHYS                0xfa000000      /* Changed from fd000000 */
+
+#define CFG_PCI_IO_SIZE                0x01000000      /* 16MB */
+
+#define _IO_BASE               0x00000000      /* points to PCI I/O space      */
+
+/* PCI Config Space mapping */
+#define CFG_PCI_CFG_BASE       0xfb000000      /* Changed from FE000000 */
+#define CFG_PCI_CFG_SIZE       0x01000000      /* 16MB */
+
+#define CFG_IBAT0U     0xFE0003FF
+#define CFG_IBAT0L     0xFE000002
+
+#define CFG_IBAT1U     0x00007FFF
+#define CFG_IBAT1L     0x00000012
+
+#define CFG_IBAT2U     0x80007FFF
+#define CFG_IBAT2L     0x80000022
+
+#define CFG_IBAT3U     0x00000000
+#define CFG_IBAT3L     0x00000000
+
+#define CFG_IBAT4U     0x00000000
+#define CFG_IBAT4L     0x00000000
+
+#define CFG_IBAT5U     0x00000000
+#define CFG_IBAT5L     0x00000000
+
+#define CFG_IBAT6U     0x00000000
+#define CFG_IBAT6L     0x00000000
+
+#define CFG_IBAT7U     0x00000000
+#define CFG_IBAT7L     0x00000000
+
+#define CFG_DBAT0U     0xE0003FFF
+#define CFG_DBAT0L     0xE000002A
+
+#define CFG_DBAT1U     0x00007FFF
+#define CFG_DBAT1L     0x00000012
+
+#define CFG_DBAT2U     0x00000000
+#define CFG_DBAT2L     0x00000000
+
+#define CFG_DBAT3U     0xC0000003
+#define CFG_DBAT3L     0xC000002A
+
+#define CFG_DBAT4U     0x00000000
+#define CFG_DBAT4L     0x00000000
+
+#define CFG_DBAT5U     0x00000000
+#define CFG_DBAT5L     0x00000000
+
+#define CFG_DBAT6U     0x00000000
+#define CFG_DBAT6L     0x00000000
+
+#define CFG_DBAT7U     0x00000000
+#define CFG_DBAT7L     0x00000000
+
+/* I2C addresses for the two DIMM SPD chips */
+#define DIMM0_I2C_ADDR 0x51
+#define DIMM1_I2C_ADDR 0x52
+
+/*
+ * 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/* Flash can be at one of two addresses */
+#define FLASH_BANK_SIZE                0x01000000      /* 16 MB Total */
+#define CFG_FLASH_BANKS_LIST {CFG_FLASH_BASE, CFG_FLASH_BASE2}
+
+#define CFG_FLASH_CFI_DRIVER
+#define CFG_FLASH_CFI
+#define CFG_WRITE_SWAPPED_DATA
+
+#define PHYS_FLASH_SIZE                0x01000000
+#define CFG_MAX_FLASH_SECT     (128)
+
+#define CFG_ENV_IS_IN_NVRAM
+#define CFG_ENV_ADDR           0xFC000000
+
+#define CFG_ENV_OFFSET 0x00000000      /* Offset of Environment Sector */
+#define CFG_ENV_SIZE   0x00000400      /* Total Size of Environment Space */
+
+/*-----------------------------------------------------------------------
+ * Cache Configuration
+ */
+#define CFG_CACHELINE_SIZE     32      /* For all MPC74xx CPUs */
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value */
+#endif
+
+/*-----------------------------------------------------------------------
+ * L2CR setup -- make sure this is right for your board!
+ * look in include/mpc74xx.h for the defines used here
+ */
+#undef CFG_L2
+
+#define L2_INIT                0
+#define L2_ENABLE      (L2_INIT | L2CR_L2E)
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01    /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02    /* Software reboot */
+#define CFG_SERIAL_HANG_IN_EXCEPTION
+#endif /* __CONFIG_H */
index 5c05a745dbb82b4555cd46783a1db95b6e44b76e..63d0da7d090ae6305a46d6ec5fdf6ee022732434 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#define CFG_IPBSPEED_133               /* define for 133MHz speed */
+#define CFG_IPBCLK_EQUALS_XLBCLK               /* define for 133MHz speed */
 
-#if defined(CFG_IPBSPEED_133)
+#if defined(CFG_IPBCLK_EQUALS_XLBCLK)
 /*
  * PCI Bus clocking configuration
  *
  * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if
- * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet hasn't
- * been tested with a IPB Bus Clock of 66 MHz.
+ * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock
+ *  of 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.
  */
-#define CFG_PCISPEED_66                        /* define for 66MHz speed */
+#define CFG_PCICLK_EQUALS_IPBCLK_DIV2  /* define for 66MHz speed */
 #endif
 #endif
 
 #define CFG_BOOTCS_START       CFG_FLASH_BASE
 #define CFG_BOOTCS_SIZE                CFG_FLASH_SIZE
 
-#ifdef CFG_PCISPEED_66
+#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2
 /*
  * For 66 MHz PCI clock additional Wait State is needed for CS0 (flash).
  */
index fefdb3cca0121caa349f1fa26472d6f03fb48cde..7151a9ec2e2915641301840bbebee9d662c9a690 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#undef CFG_IPBSPEED_133                /* define for 133MHz speed */
+#undef CFG_IPBCLK_EQUALS_XLBCLK                /* define for 133MHz speed */
 #endif
 /*
  * I2C configuration
index 0b808887b41f03c742690d3bb79cba6a4846ef04..23243a4971af809be6fc3b9d6e38a1422227fe4c 100644 (file)
@@ -38,7 +38,9 @@
 #define CONFIG_440GRX          1               /* Specific PPC440GRx   */
 #endif
 #define CONFIG_4xx             1               /* ... PPC4xx family    */
-#define CONFIG_SYS_CLK_FREQ    33000000        /* external freq to pll */
+/* Detect Sequoia PLL input clock automatically via CPLD bit           */
+#define CONFIG_SYS_CLK_FREQ    ((in8(CFG_BCSR_BASE + 3) & 0x80) ? \
+                               33333333 : 33000000)
 
 #define CONFIG_BOARD_EARLY_INIT_F 1            /* Call board_early_init_f */
 #define CONFIG_MISC_INIT_R     1               /* Call misc_init_r     */
index e106b3b5746486fd607f219e445cf9075399d1dd..185c2d48709b913bc08342e1956ae76f8f79bf6f 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#define CFG_IPBSPEED_133               /* define for 133MHz speed */
+#define CFG_IPBCLK_EQUALS_XLBCLK               /* define for 133MHz speed */
 
-#if defined(CFG_IPBSPEED_133)
+#if defined(CFG_IPBCLK_EQUALS_XLBCLK)
 /*
  * PCI Bus clocking configuration
  *
  * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if
- * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet hasn't
- * been tested with a IPB Bus Clock of 66 MHz.
+ * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock
+ * of 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.
  */
-#define CFG_PCISPEED_66                        /* define for 66MHz speed */
+#define CFG_PCICLK_EQUALS_IPBCLK_DIV2  /* define for 66MHz speed */
 #endif
 
 /*
 
 #define CFG_BOOTCS_START       CFG_FLASH_BASE
 #define CFG_BOOTCS_SIZE                CFG_FLASH_SIZE
-#ifdef CFG_PCISPEED_66
+#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2
 #define CFG_BOOTCS_CFG         0x0008DF30 /* for pci_clk  = 66 MHz */
 #else
 #define CFG_BOOTCS_CFG         0x0004DF30 /* for pci_clk = 33 MHz */
index f40dde2ac834271e5a91299bb511f1780d3350e4..fd138a5d17ab3c73495c811a590358447a85adbf 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#define CFG_IPBSPEED_133               /* define for 133MHz speed */
+#define CFG_IPBCLK_EQUALS_XLBCLK               /* define for 133MHz speed */
 
-#if defined(CFG_IPBSPEED_133)
+#if defined(CFG_IPBCLK_EQUALS_XLBCLK)
 /*
  * PCI Bus clocking configuration
  *
  * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if
- * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet hasn't
- * been tested with a IPB Bus Clock of 66 MHz.
+ * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock 
+ * of 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.
  */
-#define CFG_PCISPEED_66                        /* define for 66MHz speed */
+#define CFG_PCICLK_EQUALS_IPBCLK_DIV2  /* define for 66MHz speed */
 #endif
 
 /*
 
 #define CFG_BOOTCS_START       CFG_FLASH_BASE
 #define CFG_BOOTCS_SIZE                CFG_FLASH_SIZE
-#ifdef CFG_PCISPEED_66
+#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2
 #define CFG_BOOTCS_CFG         0x0008DF30 /* for pci_clk  = 66 MHz */
 #else
 #define CFG_BOOTCS_CFG         0x0004DF30 /* for pci_clk = 33 MHz */
diff --git a/include/configs/stxssa.h b/include/configs/stxssa.h
new file mode 100644 (file)
index 0000000..8624f4b
--- /dev/null
@@ -0,0 +1,465 @@
+/*
+ * (C) Copyright 2005 Embedded Alley Solutions, Inc.
+ * Dan Malek <dan@embeddedalley.com>
+ * Copied from STx GP3.
+ * Updates for Silicon Tx GP3 SSA board.
+ *
+ * (C) Copyright 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
+ */
+
+/* mpc8560ads board configuration file */
+/* please refer to doc/README.mpc85xx for more info */
+/* make sure you change the MAC address and other network params first,
+ * search for CONFIG_ETHADDR,CONFIG_SERVERIP,etc in this file
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* High Level Configuration Options */
+#define CONFIG_BOOKE           1       /* BOOKE                */
+#define CONFIG_E500            1       /* BOOKE e500 family    */
+#define CONFIG_MPC85xx         1       /* MPC8540/MPC8560      */
+#define CONFIG_CPM2            1       /* has CPM2 */
+#define CONFIG_STXSSA          1       /* Silicon Tx GPPP SSA board specific*/
+
+#undef  CONFIG_PCI                     /* pci ethernet support */
+#define CONFIG_TSEC_ENET               /* tsec ethernet support*/
+#undef CONFIG_ETHER_ON_FCC             /* cpm FCC ethernet support */
+#define CONFIG_ENV_OVERWRITE
+#define CONFIG_SPD_EEPROM               /* Use SPD EEPROM for DDR setup */
+#undef  CONFIG_DDR_ECC                 /* only for ECC DDR module */
+#undef CONFIG_DDR_DLL                  /* possible DLL fix needed */
+#define CONFIG_DDR_2T_TIMING           /* Sets the 2T timing bit */
+
+
+/* sysclk for MPC85xx
+ */
+
+#define CONFIG_SYS_CLK_FREQ     33000000 /* most pci cards are 33Mhz */
+
+/* Blinkin' LEDs for Robert :-)
+*/
+#define CONFIG_SHOW_ACTIVITY 1
+
+/*
+ * These can be toggled for performance analysis, otherwise use default.
+ */
+#define CONFIG_L2_CACHE                     /* toggle L2 cache         */
+#define  CONFIG_BTB                          /* toggle branch predition */
+#define  CONFIG_ADDR_STREAMING               /* toggle addr streaming   */
+
+#define CONFIG_BOARD_EARLY_INIT_F   1        /* Call board_pre_init      */
+
+#undef  CFG_DRAM_TEST                       /* memory test, takes time  */
+#define CFG_MEMTEST_START       0x00200000  /* memtest region */
+#define CFG_MEMTEST_END         0x00400000
+
+
+/* Localbus connector.  There are many options that can be
+ * connected here, including sdram or lots of flash.
+ * This address, however, is used to configure a 256M local bus
+ * window that includes the Config latch below.
+ */
+#define CFG_LBC_OPTION_BASE    0xf0000000      /* Localbus Extension */
+#define CFG_LBC_OPTION_SIZE    256             /* 256MB */
+
+/* There are various flash options used, we configure for the largest,
+ * which is 64Mbytes.  The CFI works fine and will discover the proper
+ * sizes.
+ */
+#define CFG_FLASH_BASE         0xFC000000      /* start of FLASH 64M    */
+#define CFG_BR0_PRELIM         0xFC001801      /* port size 32bit      */
+#define CFG_OR0_PRELIM         0xFC000FF7      /* 64 MB Flash           */
+
+#define CFG_FLASH_CFI          1
+#define CFG_FLASH_CFI_DRIVER   1
+#undef CFG_FLASH_USE_BUFFER_WRITE      /* use buffered writes (20x faster) */
+#define CFG_MAX_FLASH_SECT     256     /* max number of sectors on one chip */
+#define CFG_MAX_FLASH_BANKS    1       /* max number of memory banks   */
+
+#define CFG_FLASH_BANKS_LIST { CFG_FLASH_BASE }
+
+#define CFG_FLASH_PROTECTION
+
+/* The configuration latch is Chip Select 1.
+ * It's an 8-bit latch in the lower 8 bits of the word.
+ */
+#define CFG_LBC_CFGLATCH_BASE  0xfb000000      /* Base of config latch */
+#define CFG_BR1_PRELIM         0xfb001801      /* 32-bit port */
+#define CFG_OR1_PRELIM         0xffff0ff7      /* 64K is enough */
+
+#define CFG_MONITOR_BASE       TEXT_BASE       /* start of monitor     */
+
+#if (CFG_MONITOR_BASE < CFG_FLASH_BASE)
+#define CFG_RAMBOOT
+#else
+#undef  CFG_RAMBOOT
+#endif
+
+#ifdef CFG_RAMBOOT
+#define CFG_CCSRBAR_DEFAULT    0x40000000      /* CCSRBAR by BDI cfg   */
+#else
+#define CFG_CCSRBAR_DEFAULT    0xff700000      /* CCSRBAR Default      */
+#endif
+#define CFG_CCSRBAR             0xe0000000      /* relocated CCSRBAR    */
+#define CFG_IMMR               CFG_CCSRBAR     /* PQII uses CFG_IMMR   */
+
+
+/*
+ * DDR Setup
+ */
+
+/*
+ * Base addresses -- Note these are effective addresses where the
+ * actual resources get mapped (not physical addresses)
+ */
+#define CFG_DDR_SDRAM_BASE     0x00000000      /* DDR is system memory  */
+#define CFG_SDRAM_BASE         CFG_DDR_SDRAM_BASE
+
+#define SPD_EEPROM_ADDRESS     0x54            /*  DDR DIMM */
+
+#undef CONFIG_CLOCKS_IN_MHZ
+
+/* local bus definitions */
+#define CFG_BR2_PRELIM         0xf8001861      /* 64MB localbus SDRAM  */
+#define CFG_OR2_PRELIM         0xfc006901
+#define CFG_LBC_LCRR           0x00030004      /* local bus freq       */
+#define CFG_LBC_LBCR           0x00000000
+#define CFG_LBC_LSRT           0x20000000
+#define CFG_LBC_MRTPR          0x20000000
+#define CFG_LBC_LSDMR_1                0x2861b723
+#define CFG_LBC_LSDMR_2                0x0861b723
+#define CFG_LBC_LSDMR_3                0x0861b723
+#define CFG_LBC_LSDMR_4                0x1861b723
+#define CFG_LBC_LSDMR_5                0x4061b723
+
+#define CONFIG_L1_INIT_RAM
+#define CFG_INIT_RAM_LOCK      1
+#define CFG_INIT_RAM_ADDR       0x60000000      /* Initial RAM address  */
+#define CFG_INIT_RAM_END       0x4000          /* End of used area in RAM */
+
+#define CFG_GBL_DATA_SIZE      128             /* 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_MONITOR_LEN                (256 * 1024)    /* Reserve 256 kB for Mon */
+#define CFG_MALLOC_LEN         (512 * 1024)    /* Reserved for malloc */
+
+/* Serial Port */
+#define CONFIG_CONS_INDEX     2
+#undef CONFIG_SERIAL_SOFTWARE_FIFO
+#define CFG_NS16550
+#define CFG_NS16550_SERIAL
+#define CFG_NS16550_REG_SIZE    1
+#define CFG_NS16550_CLK                get_bus_freq(0)
+
+#define CFG_BAUDRATE_TABLE  \
+       {300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 115200}
+
+#define CFG_NS16550_COM1        (CFG_CCSRBAR+0x4500)
+#define CFG_NS16550_COM2        (CFG_CCSRBAR+0x4600)
+
+#define CONFIG_CMDLINE_EDITING 1       /* add command line history     */
+#define CFG_HUSH_PARSER                1       /* Use the HUSH parser          */
+#ifdef  CFG_HUSH_PARSER
+#define CFG_PROMPT_HUSH_PS2 "> "
+#endif
+
+/* I2C */
+#define CONFIG_FSL_I2C                 /* Use FSL common I2C driver */
+#define  CONFIG_HARD_I2C               /* I2C with hardware support*/
+#undef CONFIG_SOFT_I2C                 /* I2C bit-banged */
+#define CFG_I2C_SPEED          400000  /* I2C speed and slave address  */
+#define CFG_I2C_SLAVE          0x7F
+#if 0
+#define CFG_I2C_NOPROBES        {0x00}  /* Don't probe these addrs */
+#else
+/* I did the 'if 0' so we could keep the syntax above if ever needed. */
+#undef CFG_I2C_NOPROBES
+#endif
+#define CFG_I2C_OFFSET         0x3000
+
+/* I2C EEPROM.  AT24C32, we keep our environment in here.
+*/
+#define CFG_I2C_EEPROM_ADDR            0x51    /* 1010001x             */
+#define CFG_I2C_EEPROM_ADDR_LEN                2
+#define CFG_EEPROM_PAGE_WRITE_BITS     5       /* =32 Bytes per write  */
+#define CFG_EEPROM_PAGE_WRITE_ENABLE
+#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 20
+
+/*
+ * Standard 8555 PCI mapping.
+ * Addresses are mapped 1-1.
+ */
+#define CFG_PCI1_MEM_BASE      0x80000000
+#define CFG_PCI1_MEM_PHYS      CFG_PCI1_MEM_BASE
+#define CFG_PCI1_MEM_SIZE      0x20000000      /* 512M */
+#define CFG_PCI1_IO_BASE       0x00000000
+#define CFG_PCI1_IO_PHYS       0xe2000000
+#define CFG_PCI1_IO_SIZE       0x01000000      /* 16M */
+
+#define CFG_PCI2_MEM_BASE      0xa0000000
+#define CFG_PCI2_MEM_PHYS      CFG_PCI2_MEM_BASE
+#define CFG_PCI2_MEM_SIZE      0x20000000      /* 512M */
+#define CFG_PCI2_IO_BASE       0x00000000
+#define CFG_PCI2_IO_PHYS       0xe3000000
+#define CFG_PCI2_IO_SIZE       0x01000000      /* 16M */
+
+#if defined(CONFIG_PCI)                /* PCI Ethernet card */
+
+#define CONFIG_NET_MULTI
+#define CONFIG_PCI_PNP                 /* do pci plug-and-play */
+
+#undef CONFIG_EEPRO100
+#undef CONFIG_TULIP
+
+#if !defined(CONFIG_PCI_PNP)
+  #define PCI_ENET0_IOADDR     0xe0000000
+  #define PCI_ENET0_MEMADDR     0xe0000000
+  #define PCI_IDSEL_NUMBER      0x0c   /* slot0->3(IDSEL)=12->15 */
+#endif
+
+#undef CONFIG_PCI_SCAN_SHOW
+#define CFG_PCI_SUBSYS_VENDORID 0x1057  /* Motorola */
+
+#endif /* CONFIG_PCI */
+
+#if defined(CONFIG_TSEC_ENET)
+
+#ifndef CONFIG_NET_MULTI
+#define CONFIG_NET_MULTI       1
+#endif
+
+#define CONFIG_MII             1       /* MII PHY management           */
+
+#define CONFIG_MPC85XX_TSEC1   1
+#define CONFIG_MPC85XX_TSEC1_NAME      "TSEC0"
+#define CONFIG_MPC85XX_TSEC2   1
+#define CONFIG_MPC85XX_TSEC2_NAME      "TSEC1"
+#undef CONFIG_MPS85XX_FEC
+
+#define TSEC1_PHY_ADDR         2
+#define TSEC2_PHY_ADDR         4
+#define TSEC1_PHYIDX           0
+#define TSEC2_PHYIDX           0
+#define CONFIG_ETHPRIME                "TSEC0"
+
+#elif defined(CONFIG_ETHER_ON_FCC)     /* CPM FCC Ethernet */
+
+#define CONFIG_ETHER_ON_FCC2             /* define if ether on FCC   */
+#undef  CONFIG_ETHER_NONE               /* define if ether on something else */
+#define CONFIG_ETHER_INDEX      2       /* which channel for ether  */
+
+#if (CONFIG_ETHER_INDEX == 2)
+  /*
+   * - Rx-CLK is CLK13
+   * - Tx-CLK is CLK14
+   * - Select bus for bd/buffers
+   * - Full duplex
+   */
+  #define CFG_CMXFCR_MASK       (CMXFCR_FC2 | CMXFCR_RF2CS_MSK | CMXFCR_TF2CS_MSK)
+  #define CFG_CMXFCR_VALUE      (CMXFCR_RF2CS_CLK13 | CMXFCR_TF2CS_CLK14)
+  #define CFG_CPMFCR_RAMTYPE    0
+#if 0
+  #define CFG_FCC_PSMR          (FCC_PSMR_FDE)
+#else
+  #define CFG_FCC_PSMR          0
+#endif
+  #define FETH2_RST            0x01
+#elif (CONFIG_ETHER_INDEX == 3)
+  /* need more definitions here for FE3 */
+  #define FETH3_RST            0x80
+#endif                                 /* CONFIG_ETHER_INDEX */
+
+/* MDIO is done through the TSEC0 control.
+*/
+#define CONFIG_MII                     /* MII PHY management */
+#undef CONFIG_BITBANGMII               /* bit-bang MII PHY management  */
+
+#endif
+
+/* Environment - default config is in flash, see below */
+#if 0  /* in EEPROM */
+#define CFG_ENV_IS_IN_EEPROM   1
+#define CFG_ENV_OFFSET         0
+#define CFG_ENV_SIZE           2048
+#else  /* in flash */
+#define        CFG_ENV_IS_IN_FLASH     1
+#define CFG_ENV_SECT_SIZE      0x40000
+
+#define        CFG_ENV_ADDR            (CFG_MONITOR_BASE - CFG_ENV_SECT_SIZE)
+#define        CFG_ENV_SIZE            0x4000
+#define CFG_ENV_ADDR_REDUND    (CFG_ENV_ADDR - CFG_ENV_SECT_SIZE)
+#define CFG_ENV_SIZE_REDUND    (CFG_ENV_SIZE)
+#endif
+
+#define CONFIG_LOADS_ECHO      1       /* echo on for serial download  */
+#define CFG_LOADS_BAUD_CHANGE  1       /* allow baudrate change        */
+
+#define        CONFIG_TIMESTAMP                /* Print image info with ts     */
+
+#if defined(CFG_RAMBOOT)
+  #if defined(CONFIG_PCI)
+  #define  CONFIG_COMMANDS     ((CONFIG_CMD_DFL | CFG_CMD_PCI | \
+                               CFG_CMD_PING | CFG_CMD_I2C) & \
+                                ~(CFG_CMD_ENV | \
+                                 CFG_CMD_LOADS ))
+  #elif defined(CONFIG_TSEC_ENET)
+  #define  CONFIG_COMMANDS     ((CONFIG_CMD_DFL | CFG_CMD_PING | \
+                               CFG_CMD_MII | CFG_CMD_I2C ) & \
+                               ~(CFG_CMD_ENV))
+  #elif defined(CONFIG_ETHER_ON_FCC)
+  #define  CONFIG_COMMANDS     ((CONFIG_CMD_DFL | CFG_CMD_MII | \
+                               CFG_CMD_PING | CFG_CMD_I2C) & \
+                               ~(CFG_CMD_ENV))
+  #endif
+#else
+  #if defined(CONFIG_PCI)
+  #define  CONFIG_COMMANDS     (CONFIG_CMD_DFL | CFG_CMD_PCI | \
+                               CFG_CMD_ELF | CFG_CMD_PING | CFG_CMD_I2C)
+  #elif defined(CONFIG_TSEC_ENET)
+  #define  CONFIG_COMMANDS     (CONFIG_CMD_DFL | CFG_CMD_PING | \
+                               CFG_CMD_ELF | CFG_CMD_MII | CFG_CMD_I2C)
+  #elif defined(CONFIG_ETHER_ON_FCC)
+  #define  CONFIG_COMMANDS     (CONFIG_CMD_DFL | CFG_CMD_MII | \
+                               CFG_CMD_ELF | CFG_CMD_PING | CFG_CMD_I2C)
+  #endif
+#endif
+#include <cmd_confdefs.h>
+
+#undef CONFIG_WATCHDOG                 /* watchdog disabled            */
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP                   /* undef to save memory         */
+#define CFG_PROMPT     "SSA=> "        /* Monitor Command Prompt       */
+#if (CONFIG_COMMANDS & CFG_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  0x1000000       /* default load address */
+#define CFG_HZ         1000            /* decrementer freq: 1 ms ticks */
+
+/*
+ * 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 */
+
+/* Cache Configuration */
+#define CFG_DCACHE_SIZE                32768
+#define CFG_CACHELINE_SIZE     32
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CFG_CACHELINE_SHIFT    5       /* log base 2 of the above value */
+#endif
+
+/*
+ * Internal Definitions
+ *
+ * Boot Flags
+ */
+#define BOOTFLAG_COLD  0x01            /* Normal Power-On: Boot from FLASH */
+#define BOOTFLAG_WARM  0x02            /* Software reboot              */
+
+#if (CONFIG_COMMANDS & CFG_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
+
+/*Note: change below for your network setting!!! */
+#if defined(CONFIG_TSEC_ENET) || defined(CONFIG_ETHER_ON_FCC)
+#define CONFIG_ETHADDR  00:e0:0c:07:9b:8a
+#define CONFIG_HAS_ETH1
+#define CONFIG_ETH1ADDR  00:e0:0c:07:9b:8b
+#define CONFIG_HAS_ETH2
+#define CONFIG_ETH2ADDR  00:e0:0c:07:9b:8c
+#endif
+
+/*
+ * Environment in EEPROM is compatible with different flash sector sizes,
+ * but only little space is available, so we use a very simple setup.
+ * With environment in flash, we use a more powerful default configuration.
+ */
+#ifdef CFG_ENV_IS_IN_EEPROM            /* use restricted "standard" environment */
+
+#define CONFIG_BAUDRATE                38400
+
+#define CONFIG_BOOTDELAY       3       /* -1 disable autoboot */
+#define CONFIG_BOOTCOMMAND     "bootm 0xffc00000 0xffd00000"
+#define CONFIG_BOOTARGS                "root=/dev/nfs rw ip=any console=ttyS1,$baudrate"
+#define CONFIG_SERVERIP        192.168.85.1
+#define CONFIG_IPADDR                  192.168.85.60
+#define CONFIG_GATEWAYIP       192.168.85.1
+#define CONFIG_NETMASK         255.255.255.0
+#define CONFIG_HOSTNAME        STX_SSA
+#define CONFIG_ROOTPATH        /gppproot
+#define CONFIG_BOOTFILE        uImage
+#define CONFIG_LOADADDR                0x1000000
+
+#else /* ENV IS IN FLASH               -- use a full-blown envionment */
+
+#define CONFIG_BAUDRATE                115200
+
+#define CONFIG_BOOTDELAY       5       /* -1 disable autoboot */
+
+#define CONFIG_PREBOOT "echo;" \
+       "echo Type \\\"run flash_nfs\\\" to mount root filesystem over NFS;" \
+       "echo"
+
+#undef CONFIG_BOOTARGS         /* the boot command will set bootargs   */
+
+#define        CONFIG_EXTRA_ENV_SETTINGS                                       \
+       "hostname=gp3ssa\0"                                             \
+       "bootfile=/tftpboot/gp3ssa/uImage\0"                            \
+       "loadaddr=400000\0"                                             \
+       "netdev=eth0\0"                                                 \
+       "consdev=ttyS1\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"                      \
+       "addcons=setenv bootargs $bootargs "                            \
+               "console=$consdev,$baudrate\0"                          \
+       "flash_nfs=run nfsargs addip addcons;"                          \
+               "bootm $kernel_addr\0"                                  \
+       "flash_self=run ramargs addip addcons;"                         \
+               "bootm $kernel_addr $ramdisk_addr\0"                    \
+       "net_nfs=tftp $loadaddr $bootfile;"                             \
+               "run nfsargs addip addcons;bootm\0"                     \
+       "rootpath=/opt/eldk/ppc_85xx\0"                                 \
+       "kernel_addr=FC000000\0"                                        \
+       "ramdisk_addr=FC200000\0"                                       \
+       ""
+#define CONFIG_BOOTCOMMAND     "run flash_self"
+
+#endif /* CFG_ENV_IS_IN_EEPROM */
+
+#endif /* __CONFIG_H */
index 8cd8e9be709ae9e7298e00bcef9afc2eb4c6577e..ff061eecc896d350cf54611134f400bf358d2393 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#define CFG_IPBSPEED_133               /* define for 133MHz speed */
+#define CFG_IPBCLK_EQUALS_XLBCLK               /* define for 133MHz speed */
 
 /*
  * I2C configuration
index e19591d2993e7ca20c585ac74e182bd839812297..0b7b19eadab6e9c943317f0b0fc2a21c2c799a26 100644 (file)
 /*
  * IPB Bus clocking configuration.
  */
-#undef CFG_IPBSPEED_133                        /* define for 133MHz speed */
+#undef CFG_IPBCLK_EQUALS_XLBCLK                        /* define for 133MHz speed */
 #endif
 
 /*
index a2f48102f0ca676d9a06f51e47e2618df6b111e0..b4c720d18b55f3ec507c1558b07f0e9aabc00373 100644 (file)
                        CFG_CMD_LOADS |\
                        CFG_CMD_LOADB |\
                        CFG_CMD_MISC |\
+                       CFG_CMD_FAT |\
+                       CFG_CMD_EXT2 |\
                        CFG_CMD_PING \
                        )
 
        "base 0;" \
        "echo"
 
-
 /* system ace */
-/*#define      CONFIG_SYSTEMACE
-#define        DEBUG_SYSTEMACE
-#define        CFG_SYSTEMACE_BASE      0xCF000000
-#define        CFG_SYSTEMACE_WIDTH     16
-#define        CONFIG_DOS_PARTITION*/
+#define        CONFIG_SYSTEMACE
+/* #define DEBUG_SYSTEMACE */
+#define        SYSTEMACE_CONFIG_FPGA
+#define        CFG_SYSTEMACE_BASE      XILINX_SYSACE_BASEADDR
+#define        CFG_SYSTEMACE_WIDTH     XILINX_SYSACE_MEM_WIDTH
+#define        CONFIG_DOS_PARTITION
 
 #endif /* __CONFIG_H */
index c6aa8ece5b010886e7d2d235b22efed8bd0e458b..1e8ed7abdfcaf65a746fd3d96260783176dd7e61 100644 (file)
 /*
  * NAND Flash
  */
-/* Use the new NAND code. (BOARDLIBS = drivers/nand/libnand.a required) */
 #define CONFIG_NEW_NAND_CODE
 #define CFG_NAND0_BASE         0x0
 #undef CFG_NAND1_BASE
index 48ccfd9100002deb3aff35ee4f17bc7d232b25b2..3dd3aca3b6aaa53803b402be79f451313f18604e 100644 (file)
@@ -1,3 +1,22 @@
+/*
+ * libfdt - Flat Device Tree manipulation
+ * Copyright (C) 2006 David Gibson, IBM Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
 #ifndef _FDT_H
 #define _FDT_H
 
similarity index 59%
rename from cpu/microblaze/enable_int.S
rename to include/fdt_support.h
index c096c6c3c0515fb5a32f996f99472416521854ae..a276834740a2cb8aab0f83c1ee4e4fdce3630700 100644 (file)
@@ -1,7 +1,6 @@
 /*
- * (C) Copyright 2007 Michal Simek
- *
- * Michal  SIMEK <monstrmonstr.eu>
+ * (C) Copyright 2007
+ * Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -13,7 +12,7 @@
  *
  * 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
+ * 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
  * MA 02111-1307 USA
  */
 
-       .text
-       .globl  microblaze_enable_interrupts
-       .ent    microblaze_enable_interrupts
-       .align  2
-microblaze_enable_interrupts:
-       addi    r1, r1, -4
-       swi     r12, r1, 0
-       mfs     r12, rmsr
-       ori     r12, r12, 2
-       mts     rmsr, r12
-       lwi     r12, r1, 0
-       rtsd    r15, 8
-       addi    r1, r1, 4
-       .end    microblaze_enable_interrupts
+#ifndef __FDT_SUPPORT_H
+#define __FDT_SUPPORT_H
+
+#ifdef CONFIG_OF_LIBFDT
+
+#include <fdt.h>
+
+int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end, int force);
+
+#ifdef CONFIG_OF_HAS_UBOOT_ENV
+int fdt_env(void *fdt);
+#endif
+
+#ifdef CONFIG_OF_HAS_BD_T
+int fdt_bd_t(void *fdt);
+#endif
+
+#endif /* ifdef CONFIG_OF_LIBFDT */
+#endif /* ifndef __FDT_SUPPORT_H */
index a0b4d55034155e5e99ff5013c65040bbd7c42b3e..f8bac73a319fabee0c669c46dcd354823de911b7 100644 (file)
@@ -1,5 +1,3 @@
-#ifndef _LIBFDT_H
-#define _LIBFDT_H
 /*
  * libfdt - Flat Device Tree manipulation
  * Copyright (C) 2006 David Gibson, IBM Corporation.
@@ -19,6 +17,9 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#ifndef _LIBFDT_H
+#define _LIBFDT_H
+
 #include <fdt.h>
 #include <libfdt_env.h>
 
@@ -60,6 +61,8 @@
 #define fdt_set_header(fdt, field, val) \
        ((struct fdt_header *)(fdt))->field = cpu_to_fdt32(val)
 
+int fdt_check_header(const void *fdt);
+
 void *fdt_offset_ptr(const void *fdt, int offset, int checklen);
 
 #define fdt_offset_ptr_typed(fdt, offset, var) \
@@ -83,6 +86,8 @@ void *fdt_getprop(const void *fdt, int nodeoffset,
 
 uint32_t fdt_next_tag(const void *fdt, int offset,
                      int *nextoffset, char **namep);
+int fdt_num_reservemap(void *fdt, int *used, int *total);
+int fdt_get_reservemap(void *fdt, int n, struct fdt_reserve_entry *re);
 
 /* Write-in-place functions */
 int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
@@ -96,6 +101,8 @@ int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
 
 int fdt_nop_property(void *fdt, int nodeoffset, const char *name);
 int fdt_nop_node(void *fdt, int nodeoffset);
+int fdt_insert_reservemap_entry(void *fdt, int n, uint64_t addr, uint64_t size);
+
 
 /* Sequential-write functions */
 int fdt_create(void *buf, int bufsize);
@@ -112,6 +119,7 @@ int fdt_property(void *fdt, const char *name, const void *val, int len);
        fdt_property(fdt, name, str, strlen(str)+1)
 int fdt_end_node(void *fdt);
 int fdt_finish(void *fdt);
+int fdt_replace_reservemap_entry(void *fdt, int n, uint64_t addr, uint64_t size);
 
 /* Read-write functions */
 int fdt_open_into(void *fdt, void *buf, int bufsize);
index 6c7785254074ddc063f740ac5fe32b6f416af1a4..e746314b1e7522f0dcc9f8b5a46c9d9ba9e292ba 100644 (file)
@@ -1,3 +1,23 @@
+/*
+ * libfdt - Flat Device Tree manipulation (build/run environment adaptation)
+ * Copyright (C) 2007 Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com
+ * Original version written by David Gibson, IBM Corporation.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public License
+ * as published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
 #ifndef _LIBFDT_ENV_H
 #define _LIBFDT_ENV_H
 
diff --git a/include/linux/mii.h b/include/linux/mii.h
new file mode 100644 (file)
index 0000000..7c63095
--- /dev/null
@@ -0,0 +1,158 @@
+/*
+ * linux/mii.h: definitions for MII-compatible transceivers
+ * Originally drivers/net/sunhme.h.
+ *
+ * Copyright (C) 1996, 1999, 2001 David S. Miller (davem@redhat.com)
+ */
+
+#ifndef __LINUX_MII_H__
+#define __LINUX_MII_H__
+
+/* Generic MII registers. */
+
+#define MII_BMCR           0x00        /* Basic mode control register */
+#define MII_BMSR           0x01        /* Basic mode status register  */
+#define MII_PHYSID1        0x02        /* PHYS ID 1                   */
+#define MII_PHYSID2        0x03        /* PHYS ID 2                   */
+#define MII_ADVERTISE      0x04        /* Advertisement control reg   */
+#define MII_LPA                    0x05        /* Link partner ability reg    */
+#define MII_EXPANSION      0x06        /* Expansion register          */
+#define MII_DCOUNTER       0x12        /* Disconnect counter          */
+#define MII_FCSCOUNTER     0x13        /* False carrier counter       */
+#define MII_NWAYTEST       0x14        /* N-way auto-neg test reg     */
+#define MII_RERRCOUNTER     0x15       /* Receive error counter       */
+#define MII_SREVISION      0x16        /* Silicon revision            */
+#define MII_RESV1          0x17        /* Reserved...                 */
+#define MII_LBRERROR       0x18        /* Lpback, rx, bypass error    */
+#define MII_PHYADDR        0x19        /* PHY address                 */
+#define MII_RESV2          0x1a        /* Reserved...                 */
+#define MII_TPISTATUS      0x1b        /* TPI status for 10mbps       */
+#define MII_NCONFIG        0x1c        /* Network interface config    */
+
+/* Basic mode control register. */
+#define BMCR_RESV              0x003f  /* Unused...                   */
+#define BMCR_SPEED1000         0x0040  /* MSB of Speed (1000)         */
+#define BMCR_CTST              0x0080  /* Collision test              */
+#define BMCR_FULLDPLX          0x0100  /* Full duplex                 */
+#define BMCR_ANRESTART         0x0200  /* Auto negotiation restart    */
+#define BMCR_ISOLATE           0x0400  /* Disconnect DP83840 from MII */
+#define BMCR_PDOWN             0x0800  /* Powerdown the DP83840       */
+#define BMCR_ANENABLE          0x1000  /* Enable auto negotiation     */
+#define BMCR_SPEED100          0x2000  /* Select 100Mbps              */
+#define BMCR_LOOPBACK          0x4000  /* TXD loopback bits           */
+#define BMCR_RESET             0x8000  /* Reset the DP83840           */
+
+/* Basic mode status register. */
+#define BMSR_ERCAP             0x0001  /* Ext-reg capability          */
+#define BMSR_JCD               0x0002  /* Jabber detected             */
+#define BMSR_LSTATUS           0x0004  /* Link status                 */
+#define BMSR_ANEGCAPABLE       0x0008  /* Able to do auto-negotiation */
+#define BMSR_RFAULT            0x0010  /* Remote fault detected       */
+#define BMSR_ANEGCOMPLETE      0x0020  /* Auto-negotiation complete   */
+#define BMSR_RESV              0x07c0  /* Unused...                   */
+#define BMSR_10HALF            0x0800  /* Can do 10mbps, half-duplex  */
+#define BMSR_10FULL            0x1000  /* Can do 10mbps, full-duplex  */
+#define BMSR_100HALF           0x2000  /* Can do 100mbps, half-duplex */
+#define BMSR_100FULL           0x4000  /* Can do 100mbps, full-duplex */
+#define BMSR_100BASE4          0x8000  /* Can do 100mbps, 4k packets  */
+
+/* Advertisement control register. */
+#define ADVERTISE_SLCT         0x001f  /* Selector bits               */
+#define ADVERTISE_CSMA         0x0001  /* Only selector supported     */
+#define ADVERTISE_10HALF       0x0020  /* Try for 10mbps half-duplex  */
+#define ADVERTISE_10FULL       0x0040  /* Try for 10mbps full-duplex  */
+#define ADVERTISE_100HALF      0x0080  /* Try for 100mbps half-duplex */
+#define ADVERTISE_100FULL      0x0100  /* Try for 100mbps full-duplex */
+#define ADVERTISE_100BASE4     0x0200  /* Try for 100mbps 4k packets  */
+#define ADVERTISE_RESV         0x1c00  /* Unused...                   */
+#define ADVERTISE_RFAULT       0x2000  /* Say we can detect faults    */
+#define ADVERTISE_LPACK                0x4000  /* Ack link partners response  */
+#define ADVERTISE_NPAGE                0x8000  /* Next page bit               */
+
+#define ADVERTISE_FULL (ADVERTISE_100FULL | ADVERTISE_10FULL | \
+                       ADVERTISE_CSMA)
+#define ADVERTISE_ALL (ADVERTISE_10HALF | ADVERTISE_10FULL | \
+                      ADVERTISE_100HALF | ADVERTISE_100FULL)
+
+/* Link partner ability register. */
+#define LPA_SLCT               0x001f  /* Same as advertise selector  */
+#define LPA_10HALF             0x0020  /* Can do 10mbps half-duplex   */
+#define LPA_10FULL             0x0040  /* Can do 10mbps full-duplex   */
+#define LPA_100HALF            0x0080  /* Can do 100mbps half-duplex  */
+#define LPA_100FULL            0x0100  /* Can do 100mbps full-duplex  */
+#define LPA_100BASE4           0x0200  /* Can do 100mbps 4k packets   */
+#define LPA_RESV               0x1c00  /* Unused...                   */
+#define LPA_RFAULT             0x2000  /* Link partner faulted        */
+#define LPA_LPACK              0x4000  /* Link partner acked us       */
+#define LPA_NPAGE              0x8000  /* Next page bit               */
+
+#define LPA_DUPLEX             (LPA_10FULL | LPA_100FULL)
+#define LPA_100                        (LPA_100FULL | LPA_100HALF | LPA_100BASE4)
+
+/* Expansion register for auto-negotiation. */
+#define EXPANSION_NWAY         0x0001  /* Can do N-way auto-nego      */
+#define EXPANSION_LCWP         0x0002  /* Got new RX page code word   */
+#define EXPANSION_ENABLENPAGE  0x0004  /* This enables npage words    */
+#define EXPANSION_NPCAPABLE    0x0008  /* Link partner supports npage */
+#define EXPANSION_MFAULTS      0x0010  /* Multiple faults detected    */
+#define EXPANSION_RESV         0xffe0  /* Unused...                   */
+
+/* N-way test register. */
+#define NWAYTEST_RESV1         0x00ff  /* Unused...                   */
+#define NWAYTEST_LOOPBACK      0x0100  /* Enable loopback for N-way   */
+#define NWAYTEST_RESV2         0xfe00  /* Unused...                   */
+
+
+/**
+ * mii_nway_result
+ * @negotiated: value of MII ANAR and'd with ANLPAR
+ *
+ * Given a set of MII abilities, check each bit and returns the
+ * currently supported media, in the priority order defined by
+ * IEEE 802.3u.  We use LPA_xxx constants but note this is not the
+ * value of LPA solely, as described above.
+ *
+ * The one exception to IEEE 802.3u is that 100baseT4 is placed
+ * between 100T-full and 100T-half.  If your phy does not support
+ * 100T4 this is fine. If your phy places 100T4 elsewhere in the
+ * priority order, you will need to roll your own function.
+ */
+static inline unsigned int mii_nway_result (unsigned int negotiated)
+{
+       unsigned int ret;
+
+       if (negotiated & LPA_100FULL)
+               ret = LPA_100FULL;
+       else if (negotiated & LPA_100BASE4)
+               ret = LPA_100BASE4;
+       else if (negotiated & LPA_100HALF)
+               ret = LPA_100HALF;
+       else if (negotiated & LPA_10FULL)
+               ret = LPA_10FULL;
+       else
+               ret = LPA_10HALF;
+
+       return ret;
+}
+
+/**
+ * mii_duplex
+ * @duplex_lock: Non-zero if duplex is locked at full
+ * @negotiated: value of MII ANAR and'd with ANLPAR
+ *
+ * A small helper function for a common case.  Returns one
+ * if the media is operating or locked at full duplex, and
+ * returns zero otherwise.
+ */
+static inline unsigned int mii_duplex (unsigned int duplex_lock,
+                                      unsigned int negotiated)
+{
+       if (duplex_lock)
+               return 1;
+       if (mii_nway_result(negotiated) & LPA_DUPLEX)
+               return 1;
+       return 0;
+}
+
+
+#endif /* __LINUX_MII_H__ */
index 4d05aa92d98f3d293d0c4275cc42f534480b673a..37f2924df18881bf6569c21607cc9d19518f794a 100644 (file)
@@ -7,7 +7,7 @@
 extern "C" {
 #endif
 
-#define S_IFMT  00170000       /* type of file */
+#define S_IFMT 00170000        /* type of file */
 #define S_IFSOCK 0140000       /* named socket */
 #define S_IFLNK         0120000        /* symbolic link */
 #define S_IFREG  0100000       /* regular */
@@ -49,25 +49,26 @@ struct stat {
        ino_t           st_ino;         /* file id */
        mode_t          st_mode;        /* ownership/protection */
        nlink_t         st_nlink;       /* number of links */
-       uid_t           st_uid;         /* user id */
-       gid_t           st_gid;         /* group id */
+       uid_t           st_uid;         /* user id */
+       gid_t           st_gid;         /* group id */
        dev_t           st_rdev;
        off_t           st_size;        /* file size in # of bytes */
-       unsigned long   st_blksize;     /* block size */
-       unsigned long   st_blocks;      /* file size in # of blocks */
-       unsigned long   st_atime;       /* time file was last accessed */
-       unsigned long   __unused1;
-       unsigned long   st_mtime;       /* time file was last modified */
-       unsigned long   __unused2;
-       unsigned long   st_ctime;       /* time file status was last changed */
-       unsigned long   __unused3;
-       unsigned long   __unused4;
-       unsigned long   __unused5;
+       unsigned long   st_blksize;     /* block size */
+       unsigned long   st_blocks;      /* file size in # of blocks */
+       unsigned long   st_atime;       /* time file was last accessed */
+       unsigned long   __unused1;
+       unsigned long   st_mtime;       /* time file was last modified */
+       unsigned long   __unused2;
+       unsigned long   st_ctime;       /* time file status was last changed */
+       unsigned long   __unused3;
+       unsigned long   __unused4;
+       unsigned long   __unused5;
 };
 
 #endif /* __PPC__ */
 
-#if defined (__ARM__) || defined (__I386__) || defined (__M68K__) || defined (__bfin__)
+#if defined (__ARM__) || defined (__I386__) || defined (__M68K__) || defined (__bfin__) ||\
+       defined (__microblaze__)
 
 struct stat {
        unsigned short st_dev;
@@ -97,34 +98,59 @@ struct stat {
 #if defined (__MIPS__)
 
 struct stat {
-       dev_t           st_dev;
-       long            st_pad1[3];
-       ino_t           st_ino;
-       mode_t          st_mode;
-       nlink_t         st_nlink;
-       uid_t           st_uid;
-       gid_t           st_gid;
-       dev_t           st_rdev;
-       long            st_pad2[2];
-       off_t           st_size;
-       long            st_pad3;
+       dev_t           st_dev;
+       long            st_pad1[3];
+       ino_t           st_ino;
+       mode_t          st_mode;
+       nlink_t         st_nlink;
+       uid_t           st_uid;
+       gid_t           st_gid;
+       dev_t           st_rdev;
+       long            st_pad2[2];
+       off_t           st_size;
+       long            st_pad3;
        /*
         * Actually this should be timestruc_t st_atime, st_mtime and st_ctime
         * but we don't have it under Linux.
         */
-       time_t          st_atime;
-       long            reserved0;
-       time_t          st_mtime;
-       long            reserved1;
-       time_t          st_ctime;
-       long            reserved2;
-       long            st_blksize;
-       long            st_blocks;
-       long            st_pad4[14];
+       time_t          st_atime;
+       long            reserved0;
+       time_t          st_mtime;
+       long            reserved1;
+       time_t          st_ctime;
+       long            reserved2;
+       long            st_blksize;
+       long            st_blocks;
+       long            st_pad4[14];
 };
 
 #endif /* __MIPS__ */
 
+#if defined(__AVR32__)
+
+struct stat {
+       unsigned long st_dev;
+       unsigned long st_ino;
+       unsigned short st_mode;
+       unsigned short st_nlink;
+       unsigned short st_uid;
+       unsigned short st_gid;
+       unsigned long  st_rdev;
+       unsigned long  st_size;
+       unsigned long  st_blksize;
+       unsigned long  st_blocks;
+       unsigned long  st_atime;
+       unsigned long  st_atime_nsec;
+       unsigned long  st_mtime;
+       unsigned long  st_mtime_nsec;
+       unsigned long  st_ctime;
+       unsigned long  st_ctime_nsec;
+       unsigned long  __unused4;
+       unsigned long  __unused5;
+};
+
+#endif /* __AVR32__ */
+
 #ifdef __cplusplus
 }
 #endif
index c2a4ff587745d69bb9bedd394b58726f38a6c322..60fc214b3e224658274886ead3348bf2c78b6a6d 100644 (file)
 #define SPR_8321E_REV11                        0x80660011
 #define SPR_8321_REV11                 0x80670011
 
+#define SPR_8311_REV10                 0x80B30010
+#define SPR_8311E_REV10                        0x80B20010
+#define SPR_8313_REV10                 0x80B10010
+#define SPR_8313E_REV10                        0x80B00010
+
 /* SPCR - System Priority Configuration Register
  */
 #define SPCR_PCIHPE                    0x10000000      /* PCI Highest Priority Enable */
 #define SPCR_TSEC2BDP_SHIFT            (31-29)
 #define SPCR_TSEC2EP                   0x00000003      /* TSEC2 emergency priority */
 #define SPCR_TSEC2EP_SHIFT             (31-31)
+
+#elif defined(CONFIG_MPC831X)
+/* SPCR bits - MPC831x specific */
+#define SPCR_TSECDP                    0x00003000      /* TSEC data priority */
+#define SPCR_TSECDP_SHIFT              (31-19)
+#define SPCR_TSECEP                    0x00000C00      /* TSEC emergency priority */
+#define SPCR_TSECEP_SHIFT              (31-21)
+#define SPCR_TSECBDP                   0x00000300      /* TSEC buffer descriptor priority */
+#define SPCR_TSECBDP_SHIFT             (31-23)
 #endif
 
 /* SICRL/H - System I/O Configuration Register Low/High
 #define SICRL_PCI_MSRC                 0x10000000
 #define SICRL_URT_CTPR                 0x06000000
 #define SICRL_IRQ_CTPR                 0x00C00000
+
+#elif defined(CONFIG_MPC831X)
+/* SICRL bits - MPC831x specific */
+#define SICRL_LBC                      0x30000000
+#define SICRL_UART                     0x0C000000
+#define SICRL_SPI_A                    0x03000000
+#define SICRL_SPI_B                    0x00C00000
+#define SICRL_SPI_C                    0x00300000
+#define SICRL_SPI_D                    0x000C0000
+#define SICRL_USBDR                    0x00000C00
+#define SICRL_ETSEC1_A                 0x0000000C
+#define SICRL_ETSEC2_A                 0x00000003
+
+/* SICRH bits - MPC831x specific */
+#define SICRH_INTR_A                   0x02000000
+#define SICRH_INTR_B                   0x00C00000
+#define SICRH_IIC                      0x00300000
+#define SICRH_ETSEC2_B                 0x000C0000
+#define SICRH_ETSEC2_C                 0x00030000
+#define SICRH_ETSEC2_D                 0x0000C000
+#define SICRH_ETSEC2_E                 0x00003000
+#define SICRH_ETSEC2_F                 0x00000C00
+#define SICRH_ETSEC2_G                 0x00000300
+#define SICRH_ETSEC1_B                 0x00000080
+#define SICRH_ETSEC1_C                 0x00000060
+#define SICRH_GTX1_DLY                 0x00000008
+#define SICRH_GTX2_DLY                 0x00000004
+#define SICRH_TSOBI1                   0x00000002
+#define SICRH_TSOBI2                   0x00000001
+
 #endif
 
 /* SWCRR - System Watchdog Control Register
 #define HRCWH_ROM_LOC_LOCAL_16BIT      0x00600000
 #define HRCWH_ROM_LOC_LOCAL_32BIT      0x00700000
 
+#if defined(CONFIG_MPC831X)
+#define HRCWH_ROM_LOC_NAND_SP_8BIT     0x00100000
+#define HRCWH_ROM_LOC_NAND_SP_16BIT    0x00200000
+#define HRCWH_ROM_LOC_NAND_LP_8BIT     0x00500000
+#define HRCWH_ROM_LOC_NAND_LP_16BIT    0x00600000
+
+#define HRCWH_RL_EXT_LEGACY            0x00000000
+#define HRCWH_RL_EXT_NAND              0x00040000
+
+#define HRCWH_TSEC1M_IN_MII            0x00000000
+#define HRCWH_TSEC1M_IN_RMII           0x00002000
+#define HRCWH_TSEC1M_IN_RGMII          0x00006000
+#define HRCWH_TSEC1M_IN_RTBI           0x0000A000
+#define HRCWH_TSEC1M_IN_SGMII          0x0000C000
+
+#define HRCWH_TSEC2M_IN_MII            0x00000000
+#define HRCWH_TSEC2M_IN_RMII           0x00000400
+#define HRCWH_TSEC2M_IN_RGMII          0x00000C00
+#define HRCWH_TSEC2M_IN_RTBI           0x00001400
+#define HRCWH_TSEC2M_IN_SGMII          0x00001800
+#endif
+
 #if defined(CONFIG_MPC834X)
 #define HRCWH_TSEC1M_IN_RGMII          0x00000000
 #define HRCWH_TSEC1M_IN_RTBI           0x00004000
 #define SCCR_TSEC2CM_1                 0x10000000
 #define SCCR_TSEC2CM_2                 0x20000000
 #define SCCR_TSEC2CM_3                 0x30000000
+
+#elif defined(CONFIG_MPC831X)
+/* TSEC1 bits are for TSEC2 as well */
+#define SCCR_TSEC1CM                   0xc0000000
+#define SCCR_TSEC1CM_SHIFT             30
+#define SCCR_TSEC1CM_1                 0x40000000
+#define SCCR_TSEC1CM_2                 0x80000000
+#define SCCR_TSEC1CM_3                 0xC0000000
+
+#define SCCR_TSEC1ON                   0x20000000
+#define SCCR_TSEC2ON                   0x10000000
+
 #endif
 
 #define SCCR_USBMPHCM                  0x00c00000
 #define CSCONFIG_COL_BIT_10            0x00000002
 #define CSCONFIG_COL_BIT_11            0x00000003
 
+/* TIMING_CFG_0 - DDR SDRAM Timing Configuration 0
+ */
+#define TIMING_CFG0_RWT                        0xC0000000
+#define TIMING_CFG0_RWT_SHIFT          30
+#define TIMING_CFG0_WRT                        0x30000000
+#define TIMING_CFG0_WRT_SHIFT          28
+#define TIMING_CFG0_RRT                        0x0C000000
+#define TIMING_CFG0_RRT_SHIFT          26
+#define TIMING_CFG0_WWT                        0x03000000
+#define TIMING_CFG0_WWT_SHIFT          24
+#define TIMING_CFG0_ACT_PD_EXIT                0x00700000
+#define TIMING_CFG0_ACT_PD_EXIT_SHIFT  20
+#define TIMING_CFG0_PRE_PD_EXIT                0x00070000
+#define TIMING_CFG0_PRE_PD_EXIT_SHIFT  16
+#define TIMING_CFG0_ODT_PD_EXIT                0x00000F00
+#define TIMING_CFG0_ODT_PD_EXIT_SHIFT  8
+#define TIMING_CFG0_MRS_CYC            0x00000F00
+#define TIMING_CFG0_MRS_CYC_SHIFT      0
+
 /* TIMING_CFG_1 - DDR SDRAM Timing Configuration 1
  */
 #define TIMING_CFG1_PRETOACT           0x70000000
 #define TIMING_CFG2_WR_DATA_DELAY_SHIFT        10
 #define TIMING_CFG2_CPO_DEF            0x00000000      /* default (= CASLAT + 1) */
 
+#define TIMING_CFG2_ADD_LAT            0x70000000
+#define TIMING_CFG2_ADD_LAT_SHIFT      28
+#define TIMING_CFG2_WR_LAT_DELAY       0x00380000
+#define TIMING_CFG2_WR_LAT_DELAY_SHIFT 19
+#define TIMING_CFG2_RD_TO_PRE          0x0000E000
+#define TIMING_CFG2_RD_TO_PRE_SHIFT    13
+#define TIMING_CFG2_CKE_PLS            0x000001C0
+#define TIMING_CFG2_CKE_PLS_SHIFT      6
+#define TIMING_CFG2_FOUR_ACT           0x0000003F
+#define TIMING_CFG2_FOUR_ACT_SHIFT     0
+
 /* DDR_SDRAM_CFG - DDR SDRAM Control Configuration
  */
 #define SDRAM_CFG_MEM_EN               0x80000000
 #define SDRAM_CFG_ECC_EN               0x20000000
 #define SDRAM_CFG_RD_EN                        0x10000000
 #define SDRAM_CFG_SDRAM_TYPE           0x03000000
+#define SDRAM_CFG_SDRAM_TYPE_DDR       0x02000000
 #define SDRAM_CFG_SDRAM_TYPE_SHIFT     24
 #define SDRAM_CFG_DYN_PWR              0x00200000
 #define SDRAM_CFG_32_BE                        0x00080000
 #define SDRAM_CFG_8_BE                 0x00040000
 #define SDRAM_CFG_NCAP                 0x00020000
 #define SDRAM_CFG_2T_EN                        0x00008000
-#define SDRAM_CFG_SDRAM_TYPE_DDR       0x02000000
+#define SDRAM_CFG_BI                   0x00000001
 
 /* DDR_SDRAM_MODE - DDR SDRAM Mode Register
  */
 #define BR_PS_32                       0x00001800      /* Port Size 32 bit */
 #define BR_DECC                                0x00000600
 #define BR_DECC_SHIFT                  9
+#define BR_DECC_OFF                    0x00000000
+#define BR_DECC_CHK                    0x00000200
+#define BR_DECC_CHK_GEN                        0x00000400
 #define BR_WP                          0x00000100
 #define BR_WP_SHIFT                    8
 #define BR_MSEL                                0x000000E0
 #define BR_MSEL_SHIFT                  5
 #define BR_MS_GPCM                     0x00000000      /* GPCM */
+#define BR_MS_FCM                      0x00000020      /* FCM */
 #define BR_MS_SDRAM                    0x00000060      /* SDRAM */
 #define BR_MS_UPMA                     0x00000080      /* UPMA */
 #define BR_MS_UPMB                     0x000000A0      /* UPMB */
 #define OR_GPCM_EAD                    0x00000001
 #define OR_GPCM_EAD_SHIFT              0
 
+#define OR_FCM_AM                      0xFFFF8000
+#define OR_FCM_AM_SHIFT                                15
+#define OR_FCM_BCTLD                   0x00001000
+#define OR_FCM_BCTLD_SHIFT                     12
+#define OR_FCM_PGS                     0x00000400
+#define OR_FCM_PGS_SHIFT                       10
+#define OR_FCM_CSCT                    0x00000200
+#define OR_FCM_CSCT_SHIFT                       9
+#define OR_FCM_CST                     0x00000100
+#define OR_FCM_CST_SHIFT                        8
+#define OR_FCM_CHT                     0x00000080
+#define OR_FCM_CHT_SHIFT                        7
+#define OR_FCM_SCY                     0x00000070
+#define OR_FCM_SCY_SHIFT                        4
+#define OR_FCM_SCY_1                   0x00000010
+#define OR_FCM_SCY_2                   0x00000020
+#define OR_FCM_SCY_3                   0x00000030
+#define OR_FCM_SCY_4                   0x00000040
+#define OR_FCM_SCY_5                   0x00000050
+#define OR_FCM_SCY_6                   0x00000060
+#define OR_FCM_SCY_7                   0x00000070
+#define OR_FCM_RST                     0x00000008
+#define OR_FCM_RST_SHIFT                        3
+#define OR_FCM_TRLX                    0x00000004
+#define OR_FCM_TRLX_SHIFT                       2
+#define OR_FCM_EHTR                    0x00000002
+#define OR_FCM_EHTR_SHIFT                       1
+
 #define OR_UPM_AM                      0xFFFF8000
 #define OR_UPM_AM_SHIFT                        15
 #define OR_UPM_XAM                     0x00006000
 #define PIWAR_IWS_1G                   0x0000001D
 #define PIWAR_IWS_2G                   0x0000001E
 
+/* PMCCR1 - PCI Configuration Register 1
+ */
+#define PMCCR1_POWER_OFF               0x00000020
+
+/* FMR - Flash Mode Register
+ */
+#define FMR_CWTO               0x0000F000
+#define FMR_CWTO_SHIFT         12
+#define FMR_BOOT               0x00000800
+#define FMR_ECCM               0x00000100
+#define FMR_AL                 0x00000030
+#define FMR_AL_SHIFT           4
+#define FMR_OP                 0x00000003
+#define FMR_OP_SHIFT           0
+
+/* FIR - Flash Instruction Register
+ */
+#define FIR_OP0                        0xF0000000
+#define FIR_OP0_SHIFT          28
+#define FIR_OP1                        0x0F000000
+#define FIR_OP1_SHIFT          24
+#define FIR_OP2                        0x00F00000
+#define FIR_OP2_SHIFT          20
+#define FIR_OP3                        0x000F0000
+#define FIR_OP3_SHIFT          16
+#define FIR_OP4                        0x0000F000
+#define FIR_OP4_SHIFT          12
+#define FIR_OP5                        0x00000F00
+#define FIR_OP5_SHIFT          8
+#define FIR_OP6                        0x000000F0
+#define FIR_OP6_SHIFT          4
+#define FIR_OP7                        0x0000000F
+#define FIR_OP7_SHIFT          0
+#define FIR_OP_NOP             0x0 /* No operation and end of sequence */
+#define FIR_OP_CA              0x1 /* Issue current column address */
+#define FIR_OP_PA              0x2 /* Issue current block+page address */
+#define FIR_OP_UA              0x3 /* Issue user defined address */
+#define FIR_OP_CM0             0x4 /* Issue command from FCR[CMD0] */
+#define FIR_OP_CM1             0x5 /* Issue command from FCR[CMD1] */
+#define FIR_OP_CM2             0x6 /* Issue command from FCR[CMD2] */
+#define FIR_OP_CM3             0x7 /* Issue command from FCR[CMD3] */
+#define FIR_OP_WB              0x8 /* Write FBCR bytes from FCM buffer */
+#define FIR_OP_WS              0x9 /* Write 1 or 2 bytes from MDR[AS] */
+#define FIR_OP_RB              0xA /* Read FBCR bytes to FCM buffer */
+#define FIR_OP_RS              0xB /* Read 1 or 2 bytes to MDR[AS] */
+#define FIR_OP_CW0             0xC /* Wait then issue FCR[CMD0] */
+#define FIR_OP_CW1             0xD /* Wait then issue FCR[CMD1] */
+#define FIR_OP_RBW             0xE /* Wait then read FBCR bytes */
+#define FIR_OP_RSW             0xF /* Wait then read 1 or 2 bytes */
+
+/* FCR - Flash Command Register
+ */
+#define FCR_CMD0               0xFF000000
+#define FCR_CMD0_SHIFT         24
+#define FCR_CMD1               0x00FF0000
+#define FCR_CMD1_SHIFT         16
+#define FCR_CMD2               0x0000FF00
+#define FCR_CMD2_SHIFT         8
+#define FCR_CMD3               0x000000FF
+#define FCR_CMD3_SHIFT         0
+
+/* FBAR - Flash Block Address Register
+ */
+#define FBAR_BLK               0x00FFFFFF
+
+/* FPAR - Flash Page Address Register
+ */
+#define FPAR_SP_PI             0x00007C00
+#define FPAR_SP_PI_SHIFT       10
+#define FPAR_SP_MS             0x00000200
+#define FPAR_SP_CI             0x000001FF
+#define FPAR_SP_CI_SHIFT       0
+#define FPAR_LP_PI             0x0003F000
+#define FPAR_LP_PI_SHIFT       12
+#define FPAR_LP_MS             0x00000800
+#define FPAR_LP_CI             0x000007FF
+#define FPAR_LP_CI_SHIFT       0
+
+/* LTESR - Transfer Error Status Register
+ */
+#define LTESR_BM               0x80000000
+#define LTESR_FCT              0x40000000
+#define LTESR_PAR              0x20000000
+#define LTESR_WP               0x04000000
+#define LTESR_ATMW             0x00800000
+#define LTESR_ATMR             0x00400000
+#define LTESR_CS               0x00080000
+#define LTESR_CC               0x00000001
+
+/* DDR Control Driver Register
+ */
+#define DDRCDR_EN              0x40000000
+#define DDRCDR_PZ              0x3C000000
+#define DDRCDR_PZ_MAXZ         0x00000000
+#define DDRCDR_PZ_HIZ          0x20000000
+#define DDRCDR_PZ_NOMZ         0x30000000
+#define DDRCDR_PZ_LOZ          0x38000000
+#define DDRCDR_PZ_MINZ         0x3C000000
+#define DDRCDR_NZ              0x3C000000
+#define DDRCDR_NZ_MAXZ         0x00000000
+#define DDRCDR_NZ_HIZ          0x02000000
+#define DDRCDR_NZ_NOMZ         0x03000000
+#define DDRCDR_NZ_LOZ          0x03800000
+#define DDRCDR_NZ_MINZ         0x03C00000
+#define DDRCDR_ODT             0x00080000
+#define DDRCDR_DDR_CFG         0x00040000
+#define DDRCDR_M_ODR           0x00000002
+#define DDRCDR_Q_DRN           0x00000001
+
+#ifndef __ASSEMBLY__
+struct pci_region;
+void mpc83xx_pci_init(int num_buses, struct pci_region **reg, int warmboot);
+#endif
+
 #endif /* __MPC83XX_H__ */
index bc8ba3f2da2872ae9debdc9c2c9306e7b5678586..673bfed16e9832054835420e7e7d3ff4f5f3be53 100644 (file)
@@ -9,6 +9,15 @@
 
 #define EXC_OFF_SYS_RESET      0x0100  /* System reset offset */
 
+
+/*
+ * platform register addresses
+ */
+
+#define GUTS_SVR       (CFG_CCSRBAR + 0xE00A4)
+#define MCM_ABCR       (CFG_CCSRBAR + 0x01000)
+#define MCM_DBCR       (CFG_CCSRBAR + 0x01008)
+
 /*
  * l2cr values.  Look in config_<BOARD>.h for the actual setup
  */
index a2503a93d22d82b3e86fa77b2a0cd4c7dda702ce..fffae4dd16afeb3ed106a4137e43d63904db1628 100644 (file)
 #define sdrcfga (SDR_DCR_BASE+0x0)     /* ADDR */
 #define sdrcfgd (SDR_DCR_BASE+0x1)     /* Data */
 
-#define mtsdr(reg, data) mtdcr(sdrcfga,reg);mtdcr(sdrcfgd,data)
-#define mfsdr(reg, data) mtdcr(sdrcfga,reg);data = mfdcr(sdrcfgd)
+#define mtsdr(reg, data)       do { mtdcr(sdrcfga,reg);mtdcr(sdrcfgd,data); } while (0)
+#define mfsdr(reg, data)       do { mtdcr(sdrcfga,reg);data = mfdcr(sdrcfgd); } while (0)
 
 #define sdrnand0       0x4000
 #define sdrultra0      0x4040
 /*
  * Macro for accessing the indirect CPR register
  */
-#define mtcpr(reg, data)  mtdcr(cprcfga,reg);mtdcr(cprcfgd,data)
-#define mfcpr(reg, data)  mtdcr(cprcfga,reg);data = mfdcr(cprcfgd)
+#define mtcpr(reg, data)       do { mtdcr(cprcfga,reg);mtdcr(cprcfgd,data); } while (0)
+#define mfcpr(reg, data)       do { mtdcr(cprcfga,reg);data = mfdcr(cprcfgd); } while (0)
 
 #define CPR_CLKUPD_ENPLLCH_EN  0x40000000     /* Enable CPR PLL Changes */
 #define CPR_CLKUPD_ENDVCH_EN   0x20000000     /* Enable CPR Sys. Div. Changes */
index bc1d7aad73e21a8535cfe5014bb986793a7164cc..07f75de08e67105573d400459e8fa5199f9ccd3c 100644 (file)
 /*----------------------------------------------------------------------------+
 | Clock / Power-on-reset DCR's.
 +----------------------------------------------------------------------------*/
-#define CPR0_CFGADDR                   0x00C
-#define CPR0_CFGDATA                   0x00D
-
 #define CPR0_CLKUPD                    0x20
 #define CPR0_CLKUPD_BSY_MASK           0x80000000
 #define CPR0_CLKUPD_BSY_COMPLETED      0x00000000
 #define mtsdr(reg, data)       do { mtdcr(sdrcfga,reg);mtdcr(sdrcfgd,data); } while (0)
 #define mfsdr(reg, data)       do { mtdcr(sdrcfga,reg);data = mfdcr(sdrcfgd); } while (0)
 
+/*
+ * All 44x except 440GP have CPR registers (indirect DCR)
+ */
+#if !defined(CONFIG_440GP)
+#define CPR0_CFGADDR           0x00C
+#define CPR0_CFGDATA           0x00D
+
+#define mtcpr(reg, data)       do { \
+               mtdcr(CPR0_CFGADDR, reg); \
+               mtdcr(CPR0_CFGDATA, data); \
+       } while (0)
+
+#define mfcpr(reg, data)       do { \
+               mtdcr(CPR0_CFGADDR, reg); \
+               data = mfdcr(CPR0_CFGDATA); \
+       } while (0)
+#endif
 
 #ifndef __ASSEMBLY__
 
index db4c60fe3f3fe6087d16297622b00fcd70edc85d..71a202fe36ec4412a812ebba4589bcd9582bfcca 100644 (file)
@@ -355,6 +355,18 @@ void status_led_set  (int led, int state);
 # define STATUS_LED_ACTIVE     0               /* LED on for bit == 0 */
 # define STATUS_LED_BOOT       0               /* LED 0 used for boot status */
 
+#elif defined(CONFIG_MOTIONPRO)
+
+#define STATUS_LED_BIT         ((vu_long *) MPC5XXX_GPT6_ENABLE)
+#define STATUS_LED_PERIOD      (CFG_HZ / 10)
+#define STATUS_LED_STATE       STATUS_LED_BLINKING
+
+#define STATUS_LED_BIT1                ((vu_long *) MPC5XXX_GPT7_ENABLE)
+#define STATUS_LED_PERIOD1     (CFG_HZ / 10)
+#define STATUS_LED_STATE1      STATUS_LED_OFF
+
+#define STATUS_LED_BOOT                0       /* LED 0 used for boot status */
+
 #else
 # error Status LED configuration missing
 #endif
diff --git a/include/tsi108.h b/include/tsi108.h
new file mode 100644 (file)
index 0000000..ba62e7a
--- /dev/null
@@ -0,0 +1,221 @@
+/*****************************************************************************
+ * (C) Copyright 2003;  Tundra Semiconductor Corp.
+ * (C) Copyright 2006;  Freescale Semiconductor Corp.
+ *
+ * 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
+ *****************************************************************************/
+
+/*
+ * FILENAME: tsi108.h
+ *
+ * Originator: Alex Bounine
+ *
+ * DESCRIPTION:
+ * Common definitions for the Tundra Tsi108 bridge chip
+ *
+ */
+
+#ifndef _TSI108_H_
+#define _TSI108_H_
+
+#define TSI108_HLP_REG_OFFSET  (0x0000)
+#define TSI108_PCI_REG_OFFSET  (0x1000)
+#define TSI108_CLK_REG_OFFSET  (0x2000)
+#define TSI108_PB_REG_OFFSET   (0x3000)
+#define TSI108_SD_REG_OFFSET   (0x4000)
+#define TSI108_MPIC_REG_OFFSET (0x7400)
+
+#define PB_ID                  (0x000)
+#define PB_RSR                 (0x004)
+#define PB_BUS_MS_SELECT       (0x008)
+#define PB_ISR                 (0x00C)
+#define PB_ARB_CTRL            (0x018)
+#define PB_PVT_CTRL2           (0x034)
+#define PB_SCR                 (0x400)
+#define PB_ERRCS               (0x404)
+#define PB_AERR                        (0x408)
+#define PB_REG_BAR             (0x410)
+#define PB_OCN_BAR1            (0x414)
+#define PB_OCN_BAR2            (0x418)
+#define PB_SDRAM_BAR1          (0x41C)
+#define PB_SDRAM_BAR2          (0x420)
+#define PB_MCR                 (0xC00)
+#define PB_MCMD                        (0xC04)
+
+#define HLP_B0_ADDR            (0x000)
+#define HLP_B1_ADDR            (0x010)
+#define HLP_B2_ADDR            (0x020)
+#define HLP_B3_ADDR            (0x030)
+
+#define HLP_B0_MASK            (0x004)
+#define HLP_B1_MASK            (0x014)
+#define HLP_B2_MASK            (0x024)
+#define HLP_B3_MASK            (0x034)
+
+#define HLP_B0_CTRL0           (0x008)
+#define HLP_B1_CTRL0           (0x018)
+#define HLP_B2_CTRL0           (0x028)
+#define HLP_B3_CTRL0           (0x038)
+
+#define HLP_B0_CTRL1           (0x00C)
+#define HLP_B1_CTRL1           (0x01C)
+#define HLP_B2_CTRL1           (0x02C)
+#define HLP_B3_CTRL1           (0x03C)
+
+#define PCI_CSR                        (0x004)
+#define PCI_P2O_BAR0           (0x010)
+#define PCI_P2O_BAR0_UPPER     (0x014)
+#define PCI_P2O_BAR2           (0x018)
+#define PCI_P2O_BAR2_UPPER     (0x01C)
+#define PCI_P2O_BAR3           (0x020)
+#define PCI_P2O_BAR3_UPPER     (0x024)
+
+#define PCI_MISC_CSR           (0x040)
+#define PCI_P2O_PAGE_SIZES     (0x04C)
+
+#define PCI_PCIX_STAT          (0x0F4)
+
+#define PCI_IRP_STAT           (0x184)
+
+#define PCI_PFAB_BAR0          (0x204)
+#define PCI_PFAB_BAR0_UPPER    (0x208)
+#define PCI_PFAB_IO            (0x20C)
+#define PCI_PFAB_IO_UPPER      (0x210)
+
+#define PCI_PFAB_MEM32         (0x214)
+#define PCI_PFAB_MEM32_REMAP   (0x218)
+#define PCI_PFAB_MEM32_MASK    (0x21C)
+
+#define CG_PLL0_CTRL0          (0x210)
+#define CG_PLL0_CTRL1          (0x214)
+#define CG_PLL1_CTRL0          (0x220)
+#define CG_PLL1_CTRL1          (0x224)
+#define CG_PWRUP_STATUS                (0x234)
+
+#define MPIC_CSR(n) (0x30C + (n * 0x40))
+
+#define SD_CTRL                        (0x000)
+#define SD_STATUS              (0x004)
+#define SD_TIMING              (0x008)
+#define SD_REFRESH             (0x00C)
+#define SD_INT_STATUS          (0x010)
+#define SD_INT_ENABLE          (0x014)
+#define SD_INT_SET             (0x018)
+#define SD_D0_CTRL             (0x020)
+#define SD_D1_CTRL             (0x024)
+#define SD_D0_BAR              (0x028)
+#define SD_D1_BAR              (0x02C)
+#define SD_ECC_CTRL            (0x040)
+#define SD_DLL_STATUS          (0x250)
+
+#define TS_SD_CTRL_ENABLE      (1 << 31)
+
+#define PB_ERRCS_ES            (1 << 1)
+#define PB_ISR_PBS_RD_ERR      (1 << 8)
+#define PCI_IRP_STAT_P_CSR     (1 << 23)
+
+/*
+ * I2C : Register address offset definitions
+ */
+#define I2C_CNTRL1             (0x00000000)
+#define I2C_CNTRL2             (0x00000004)
+#define I2C_RD_DATA            (0x00000008)
+#define I2C_TX_DATA            (0x0000000c)
+
+/*
+ * I2C : Register Bit Masks and Reset Values
+ * definitions for every register
+ */
+
+/* I2C_CNTRL1 : Reset Value */
+#define I2C_CNTRL1_RESET_VALUE                         (0x0000000a)
+
+/* I2C_CNTRL1 : Register Bits Masks Definitions */
+#define I2C_CNTRL1_DEVCODE                             (0x0000000f)
+#define I2C_CNTRL1_PAGE                                        (0x00000700)
+#define I2C_CNTRL1_BYTADDR                             (0x00ff0000)
+#define I2C_CNTRL1_I2CWRITE                            (0x01000000)
+
+/* I2C_CNTRL1 : Read/Write Bit Mask Definition */
+#define I2C_CNTRL1_RWMASK                              (0x01ff070f)
+
+/* I2C_CNTRL1 : Unused/Reserved bits Definition */
+#define I2C_CNTRL1_RESERVED                            (0xfe00f8f0)
+
+/* I2C_CNTRL2 : Reset Value */
+#define I2C_CNTRL2_RESET_VALUE                         (0x00000000)
+
+/* I2C_CNTRL2 : Register Bits Masks Definitions */
+#define I2C_CNTRL2_SIZE                                        (0x00000003)
+#define I2C_CNTRL2_LANE                                        (0x0000000c)
+#define I2C_CNTRL2_MULTIBYTE                           (0x00000010)
+#define I2C_CNTRL2_START                               (0x00000100)
+#define I2C_CNTRL2_WR_STATUS                           (0x00010000)
+#define I2C_CNTRL2_RD_STATUS                           (0x00020000)
+#define I2C_CNTRL2_I2C_TO_ERR                          (0x04000000)
+#define I2C_CNTRL2_I2C_CFGERR                          (0x08000000)
+#define I2C_CNTRL2_I2C_CMPLT                           (0x10000000)
+
+/* I2C_CNTRL2 : Read/Write Bit Mask Definition */
+#define I2C_CNTRL2_RWMASK                              (0x0000011f)
+
+/* I2C_CNTRL2 : Unused/Reserved bits Definition */
+#define I2C_CNTRL2_RESERVED                            (0xe3fcfee0)
+
+/* I2C_RD_DATA : Reset Value */
+#define I2C_RD_DATA_RESET_VALUE                                (0x00000000)
+
+/* I2C_RD_DATA : Register Bits Masks Definitions */
+#define I2C_RD_DATA_RBYTE0                             (0x000000ff)
+#define I2C_RD_DATA_RBYTE1                             (0x0000ff00)
+#define I2C_RD_DATA_RBYTE2                             (0x00ff0000)
+#define I2C_RD_DATA_RBYTE3                             (0xff000000)
+
+/* I2C_RD_DATA : Read/Write Bit Mask Definition */
+#define I2C_RD_DATA_RWMASK                             (0x00000000)
+
+/* I2C_RD_DATA : Unused/Reserved bits Definition */
+#define I2C_RD_DATA_RESERVED                           (0x00000000)
+
+/* I2C_TX_DATA : Reset Value */
+#define I2C_TX_DATA_RESET_VALUE                                (0x00000000)
+
+/* I2C_TX_DATA : Register Bits Masks Definitions */
+#define I2C_TX_DATA_TBYTE0                             (0x000000ff)
+#define I2C_TX_DATA_TBYTE1                             (0x0000ff00)
+#define I2C_TX_DATA_TBYTE2                             (0x00ff0000)
+#define I2C_TX_DATA_TBYTE3                             (0xff000000)
+
+/* I2C_TX_DATA : Read/Write Bit Mask Definition */
+#define I2C_TX_DATA_RWMASK                             (0xffffffff)
+
+/* I2C_TX_DATA : Unused/Reserved bits Definition */
+#define I2C_TX_DATA_RESERVED                           (0x00000000)
+
+#define TSI108_I2C_OFFSET      0x7000  /* offset for general use I2C channel */
+#define TSI108_I2C_SDRAM_OFFSET        0x4400  /* offset for SPD I2C channel */
+
+#define I2C_EEPROM_DEVCODE     0xA     /* standard I2C EEPROM device code */
+
+/* I2C status codes */
+
+#define TSI108_I2C_SUCCESS     0
+#define TSI108_I2C_PARAM_ERR   1
+#define TSI108_I2C_TIMEOUT_ERR 2
+#define TSI108_I2C_IF_BUSY     3
+#define TSI108_I2C_IF_ERROR    4
+
+#endif         /* _TSI108_H_ */
index d128dfb53f075b01b8f73616b59a4af6f4553896..6095e2ff214aac67e4741e5a36ee531e2190d157 100644 (file)
@@ -27,7 +27,7 @@
 #include <asm/addrspace.h>
 #include <asm/io.h>
 #include <asm/setup.h>
-#include <asm/arch/platform.h>
+#include <asm/arch/clk.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -133,7 +133,7 @@ static struct tag *setup_clock_tags(struct tag *params)
        params->hdr.size = tag_size(tag_clock);
        params->u.clock.clock_id = ACLOCK_HSB;
        params->u.clock.clock_flags = 0;
-       params->u.clock.clock_hz = pm_get_clock_freq(CLOCK_HSB);
+       params->u.clock.clock_hz = get_hsb_clk_rate();
 #endif
 
        return tag_next(params);
index 02c106b80ede83c7a64b31a095bbe63ec49289f9..265328aa487696a11862aa12ae6e491fd60e64cb 100644 (file)
@@ -47,11 +47,14 @@ static unsigned long mem_malloc_start = 0;
 static unsigned long mem_malloc_end = 0;
 static unsigned long mem_malloc_brk = 0;
 
-/* The malloc area is wherever the board wants it to be */
+/* The malloc area is right below the monitor image in RAM */
 static void mem_malloc_init(void)
 {
-       mem_malloc_start = CFG_MALLOC_START;
-       mem_malloc_end = CFG_MALLOC_END;
+       unsigned long monitor_addr;
+
+       monitor_addr = CFG_MONITOR_BASE + gd->reloc_off;
+       mem_malloc_end = monitor_addr;
+       mem_malloc_start = mem_malloc_end - CFG_MALLOC_LEN;
        mem_malloc_brk = mem_malloc_start;
 
        printf("malloc: Using memory from 0x%08lx to 0x%08lx\n",
@@ -73,6 +76,50 @@ void *sbrk(ptrdiff_t increment)
        return ((void *)old);
 }
 
+#ifdef CFG_DMA_ALLOC_LEN
+#include <asm/cacheflush.h>
+#include <asm/io.h>
+
+static unsigned long dma_alloc_start;
+static unsigned long dma_alloc_end;
+static unsigned long dma_alloc_brk;
+
+static void dma_alloc_init(void)
+{
+       unsigned long monitor_addr;
+
+       monitor_addr = CFG_MONITOR_BASE + gd->reloc_off;
+       dma_alloc_end = monitor_addr - CFG_MALLOC_LEN;
+       dma_alloc_start = dma_alloc_end - CFG_DMA_ALLOC_LEN;
+       dma_alloc_brk = dma_alloc_start;
+
+       printf("DMA: Using memory from 0x%08lx to 0x%08lx\n",
+              dma_alloc_start, dma_alloc_end);
+
+       dcache_invalidate_range(cached(dma_alloc_start),
+                               dma_alloc_end - dma_alloc_start);
+}
+
+void *dma_alloc_coherent(size_t len, unsigned long *handle)
+{
+       unsigned long paddr = dma_alloc_brk;
+
+       if (dma_alloc_brk + len > dma_alloc_end)
+               return NULL;
+
+       dma_alloc_brk = ((paddr + len + CFG_DCACHE_LINESZ - 1)
+                        & ~(CFG_DCACHE_LINESZ - 1));
+
+       *handle = paddr;
+       return uncached(paddr);
+}
+#else
+static inline void dma_alloc_init(void)
+{
+
+}
+#endif
+
 static int init_baudrate(void)
 {
        char tmp[64];
@@ -122,40 +169,152 @@ static void display_flash_config (void)
        printf("at address 0x%08lx\n", gd->bd->bi_flashstart);
 }
 
-void start_u_boot (void)
+void board_init_f(ulong board_type)
 {
        gd_t gd_data;
+       gd_t *new_gd;
+       bd_t *bd;
+       unsigned long *new_sp;
+       unsigned long monitor_len;
+       unsigned long monitor_addr;
+       unsigned long addr;
+       long sdram_size;
 
        /* Initialize the global data pointer */
        memset(&gd_data, 0, sizeof(gd_data));
        gd = &gd_data;
 
-       monitor_flash_len = _edata - _text;
-
        /* Perform initialization sequence */
+       board_early_init_f();
        cpu_init();
-       timer_init();
        env_init();
        init_baudrate();
        serial_init();
        console_init_f();
        display_banner();
+       sdram_size = initdram(board_type);
+
+       /* If we have no SDRAM, we can't go on */
+       if (sdram_size <= 0)
+               panic("No working SDRAM available\n");
+
+       /*
+        * Now that we have DRAM mapped and working, we can
+        * relocate the code and continue running from DRAM.
+        *
+        * Reserve memory at end of RAM for (top down in that order):
+        *  - u-boot image
+        *  - heap for malloc()
+        *  - board info struct
+        *  - global data struct
+        *  - stack
+        */
+       addr = CFG_SDRAM_BASE + sdram_size;
+       monitor_len = _end - _text;
+
+       /*
+        * Reserve memory for u-boot code, data and bss.
+        * Round down to next 4 kB limit.
+        */
+       addr -= monitor_len;
+       addr &= ~(4096UL - 1);
+       monitor_addr = addr;
+
+       /* Reserve memory for malloc() */
+       addr -= CFG_MALLOC_LEN;
+
+#ifdef CFG_DMA_ALLOC_LEN
+       /* Reserve DMA memory (must be cache aligned) */
+       addr &= ~(CFG_DCACHE_LINESZ - 1);
+       addr -= CFG_DMA_ALLOC_LEN;
+#endif
 
-       board_init_memories();
-       mem_malloc_init();
+       /* Allocate a Board Info struct on a word boundary */
+       addr -= sizeof(bd_t);
+       addr &= ~3UL;
+       gd->bd = bd = (bd_t *)addr;
+
+       /* Allocate a new global data copy on a 8-byte boundary. */
+       addr -= sizeof(gd_t);
+       addr &= ~7UL;
+       new_gd = (gd_t *)addr;
+
+       /* And finally, a new, bigger stack. */
+       new_sp = (unsigned long *)addr;
+       gd->stack_end = addr;
+       *(--new_sp) = 0;
+       *(--new_sp) = 0;
+
+       /*
+        * Initialize the board information struct with the
+        * information we have.
+        */
+       bd->bi_dram[0].start = CFG_SDRAM_BASE;
+       bd->bi_dram[0].size = sdram_size;
+       bd->bi_baudrate = gd->baudrate;
+
+       memcpy(new_gd, gd, sizeof(gd_t));
+
+       relocate_code((unsigned long)new_sp, new_gd, monitor_addr);
+}
 
-       gd->bd = malloc(sizeof(bd_t));
-       memset(gd->bd, 0, sizeof(bd_t));
-       gd->bd->bi_baudrate = gd->baudrate;
-       gd->bd->bi_dram[0].start = CFG_SDRAM_BASE;
-       gd->bd->bi_dram[0].size = gd->sdram_size;
+void board_init_r(gd_t *new_gd, ulong dest_addr)
+{
+       extern void malloc_bin_reloc (void);
+#ifndef CFG_ENV_IS_NOWHERE
+       extern char * env_name_spec;
+#endif
+       cmd_tbl_t *cmdtp;
+       bd_t *bd;
+
+       gd = new_gd;
+       bd = gd->bd;
+
+       gd->flags |= GD_FLG_RELOC;
+       gd->reloc_off = dest_addr - CFG_MONITOR_BASE;
+
+       monitor_flash_len = _edata - _text;
 
+       /*
+        * We have to relocate the command table manually
+        */
+       for (cmdtp = &__u_boot_cmd_start;
+            cmdtp !=  &__u_boot_cmd_end; cmdtp++) {
+               unsigned long addr;
+
+               addr = (unsigned long)cmdtp->cmd + gd->reloc_off;
+               cmdtp->cmd = (typeof(cmdtp->cmd))addr;
+
+               addr = (unsigned long)cmdtp->name + gd->reloc_off;
+               cmdtp->name = (typeof(cmdtp->name))addr;
+
+               if (cmdtp->usage) {
+                       addr = (unsigned long)cmdtp->usage + gd->reloc_off;
+                       cmdtp->usage = (typeof(cmdtp->usage))addr;
+               }
+#ifdef CFG_LONGHELP
+               if (cmdtp->help) {
+                       addr = (unsigned long)cmdtp->help + gd->reloc_off;
+                       cmdtp->help = (typeof(cmdtp->help))addr;
+               }
+#endif
+       }
+
+       /* there are some other pointer constants we must deal with */
+#ifndef CFG_ENV_IS_NOWHERE
+       env_name_spec += gd->reloc_off;
+#endif
+
+       timer_init();
+       mem_malloc_init();
+       malloc_bin_reloc();
+       dma_alloc_init();
        board_init_info();
        flash_init();
 
-       if (gd->bd->bi_flashsize)
+       if (bd->bi_flashsize)
                display_flash_config();
-       if (gd->bd->bi_dram[0].size)
+       if (bd->bi_dram[0].size)
                display_dram_config();
 
        gd->bd->bi_boot_params = malloc(CFG_BOOTPARAMS_LEN);
@@ -169,6 +328,13 @@ void start_u_boot (void)
        jumptable_init();
        console_init_r();
 
+#if (CONFIG_COMMANDS & CFG_CMD_NET)
+#if defined(CONFIG_NET_MULTI)
+       puts("Net:   ");
+#endif
+       eth_initialize(gd->bd);
+#endif
+
        for (;;) {
                main_loop();
        }
index 3197fe1c90b5dfa76f8e52562008115e08173614..a7aaef7a3c305e02ff1fc18c549ff6f6646b3516 100644 (file)
@@ -1,7 +1,7 @@
 #
 # U-boot Makefile
 #
-# Copyright (c) 2005 blackfin.uclinux.org
+# Copyright (c) 2005-2007 Analog Devices Inc.
 #
 # (C) Copyright 2000-2006
 # Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
 #
 # 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
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+# MA 02110-1301 USA
 #
 
 include $(TOPDIR)/config.mk
index 1b0d90ae67fcfe3280b9bd8be7934c2a63e30219..3b9c4df9883ac1805387bd6fd1d98ef69a955cc2 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - bf533_linux.c
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 /* Dummy functions, currently not in Use */
index 85b115076afd863f0794c80aa870d72a649da639..1553f1b5ac491b1fa1c41536e8fa55dedaed6b39 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - bf533_string.c Contains library routines.
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
 #include <asm/setup.h>
-#include <asm/page.h>
 #include <config.h>
 #include <asm/blackfin.h>
 #include <asm/io.h>
-
-extern void blackfin_icache_flush_range(const void *, const void *);
-extern void blackfin_dcache_flush_range(const void *, const void *);
-extern void *memcpy_ASM(void *dest, const void *src, size_t count);
-
-void *dma_memcpy(void *, const void *, size_t);
+#include "cache.h"
 
 char *strcpy(char *dest, const char *src)
 {
@@ -118,44 +112,7 @@ int strncmp(const char *cs, const char *ct, size_t count)
        return __res1;
 }
 
-/*
- * memcpy - Copy one area of memory to another
- * @dest: Where to copy to
- * @src: Where to copy from
- * @count: The size of the area.
- *
- * You should not use this function to access IO space, use memcpy_toio()
- * or memcpy_fromio() instead.
- */
-void *memcpy(void *dest, const void *src, size_t count)
-{
-       char *tmp = (char *)dest, *s = (char *)src;
-
-       /* L1_ISRAM can only be accessed via dma */
-       if ((tmp >= (char *)L1_ISRAM) && (tmp < (char *)L1_ISRAM_END)) {
-               /* L1 is the destination */
-               dma_memcpy(dest, src, count);
-
-               if (icache_status()) {
-                       blackfin_icache_flush_range(src, src + count);
-               }
-       } else if ((s >= (char *)L1_ISRAM) && (s < (char *)L1_ISRAM_END)) {
-               /* L1 is the source */
-               dma_memcpy(dest, src, count);
-
-               if (icache_status()) {
-                       blackfin_icache_flush_range(dest, dest + count);
-               }
-               if (dcache_status()) {
-                       blackfin_dcache_flush_range(dest, dest + count);
-               }
-       } else {
-               memcpy_ASM(dest, src, count);
-       }
-       return dest;
-}
-
-void *dma_memcpy(void *dest, const void *src, size_t count)
+static void *dma_memcpy(void *dest, const void *src, size_t count)
 {
        *pMDMA_D0_IRQ_STATUS = DMA_DONE | DMA_ERR;
 
@@ -189,3 +146,40 @@ void *dma_memcpy(void *dest, const void *src, size_t count)
        src += count;
        return dest;
 }
+
+/*
+ * memcpy - Copy one area of memory to another
+ * @dest: Where to copy to
+ * @src: Where to copy from
+ * @count: The size of the area.
+ *
+ * You should not use this function to access IO space, use memcpy_toio()
+ * or memcpy_fromio() instead.
+ */
+extern void *memcpy_ASM(void *dest, const void *src, size_t count);
+void *memcpy(void *dest, const void *src, size_t count)
+{
+       char *tmp = (char *) dest, *s = (char *) src;
+
+       if (dcache_status()) {
+               blackfin_dcache_flush_range(src, src+count);
+       }
+       /* L1_ISRAM can only be accessed via dma */
+       if ((tmp >= (char *)L1_ISRAM) && (tmp < (char *)L1_ISRAM_END)) {
+               /* L1 is the destination */
+               dma_memcpy(dest,src,count);
+       } else if ((s >= (char *)L1_ISRAM) && (s < (char *)L1_ISRAM_END)) {
+               /* L1 is the source */
+               dma_memcpy(dest,src,count);
+
+               if (icache_status()) {
+                       blackfin_icache_flush_range(dest, dest+count);
+               }
+               if (dcache_status()) {
+                       blackfin_dcache_invalidate_range(dest, dest+count);
+               }
+       } else {
+               memcpy_ASM(dest,src,count);
+       }
+       return dest;
+}
index e0b96da875d7940bb992dd0c0e941d2d93db11bf..1353421c33da3aa0fa9076534677c2faa28e554b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - blackfin_board.h
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #ifndef __BLACKFIN_BOARD_H__
index 1a0a2826c0631d84f89d812aac9fb7510d7326bc..1538da3f29a6f6a0317e9ff7d75d23322baf0161 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - board.c First C file to be called contains init routines
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
@@ -21,8 +21,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 #include <common.h>
@@ -182,7 +182,7 @@ void init_cplbtables(void)
        icplb_table[j][1] = L1_IMEMORY;
        j++;
 
-       for (i = 0; i <= CONFIG_MEM_SIZE / 4; i++) {
+       for (i = 0; i < CONFIG_MEM_SIZE / 4; i++) {
                icplb_table[j][0] = (i * 4 * 1024 * 1024);
                if (i * 4 * 1024 * 1024 <= CFG_MONITOR_BASE
                    && (i + 1) * 4 * 1024 * 1024 >= CFG_MONITOR_BASE) {
@@ -193,14 +193,19 @@ void init_cplbtables(void)
                j++;
        }
 #if defined(CONFIG_BF561)
+       /* MAC space */
+       icplb_table[j][0] = 0x2C000000;
+       icplb_table[j][1] = SDRAM_INON_CHBL;
+       j++;
        /* Async Memory space */
        for (i = 0; i < 3; i++) {
-               icplb_table[j++][0] = 0x20000000 + i * 4 * 1024 * 1024;
-               icplb_table[j++][1] = SDRAM_IGENERIC;
+               icplb_table[j][0] = 0x20000000 + i * 4 * 1024 * 1024;
+               icplb_table[j][1] = SDRAM_INON_CHBL;
+               j++;
        }
 #else
        icplb_table[j][0] = 0x20000000;
-       icplb_table[j][1] = SDRAM_IGENERIC;
+       icplb_table[j][1] = SDRAM_INON_CHBL;
 #endif
        j = 0;
        dcplb_table[j][0] = 0xFF800000;
@@ -220,13 +225,15 @@ void init_cplbtables(void)
 
 #if defined(CONFIG_BF561)
        /* MAC space */
-       dcplb_table[j++][0] = CONFIG_ASYNC_EBIU_BASE;
-       dcplb_table[j++][1] = SDRAM_EBIU;
+       dcplb_table[j][0] = 0x2C000000;
+       dcplb_table[j][1] = SDRAM_EBIU;
+       j++;
 
        /* Flash space */
-       for (i = 0; i < 2; i++) {
-               dcplb_table[j++][0] = 0x20000000 + i * 4 * 1024 * 1024;
-               dcplb_table[j++][1] = SDRAM_EBIU;
+       for (i = 0; i < 3; i++) {
+               dcplb_table[j][0] = 0x20000000 + i * 4 * 1024 * 1024;
+               dcplb_table[j][1] = SDRAM_EBIU;
+               j++;
        }
 #else
        dcplb_table[j][0] = 0x20000000;
index a15914b1098ded792ef48e787255fb131cfa7306..9d71bcb5474712c7ea24f5eb42f789520319baf4 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - cache.c
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * (C) Copyright 2000-2004
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 /* for now: just dummy functions to satisfy the linker */
 #include <config.h>
 #include <common.h>
 #include <asm/blackfin.h>
-
-extern void blackfin_icache_flush_range(unsigned long, unsigned long);
-extern void blackfin_dcache_flush_range(unsigned long, unsigned long);
+#include "cache.h"
 
 void flush_cache(unsigned long dummy1, unsigned long dummy2)
 {
@@ -43,9 +41,9 @@ void flush_cache(unsigned long dummy1, unsigned long dummy2)
                return;
 
        if (icache_status())
-               blackfin_icache_flush_range(dummy1, dummy1 + dummy2);
+               blackfin_icache_flush_range((void*)dummy1, (void*)(dummy1 + dummy2));
        if (dcache_status())
-               blackfin_dcache_flush_range(dummy1, dummy1 + dummy2);
+               blackfin_dcache_flush_range((void*)dummy1, (void*)(dummy1 + dummy2));
 
        return;
 }
diff --git a/lib_blackfin/cache.h b/lib_blackfin/cache.h
new file mode 100644 (file)
index 0000000..3ea6809
--- /dev/null
@@ -0,0 +1,35 @@
+/*
+ * U-boot - prototypes for cache handling functions.
+ *
+ * Copyright (c) 2005-2007 Analog Devices Inc.
+ *
+ * (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, see the file COPYING, or write
+ * to the Free Software Foundation, Inc.,
+ * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifndef _LIB_BLACKFIN_CACHE_H_
+#define _LIB_BLACKFIN_CACHE_H_
+
+extern void blackfin_icache_flush_range(const void *, const void *);
+extern void blackfin_dcache_flush_range(const void *, const void *);
+extern void blackfin_dcache_invalidate_range(const void *, const void *);
+
+#endif
index fcea5b3daf6fb21a93c9f1b351c7309d7c24f07a..9b58832943d98020bb49fdc5edc207246870ac02 100644 (file)
@@ -1,17 +1,8 @@
 /*
- * File:         arch/blackfin/lib/memcmp.S
- * Based on:
- * Author:
+ * File: memcmp.S
  *
- * Created:
- * Description:
- *
- * Rev:          $Id: memcmp.S 2386 2006-11-01 04:57:26Z magicyang $
- *
- * Modified:
- *               Copyright 2004-2006 Analog Devices Inc.
- *
- * Bugs:         Enter bugs at http://blackfin.uclinux.org/
+ * Copyright 2004-2007 Analog Devices Inc.
+ * Enter bugs at http://blackfin.uclinux.org/
  *
  * 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
index a73ff90712e8f8e6be4bb72e48716322a23592a1..24577bebdc4043a3ea54bd3d41b722b605fed585 100644 (file)
@@ -1,22 +1,8 @@
 /*
- * File:         arch/blackfin/lib/memcpy.S
- * Based on:
- * Author:
+ * File: memcpy.S
  *
- * Created:
- * Description:  internal version of memcpy(), issued by the compiler
- *               to copy blocks of data around.
- *               This is really memmove() - it has to be able to deal with
- *               possible overlaps, because that ambiguity is when the compiler
- *               gives up and calls a function. We have our own, internal version
- *               so that we get something we trust, even if the user has redefined
- *               the normal symbol.
- * Rev:          $Id: memcpy.S 2775 2007-02-21 13:58:44Z hennerich $
- *
- * Modified:
- *               Copyright 2004-2006 Analog Devices Inc.
- *
- * Bugs:         Enter bugs at http://blackfin.uclinux.org/
+ * Copyright 2004-2007 Analog Devices Inc.
+ * Enter bugs at http://blackfin.uclinux.org/
  *
  * 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
@@ -33,6 +19,7 @@
  * to the Free Software Foundation, Inc.,
  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
+
 .align 2
 
 .globl _memcpy_ASM;
index 79558f951e56871762357afcf05585814cdadc51..46f79ed18dcf67e44b2f73dd759dee5a8e6a73cf 100644 (file)
@@ -1,17 +1,8 @@
 /*
- * File:         arch/blackfin/lib/memmove.S
- * Based on:
- * Author:
+ * File: memmove.S
  *
- * Created:
- * Description:
- *
- * Rev:          $Id: memmove.S 2205 2006-09-23 07:53:49Z vapier $
- *
- * Modified:
- *               Copyright 2004-2006 Analog Devices Inc.
- *
- * Bugs:         Enter bugs at http://blackfin.uclinux.org/
+ * Copyright 2004-2007 Analog Devices Inc.
+ * Enter bugs at http://blackfin.uclinux.org/
  *
  * 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
index 7e6ee198eb7d0421fddb2650d1eb6cfb377d8228..c33c55112184abb235f18aa5cdf3132ebec02d28 100644 (file)
@@ -1,17 +1,8 @@
 /*
- * File:         arch/blackfin/lib/memset.S
- * Based on:
- * Author:
+ * File: memset.S
  *
- * Created:
- * Description:
- *
- * Rev:          $Id: memset.S 2769 2007-02-19 16:45:53Z hennerich $
- *
- * Modified:
- *               Copyright 2004-2006 Analog Devices Inc.
- *
- * Bugs:         Enter bugs at http://blackfin.uclinux.org/
+ * Copyright 2004-2007 Analog Devices Inc.
+ * Enter bugs at http://blackfin.uclinux.org/
  *
  * 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
@@ -29,7 +20,6 @@
  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  */
 
-
 .align 2
 
 /*
index da55711dd7451f405f5370ea14ad60e8641fc792..bf1ca535fa76c19326376b5b2486ba382fea8bbe 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * U-boot - muldi3.c contains routines for mult and div
  *
- * Copyright (c) 2005 blackfin.uclinux.org
+ * Copyright (c) 2005-2007 Analog Devices Inc.
  *
  * See file CREDITS for list of people who contributed to this
  * project.
@@ -18,8 +18,8 @@
  *
  * 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
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
+ * MA 02110-1301 USA
  */
 
 /* Generic function got from GNU gcc package, libgcc2.c */
index 24e8e970b367f3c6e2707453161734d8619eb409..9e85cdddc4aee4192529b760a4ae3c92ce28b4e4 100644 (file)
@@ -310,10 +310,6 @@ init_fnc_t *init_sequence[] = {
        prt_8260_clks,
 #endif /* CONFIG_8260 */
 
-#if defined(CONFIG_MPC83XX)
-       print_clock_conf,
-#endif
-
        checkcpu,
 #if defined(CONFIG_MPC5xxx)
        prt_mpc5xxx_clks,
@@ -568,7 +564,9 @@ void board_init_f (ulong bootflag)
 
        bd->bi_procfreq = gd->cpu_clk;  /* Processor Speed, In Hz */
        bd->bi_plb_busfreq = gd->bus_clk;
-#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || defined(CONFIG_440EP) || defined(CONFIG_440GR)
+#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \
+    defined(CONFIG_440EP) || defined(CONFIG_440GR) || \
+    defined(CONFIG_440EPX) || defined(CONFIG_440GRX)
        bd->bi_pci_busfreq = get_PCI_freq ();
        bd->bi_opbfreq = get_OPB_freq ();
 #elif defined(CONFIG_XILINX_ML300)
index d92f14270ef189fc80fa02f8b0ce2443478c116f..b14d661bbea885ff1d24925aeb3686fbc84a451c 100644 (file)
@@ -37,6 +37,8 @@
  * on our cache or tlb entries.
  */
 
+DECLARE_GLOBAL_DATA_PTR;
+
 struct exception_table_entry
 {
        unsigned long insn, fixup;
@@ -55,13 +57,25 @@ search_one_table(const struct exception_table_entry *first,
                long diff;
 
                mid = (last - first) / 2 + first;
-               diff = mid->insn - value;
-               if (diff == 0)
-                       return mid->fixup;
-               else if (diff < 0)
-                       first = mid+1;
+               if ((ulong) mid > CFG_MONITOR_BASE) {
+                       /* exception occurs in FLASH, before u-boot relocation.
+                        * No relocation offset is needed.
+                        */
+                       diff = mid->insn - value;
+                       if (diff == 0)
+                               return mid->fixup;
+               } else {
+                       /* exception occurs in RAM, after u-boot relocation.
+                        * A relocation offset should be added.
+                        */
+                       diff = (mid->insn + gd->reloc_off) - value;
+                       if (diff == 0)
+                               return (mid->fixup + gd->reloc_off);
+               }
+               if (diff < 0)
+                       first = mid + 1;
                else
-                       last = mid-1;
+                       last = mid - 1;
        }
        return 0;
 }
@@ -75,8 +89,11 @@ search_exception_table(unsigned long addr)
 
        /* There is only the kernel to search.  */
        ret = search_one_table(__start___ex_table, __stop___ex_table-1, addr);
+       /* if the serial port does not hang in exception, printf can be used */
+#if !defined(CFG_SERIAL_HANG_IN_EXCEPTION)
        if (ex_tab_message)
                printf("Bus Fault @ 0x%08lx, fixup 0x%08lx\n", addr, ret);
+#endif
        if (ret) return ret;
 
        return 0;
index 4b1c8abf95e90c4ec6fc45a44e81b357e9b80fb5..212b83838c6ebba4289d0610d78ba838a5914e30 100644 (file)
@@ -23,7 +23,7 @@
 
 #include "libfdt_internal.h"
 
-int _fdt_check_header(const void *fdt)
+int fdt_check_header(const void *fdt)
 {
        if (fdt_magic(fdt) == FDT_MAGIC) {
                /* Complete tree */
@@ -72,7 +72,7 @@ const char *_fdt_find_string(const char *strtab, int tabsize, const char *s)
 
 int fdt_move(const void *fdt, void *buf, int bufsize)
 {
-       int err = _fdt_check_header(fdt);
+       int err = fdt_check_header(fdt);
 
        if (err)
                return err;
index ce01dc700b60f207693ecba52b81258ce3934600..4e2c325b4d5590615b1aa329d89d2cf86da09079 100644 (file)
@@ -25,7 +25,7 @@
 
 #define CHECK_HEADER(fdt)      { \
        int err; \
-       if ((err = _fdt_check_header(fdt)) != 0) \
+       if ((err = fdt_check_header(fdt)) != 0) \
                return err; \
 }
 
@@ -188,7 +188,7 @@ struct fdt_property *fdt_get_property(const void *fdt,
        int offset, nextoffset;
        int err;
 
-       if ((err = _fdt_check_header(fdt)) != 0)
+       if ((err = fdt_check_header(fdt)) != 0)
                goto fail;
 
        err = -FDT_ERR_BADOFFSET;
@@ -329,3 +329,74 @@ uint32_t fdt_next_tag(const void *fdt, int offset, int *nextoffset, char **namep
 
        return tag;
 }
+
+/*
+ * Return the number of used reserve map entries and total slots available.
+ */
+int fdt_num_reservemap(void *fdt, int *used, int *total)
+{
+       struct fdt_reserve_entry *re;
+       int  start;
+       int  end;
+       int  err = fdt_check_header(fdt);
+
+       if (err != 0)
+               return err;
+
+       start = fdt_off_mem_rsvmap(fdt);
+
+       /*
+        * Convention is that the reserve map is before the dt_struct,
+        * but it does not have to be.
+        */
+       end = fdt_totalsize(fdt);
+       if (end > fdt_off_dt_struct(fdt))
+               end = fdt_off_dt_struct(fdt);
+       if (end > fdt_off_dt_strings(fdt))
+               end = fdt_off_dt_strings(fdt);
+
+       /*
+        * Since the reserved area list is zero terminated, you get one fewer.
+        */
+       if (total)
+               *total = ((end - start) / sizeof(struct fdt_reserve_entry)) - 1;
+
+       if (used) {
+               *used = 0;
+               while (start < end) {
+                       re = (struct fdt_reserve_entry *)(fdt + start);
+                       if (re->size == 0)
+                               return 0;       /* zero size terminates the list */
+
+                       *used += 1;
+                       start += sizeof(struct fdt_reserve_entry);
+               }
+               /*
+                * If we get here, there was no zero size termination.
+                */
+               return -FDT_ERR_BADLAYOUT;
+       }
+       return 0;
+}
+
+/*
+ * Return the nth reserve map entry.
+ */
+int fdt_get_reservemap(void *fdt, int n, struct fdt_reserve_entry *re)
+{
+       int  used;
+       int  total;
+       int  err;
+
+       err = fdt_num_reservemap(fdt, &used, &total);
+       if (err != 0)
+               return err;
+
+       if (n >= total)
+               return -FDT_ERR_NOSPACE;
+       if (re) {
+               *re = *(struct fdt_reserve_entry *)
+                       _fdt_offset_ptr(fdt, n * sizeof(struct fdt_reserve_entry));
+       }
+       return 0;
+}
index b33fbf45debd7c1c27bf4903bb6cac61aa8246e0..aaafc53644fb89100db283bcfabf2adef9c535b0 100644 (file)
@@ -27,7 +27,7 @@ static int rw_check_header(void *fdt)
 {
        int err;
 
-       if ((err = _fdt_check_header(fdt)))
+       if ((err = fdt_check_header(fdt)))
                return err;
        if (fdt_version(fdt) < 0x11)
                return -FDT_ERR_BADVERSION;
index 261b9b0dc9379f714fd00ea2a0806d065a269336..2d2ed37c477787cc66625d5248bbd5eddc08ea2b 100644 (file)
@@ -110,3 +110,28 @@ int fdt_nop_node(void *fdt, int nodeoffset)
        nop_region(fdt_offset_ptr(fdt, nodeoffset, 0), endoffset - nodeoffset);
        return 0;
 }
+
+/*
+ * Replace a reserve map entry in the nth slot.
+ */
+int fdt_replace_reservemap_entry(void *fdt, int n, uint64_t addr, uint64_t size)
+{
+       struct fdt_reserve_entry *re;
+       int  used;
+       int  total;
+       int  err;
+
+       err = fdt_num_reservemap(fdt, &used, &total);
+       if (err != 0)
+               return err;
+
+       if (n >= total)
+               return -FDT_ERR_NOSPACE;
+       re = (struct fdt_reserve_entry *)
+               (fdt + fdt_off_mem_rsvmap(fdt) +
+                (n * sizeof(struct fdt_reserve_entry)));
+       re->address = cpu_to_fdt64(addr);
+       re->size    = cpu_to_fdt64(size);
+
+       return 0;
+}
index ce39032a9108317e1c358e7f15d8caba4df09ae4..ec1be5a768a5a228570aa5488353bba56a23b32a 100644 (file)
@@ -1,5 +1,5 @@
 #
-# (C) Copyright 2006
+# (C) Copyright 2006-2007
 # Stefan Roese, DENX Software Engineering, sr@denx.de.
 #
 # See file CREDITS for list of people who contributed to this
index cca93920594b521b634c8315462b1518d4208350..0fc22115dc20772349dde0e9bd9fd7fa849314d4 100644 (file)
--- a/net/eth.c
+++ b/net/eth.c
@@ -52,9 +52,12 @@ extern int rtl8139_initialize(bd_t*);
 extern int rtl8169_initialize(bd_t*);
 extern int scc_initialize(bd_t*);
 extern int skge_initialize(bd_t*);
+extern int tsi108_eth_initialize(bd_t*);
 extern int tsec_initialize(bd_t*, int, char *);
 extern int npe_initialize(bd_t *);
 extern int uec_initialize(int);
+extern int bfin_EMAC_initialize(bd_t *);
+extern int atstk1000_eth_initialize(bd_t *);
 
 static struct eth_device *eth_devices, *eth_current;
 
@@ -249,12 +252,21 @@ int eth_initialize(bd_t *bis)
 #ifdef CONFIG_NS8382X
        ns8382x_initialize(bis);
 #endif
+#if defined(CONFIG_TSI108_ETH)
+       tsi108_eth_initialize(bis);
+#endif
 #if defined(CONFIG_RTL8139)
        rtl8139_initialize(bis);
 #endif
 #if defined(CONFIG_RTL8169)
        rtl8169_initialize(bis);
 #endif
+#if defined(CONFIG_BF537)
+       bfin_EMAC_initialize(bis);
+#endif
+#if defined(CONFIG_ATSTK1000)
+       atstk1000_eth_initialize(bis);
+#endif
 
        if (!eth_devices) {
                puts ("No ethernet found.\n");
index 1d1c98f3c20204c74ef3173b50537e21af8c60cd..2ff7bfc09f0bf63ae6ca488df6fabce7f44d32b7 100644 (file)
--- a/net/net.c
+++ b/net/net.c
@@ -1424,6 +1424,26 @@ NetReceive(volatile uchar * inpkt, int len)
                                /* XXX point to ip packet */
                                (*packetHandler)((uchar *)ip, 0, 0, 0);
                                return;
+                       case ICMP_ECHO_REQUEST:
+#ifdef ET_DEBUG
+                               printf ("Got ICMP ECHO REQUEST, return %d bytes \n",
+                                       ETHER_HDR_SIZE + len);
+#endif
+                               memcpy (&et->et_dest[0], &et->et_src[0], 6);
+                               memcpy (&et->et_src[ 0], NetOurEther, 6);
+
+                               ip->ip_sum = 0;
+                               ip->ip_off = 0;
+                               NetCopyIP((void*)&ip->ip_dst, &ip->ip_src);
+                               NetCopyIP((void*)&ip->ip_src, &NetOurIP);
+                               ip->ip_sum = ~NetCksum((uchar *)ip, IP_HDR_SIZE_NO_UDP >> 1);
+
+                               icmph->type = ICMP_ECHO_REPLY;
+                               icmph->checksum = 0;
+                               icmph->checksum = ~NetCksum((uchar *)icmph,
+                                               (len - IP_HDR_SIZE_NO_UDP) >> 1);
+                               (void) eth_send((uchar *)et, ETHER_HDR_SIZE + len);
+                               return;
 #endif
                        default:
                                return;